Series Phản Phác Quy Chân – Đừng cắm mặt vào dùng công nghệ, hãy hiểu nó!

Xin bắt đầu bài viết bằng một câu chuyện nho nhỏ về hai thanh niên tên K và tên H.

Ngày xửa ngày xưa, K và H là đôi bạn thân học cùng Đại Học. Thuở ra trường, do có khả năng, cả hai được nhận vào một công ty làm C#, sử dụng ASP.NET MVC. Câu chuyện bắt đầu từ đó.

Hai cách tiếp cận vấn đề

Để học ASP.NET MVC, K ra Nhất Nghệ học và lên mạng xem thêm các clip tiếng Việt về ASP.NET. Nhờ làm theo hướng dẫn, sau một tháng K đã thành thạo những task cơ bản, hoàn thành công việc được giao.

Mỗi lần gặp task phức tạp hoặc có lỗi, K lại lên stackoverflow xem cách giải quyết. Thấy mình làm được việc, K nghĩ mình đã biết đủ rồi, không cần học thêm gì nữa.

H thì không vội vàng học công nghệ mà tìm hiểu thật kĩ về ngôn ngữ C# và mô hình MVC. Sau đó H thì lại lên Pluralsight học, tìm đọc các sách chuyên sâu về ASP.NET của Apress.

H không chỉ code theo hướng dẫn, mà còn tìm hiểu kĩ nền tảng của ASP.NET: route mapping thế nào, view được hiển thị ra sao, các HTML Control sẽ được khởi tạo như thế nào.

Hai năm sau, ASP.NET dần nâng cấp lên các phiên bản mới. K bắt đầu hụt hơi khi không theo kịp những thay đổi của công nghệ, gặp bug lạ là bó tay.

Trong khi đó, do đã nắm vững bản chất công nghệ, H dễ dàng áp dụng những chức năng mới. H còn nhanh chóng học thêm về Ruby on Rails, Django nhờ đã nắm vững cơ chế hoạt động của mô hình MVC.

Nửa năm sau, bố của K thấy K đi code hoài tội quá, cho K 1 tỷ để mở công ty. Công ty thành công rực rỡ, K có xe xịn, nhà cao, vợ đẹp con ngoan. Còn H vẫn ngày ngày đi code dạo và viết blog.

May mắn là do viết Blog nên H cũng ra mắt được một cuốn sách khá hay mang tên Code Dạo Kí Sự

Qua câu chuyện này, chúng ta rút ra được hai bài học:

  • Bài học thứ nhất: Giỏi code đến mấy cũng không bằng nhà giàu, may mắn và gặp thời.
  • Bài học thứ hai: Để trở thành một lập trình viên giỏi thật sự, ta phải nắm rõ bản chất vấn đề, hiểu bản chất công nghệ/ngôn ngữ của mình đang sử dụng.

Tại sao phải nắm bản chất vấn đề?

Mình đã từng nói về tầm quan trọng của việc nắm rõ bản chất trong bài: Cảnh giới tối cao trong code học.

Hiện nay, nhiều bạn sinh viên thích học lập trình theo kiểu chưa học bò đã lo học chạy: Nhắm mắt nhắm mũi chọn một công nghệ, lao đầu vào các khoá học trên mạng, code theo hướng dẫn để code ra một sản phẩm gì đấy.

Cách học code tốt nhất chính là… tự tay code. Ưu điểm của phương pháp học này là các bạn được code ngay, tạo ra được sản phẩm. Điều này làm bạn có hứng thú hơn so với việc ngồi học lý thuyết nhàm chán.

Tuy nhiên, cách học này cũng dễ làm bạn… tự tin thái quá, nghĩ rằng mình đã biết hết. Điều này dễ dẫn đến việc cắm đầu cắm đít code theo hướng dẫn mà không hiểu rõ cách code hoạt động, không hiểu bản chất công nghệ mình sử dụng.

Để làm lái xe giỏi, bạn không cần phải biết cách động cơ xe hoạt động, cấu tạo của cần lái, vô lăng. Tuy nhiên, làm lập trình viên mà không hiểu về công nghệ mình dùng, ngôn ngữ mình code, bạn sẽ gặp nhiều khó khăn khi làm những task phức tạp, khi gặp bug lạ, khi cần thiết kế hay tối ưu code.

Liệu bạn đã hiểu rõ công nghệ, hay chỉ biết cắm đầu mà sử dụng

Hãy như H ở câu chuyện trên. Hiểu rõ bản chất vấn đề, bạn có thể dễ dàng chuyển đổi qua lại giữa nhiều công nghệ, tự tin giải quyết các vấn đề phức tạp.

Đó cũng là lý do mà trong các trường đại học, các thầy cô thường khuyến khích các bạn code tay để hiểu vấn đề, thay vì dùng ngôn ngữ này/công nghệ nọ.

Đừng vội học framework!!

Tình trạng này mình đã gặp khá nhiều. Có vài bạn đi làm, vì nhu cầu công việc nên phải học ngay một công nghệ nào đấy (Laravel, AngularJS, …). Các bạn cắm đầu vào học ngay công nghệ để làm được việc.

Các framework này đã hỗ trợ tận răng nên học khá dễ dàng, học một thời gian các bạn đã làm được những task đơn giản, hoàn thành việc được giao.

Tuy nhiên, điều này lại khá tai hại. Kiến thức chỉ có phần ngọn mà không có phần gốc, không có nền tảng sẽ dễ dàng lung lay.

Khi gặp những task phức tạp, tìm không ra hướng dẫn, các bạn dễ bó tay. Khi gặp những con bug đểu, nằm sâu trong framework, bạn cũng không biết cách sửa.

Lúc này, bạn chỉ giống như một thợ code, code như cái máy chứ không hiểu rõ công việc mình đang làm.

Liệu bạn có là “code monkey”, chỉ biết copy paste code như con khỉ?

Lời khuyên mình muốn dành cho các bạn là:

Chịu khó học bò trước khi học chạy. Nắm vững bản chất của ngôn ngữ mà công nghệ mình sử dụng, đơn cử như:

  • PHP còn chưa vững thì đừng đú Laravel hay CodeIgniter.
  • Có mần AngularJS, jQuery hay React thì cũng nên học kĩ JS trước
  • Muốn code Android thì phải hiểu rõ Java.
  • Làm ứng dụng di động bằng React-Native, hãy hiểu JS, hiểu React trước khi bắt đầu code theo hướng dẫn.

Vậy làm sao để nắm được bản chất công nghệ, hãy đọc phần cuối nhé!

Làm sao để nắm được bản chất công nghệ?

  • Chịu khó đọc nhiều sách: Các sách công nghệ thường viết kĩ về lý thuyết, có cấu trúc hơn là các video hay khoá học. Đọc thể loại sách này khá là chán, các bạn nên kết hợp đọc sách + xem video + code. Mình khuyên các bạn học C# nên đọc C# in Depth, học JavaSscript thì nên đọc series You don’t know JS, học NodeJS thì nên xem khoá học Understanding NodeJS. Mỗi ngôn ngữ đều có những cuốn sách nền tảng khá hay.
  • Luôn luôn đói ăn, luôn luôn ngu học: Đây là một câu danh ngôn của Steve Jobs được mình độ chế lại. Đừng nghĩ rằng mình đã giỏi, đã biết tất cả mà hãy luôn cho rằng mình ngu, chưa biết gì nên phải học hỏi. Hãy giữ cho mình một sự tò mò, muốn tìm hiểu bản chất vấn đề.

  • Đừng “sợ” thư viện và framework: Các thư viện/framework này thật là chỉ là “code người ta”, code do developer khác viết. Hầu như chúng đều có source code trên github. Các bạn chỉ cần lên github mở source code ra xem là biết có gì trong đó thôi. Bản thân mình cũng từng mở xem source code của vài cái library JS, nhiều cái bên trong code cũng ngu chết mẹ.
  • Viết blog hoặc tutorial: Chia sẻ kiến thức của mình cho người khác cũng là một cách khá hay. Để viết một bài blog hay tutorial, bạn sẽ phải tìm hiểu kĩ về bản chất công nghệ, về những thứ liên quan trước khi viết. Do vậy mình viết blog nhiều là vì lợi ích của mình đấy, không phải các bạn đâu hihi.

Còn các bạn thì sao? Các bạn có nghĩ rằng mình nên nắm vững bản chất công nghệ không, hay chỉ cần hiểu để làm được việc là được rồi? Cùng đưa ý kiến trong phần bình luận nhé.

Advertisements

15 thoughts on “Series Phản Phác Quy Chân – Đừng cắm mặt vào dùng công nghệ, hãy hiểu nó!”

  1. rất bổ bích 😀 đọc xong cái này e quay lại tiếp tục học C# tiếp. hoãn học MVC lại 😀

    Like

  2. bác có thể giới thiệu mình vài cuốn Android viết chi tiết sâu về bản chất ngôn ngữ được không 😀

    Like

  3. Mình thì hay học theo kiểu cứ làm theo tutorial trước được một cái demo cho nó có động lực. Sau đó quay lại học cơ bản, rồi học tiếp framework.

    Like

  4. Chào anh H, cho em hỏi anh khi đọc source code của các thư viện hoặc project lớn thì mình nên bắt đầu từ đâu vậy anh. Nhìn vào cả đống code em không biết nên bắt đầu từ class nào trừ khi mình sài rồi mình bắt đầu tại điểm đó. Nhưng cái mình sài chỉ là ở mức detail còn em muốn hiểu bao quát nó như thế nào trước khi đi vào detail

    Like

    1. Chả ai rảnh hơi mà đi đọc source code của thư viện đâu bạn, chỉ cần hiểu mục đích của nó và cách dùng nó. Trừ khi bạn có issue hoặc cần phải custom lại gì đó thì lúc đó mới động đến source code thôi.

      Like

  5. “Bản thân mình cũng từng mở xem source code của vài cái library JS, nhiều cái bên trong code cũng ngu chết mẹ.” => nhiều khi thấy đoạn code mình viết ra ngu thiệt nhưng mà vì những cái như tương thích ngược mà phải chấp nhận thôi :v

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s