Thực hư về cái gọi là “căn bản” và “tư duy lập trình”

Thuở còn là sinh viên, mỗi khi phải ngồi nghe giảng giải những kiến thức khô khan buồn ngủ, chúng ta thường bị mấy ông thầy dụ dỗ “Kiến thức căn bản quan trọng lắm, nắm vững căn bản rồi sau này học gì cũng được!”.

Mấy năm sau, chúng ta lại tiếp tục được nghe “Tư duy lập trình mới quan trọng, ngôn ngữ hay thuật toán chỉ là phụ thôi”.

Điều này đôi khi làm sinh viên “loạn” vì không biết thật sự “căn bản” là những cái gì; “tư duy lập trình” mặt mũi nó ra sao, làm sao để rèn luyện nó?

Bài viết này sẽ cùng vén bức màn bí mật về những thứ gọi là “căn bản” và “tư duy lập trình” mà giang hồ thường nhắc đến.

Kiến thức căn bản gồm những gì?

Đây là những kiến thức cơ sở nhất, là những viên gạch đặt nền móng cho kiến thức sau này (VD như: thuật toán cấu trúc dữ liệu, OOP, vòng lặp, đệ qui, callback, 1 số mô hình MVC MVVM, cơ chế hoạt động của web, …).

Vì chúng là kiến thức nền tảng, mang tính học thuật nhiều nên đôi khi khá là phi thực tế và buồn ngủ. Chắc hẳn ai cũng từng nhức đầu đau não khi nghe các thầy giảng về sự kiện, con trỏ hàm, cây nhị phân, đệ qui… .

Tuy nhiên, nếu nắm vững những kiến thức nền tảng này, bạn sẽ thấy việc chuyển đổi qua lại giữa các ngôn ngữ khác nhau rất dễ dàng, vì chúng được xây dựng dựa trên nền tảng chung. (Như bản thân mình, vì đã rõ cơ chế GET/POST, giao tiếp giữa client/server, mô hình MVC, mình có thể học nhanh Zend của PHP, Struts2 của Java, ASP.MVC của C#).

Trường đại học chủ yếu dạy những kiến thức này, do đó đôi khi bạn sẽ thấy chương trình học khá khô khan. Hãy nhớ điều mình từng học khi xem phim kiếm hiệp thời xưa, để học được võ công thượng thừa, phải rành những chiêu thức cơ bản trước. Những chiêu thức hoa mĩ đều từ cơ bản mà ra cả.

Tư duy lập trình là cái chi chi?

Tư duy lập trình là một thứ hơi … hư cấu vì chưa ai thấy mặt mũi nó như thế nào cả. Có người bảo rằng tư duy lập trình là thuật toán, học thuật toán và giải bài tập cho giỏi thì nhiều thì tư duy lập trình sẽ giỏi.

Cá nhân mình nghĩ, tư duy lập trình bao gồm tư duy giải quyết vấn đềtư duy để chuyển cách giải đó thành code.

Tư duy giải quyết vấn đề sẽ giúp bạn phân tích vấn đề thành những vấn đề nhỏ hơn, xem xét những phương án giải quyết phù hợp, lựa chọn phương án tối ưu. Sau khi đã chọn được phương án thích hợp, ta phải biết cách tư duy để chuyển phương án này thành code.

Ví dụ như với ứng dụng Nhận Diện Idol, vấn đề đặt ra là: làm sau nhận diện được tên idol dựa vào hình ảnh đưa vào. Mình dùng tư duy để tìm ra hướng giải quyết gồm ba bước:

  1. Tìm API nhận diện khuôn mặt
  2. Xây dựng cơ sở dữ liệu mẫu gồm các JAV Idol để so sánh
  3. Dựa trên CSDL đã có, dùng API để huấn luyện cho máy nhận diện
  4. Khi đưa ảnh vào, dùng API để nhận diện ảnh, tra cứu trong CSDL đã có

Sau khi đã tìm được hướng giải quyết, mình mới bắt đầu viết code để hiện thực từng bước thôi.

Để rèn luyện tư duy này, cách duy nhất là suy nghĩ nhiều, lập trình nhiều. Muốn cơ bắp to thì bạn phải tập gym chứ không thể xem tạp chí thể hình. Muốn chịch giỏi bạn phải chịu khó chịch chứ không phải chỉ xem JAV là giỏi.  Tương tự, muốn rèn luyện tư duy lập trình thì phải chịu khó lập trình nhiều chứ không phải chỉ đọc sách là được.

Hạn chế lên Nhận diện Idol tìm link mà chịu khó ra ngoài kiếm gấu nhé!

Căn bản quan trọng cỡ nào?

Căn bản rất quan trọng, nhưng các bạn đừng đặt tư tưởng là “phải nắm vững căn bản rồi mới làm!”. Việc học căn bản khá nặng nề, mệt mỏi và buồn ngủ. Đừng cố gắng nắm vững căn bản ngay từ đầu, khó lắm! Cứ bắt tay vào thực hành đi, việc trực tiếp code sẽ giúp bạn ngộ ra nhiều điều, giải đáp những điều bạn chưa rõ khi học căn bản.

Ngoài ra, bạn cũng đừng mang tư tưởng học căn bản cho xong là ngừng, từ nay mình giỏi rồi, học ngôn ngữ mới dễ òm, chả cần học thêm gì nữa.

Tại sao vậy? Kiến thức thay đổi, đôi khi có những thứ căn bản cũng sẽ thay đổi theo. Giả sử bây giờ giang hồ không sử dụng OOP nữa, mà chuyển qua Functional Programming. Lúc này, đống căn bản về OOP sẽ trở nên vô dụng hết.

Ngoài ra, có nhiều thứ vượt lên căn bản, phải đào sâu tìm hiểu và tiếp xúc lâu dài với công nghệ thì mới ngộ ra được.

Kết

Xét cho cùng “căn bản” vốn chỉ là căn bản thôi. Nó chỉ là một cái nền. Có nền móng vững chắc sẽ rất tốt, nhưng nếu nhà mà chỉ có nền mà không có tường, không có điện nước thì cho tiền cũng không ai dám ở. Một cái cây có bộ rễ vững chắc có thể chống chọi được bão tố, nhưng nếu nó cứ chăm chút dinh dưỡng cho bộ rễ thì sẽ không vươn cao vươn xa được.

Các mẫu phỏng vấn tuyển dụng cũng không ai thêm chữ “căn bản” vào nội dung tuyển dụng, mà họ tuyển người có những kĩ năng cần thiết, kiến thức về công nghệ. Do đó, đừng quá bám rễ vào căn bản, cũng đừng đua đòi chạy theo công nghệ mà hãy biết uyển chuyển thay đổi cho phù hợp nhé.

 

Quảng cáo 30s: Anh Song bạn mình, CEO bên Cybersoft đang có 1 khóa học Lập trình Tư Duy Thuật Toán.  Khóa này giúp các bạn nắm vững lại kiến thức cơ bản, học cách phân tích bài toán, làm dự án để rèn luyện tư duy lập trình.

Bạn nào có hứng thú thì kéo xuống dưới đăng kí, dùng mã CODEDAO_TUDUY để được ưu đãi nha http://bit.ly/cyber-tuduy

20 thoughts on “Thực hư về cái gọi là “căn bản” và “tư duy lập trình””

  1. anh viết bá lắm.. cơ mà page có fan nữ nữa anh viết z đọc nó ngượng vcl ra ạ ^^~ code nhiều thì giỏi, mà thật là chịch nhiều thì giỏi chịch sao?

    Like

  2. Cám ơn anh, bài viết của anh giúp em học hỏi được nhiều điều mới, sắp tới anh có thể viết một bài về định hướng sinh viên nên theo hướng nào được không ? ví dụ: làm game, làm back end, làm front end, ứng dụng di động,..

    Like

    1. Việc định hướng là tuỳ vào sở thíh và đam mê mỗi người em. Em tìm trong blog hoặc xem sách code dạo ký sự của anh thì anh có nhâc đến back-end, front-end và di động nhé 😉

      Liked by 2 people

  3. Anh cho em hỏi hiện tại đang học js thì nên học OOP cho hiểu và làm hay là nên học cái functional programming luôn anh. Hay là tùy vào công ty yêu cầu ^^

    Like

  4. A Hoàng hướng dẫn e nên mua laptop nào để lập trình từ 15tr đổ lại đi ạ. E xám ơn!

    Like

Leave a comment