Home » Ước gì tôi biết được 5 điều này trước khi học lập trình

Ước gì tôi biết được 5 điều này trước khi học lập trình

  • by

Nếu bạn có thể quay ngược thời gian vào lúc bạn bắt đầu học lập trình, thì bạn ước bạn muốn biết được những điều gì?

Lập trình là tư duy / suy nghĩ

Chúng ta tốn rất nhiều thời gian để suy nghỉ khi muốn tạo ra một ứng dụng mới. Loại database nào mình sẽ sử dụng: SQL hoặc NoSQL? Tôi sẽ sử dụng phương pháp nào để thêm lớp (classes) cho code của mình? Tôi sẽ xây dựng cấu trúc ứng dụng web của tôi như thế nào?….

Vâng, lập trình là viết những dòng mã lệnh, thiết kế giao diện.v.v…, nhưng tư duy/ suy nghỉ là phần lớn nhất của lập trình. Thực ra, đó là phần quan trọng nhất của lập trình.

Và bạn NÊN DÙNG NHIỀU THỜI GIAN CHO VIỆC SUY NGHỈ thực sự THAY VÌ DÀNH NHIỀU THỜI GIAN CHO VIỆC HỌC NHIỀU NGÔN NGỮ.

Học cách giải quyết nhiều vấn đề khác nhau sẽ tốt hơn là học nhiều ngôn ngữ lập trình, bạn đồng ý với tôi chứ?

Chắc chắn rằng bạn sẽ rất ấn tượng khi nghe ai đó nói rằng họ học được 5 ngôn ngữ lập trình chỉ trong một năm. Nhưng có thực sự là họ rành rẻ 5 ngôn ngữ không hay là chỉ biết cơ bản về cú pháp của 05 ngôn ngữ và chỉ có thể viết những vòng lặp căn bản, tạo những lớp (classes) căn bản mà không thể viết các dòng lệnh chuyên sâu hơn?.

Tôi tin rằng bạn KHÔNG thể cải thiện khả năng lập trình của mình bằng cách học ngôn ngữ mới, framwork mới hoặc nhiều khoá học lập trình mới. Thay vào đó, bạn chỉ thực sự học khi bạn nắm được những khối lệnh căn bản của một ngôn ngữ và bạn bắt đầu ứng dụng nó để giải quyết các vấn đề thực tế.

Ví dụ bạn học tiếng Pháp 03 buổi/ tuần trong 03 tháng. Sau đó bạn cũng học như vậy với tiếng Nga, tiếng Đức và tiếng Ý. Bạn có cho rằng bạn biết 04 thứ tiếng?

Cùng lắm là bạn có thể đếm số hoặc nói vài câu giao tiếp căn bản của mỗi ngôn ngữ chứ bạn không thể giao tiếp với người bản xứ hoặc đọc hiểu một cuốn sách bằng ngôn ngữ đó đúng không nào?

Vậy thì tại sao bạn lại chọn cách học như vậy đối với ngôn ngữ lập trình?

Tôi cũng đã từng nghỉ và làm như vậy khi bắt đầu học lập trình.

Tôi xem hết hướng dẫn này đến hướng dẫn khác trên youtube, bài post trên blog và nghỉ rằng mình biết về Python, Django, Laravel hoặc Nodejs.

Nhưng khi tôi bắt đầu thực hiện dự án tôi kẹt cứng không làm được gì cả. Tôi ngay cả không thể tạo ra khung sườn cơ bản của một dự án.

Vậy thì phải làm thế nào?

Thay vì học nhiều ngôn ngữ hoặc nhiều framework, tôi sẽ CHỌN HỌC MỘT NGÔN NGỮ VÀ ÁP DỤNG NGAY VÀO MỘT DỰ ÁN sử dụng ngôn ngữ hoặc framework đó.

Đây là khi bạn thực sự học: Bạn áp dụng những gì bạn học được. Bởi vì bạn chỉ nhớ khoản 50% những gì bạn học (đó là giỏi lắm rồi) và bạn chỉ bắt đầu lấp đầy những kiến thức còn thiếu để giải quyết vấn đề bằng cách làm.

Tóm lại: Học lập trình là học cách giải quyết vấn đề, chứ không phải là học nhiều ngôn ngữ.

Chỉ chọn một ngôn ngữ để học

Chọn một ngôn ngữ (ngôn ngữ phổ biết hay ngôn ngữ bạn thích) và gắn kết với nó.

Học những kiến thức căn bản, sau đó học cách giải quyết các vấn đề với ngôn ngữ đó. Không phải bằng cách đọc những bài giảng mà bằng cách thực hiện dự án của riêng mình. CHỌN DỰ ÁN MÀ BẠN THỰC SỰ THÍCH.

Bạn sẽ gặp phải rất nhiều vấn đề (Làm thế nào để kết nối database? Làm thế nào tôi có thể lấy được tất cả người sử dụng áp của tôi? Làm thế nào để chỉ hiện lên người dùng với tài khoản ưu đãi?) nhưng bằng cách giải quyết những vấn đề thực tế mà bạn gặp phải, bạn sẽ đạt dược những kinh nghiệm thực sự mà tài liệu hướng dẫn không thể giúp bạn.

Tôi không nói rằng tài liệu hướng dẫn là không tốt. Thực ra, nó sẽ giúp bạn hiểu căn bản một dự án được cầu trúc ra sao, những vấn đề căn bản được giải quyết như thế nào, nhưng BẠN PHẢI THỰC SỰ LÀM mới nắm rõ được các vấn đề và cách giải quyết chúng. Học từ tài liệu, nhưng đừng mắc kệt với nó, được chứ?

Ví dụ thực tế từ thân tôi:

Tôi sử dụng rất nhiều ngôn ngữ: Javascript, Java, C++, C#, PHP, Python. Nhưng tôi chỉ có thể lập trình với một vài ngôn ngữ (Python, Javascript và có thể PHP và Java). Bạn thấy đó, bạn sẽ không bao giờ sử dụng tất cả các ngôn ngữ bạn học.

Đó là lý do tại sao tôi tập trung vào học sâu về Python. Tôi sử dụng Python và Javascript hàng ngày và học thêm mỗi ngày một ít về Python.

Tôi đã học cách thay vì làm vòng lặp với 4 dòng lệnh bằng một dòng lệnh với “list comprehension”, sử dụng lambdas như thế nào v.v..Nhưng tôi thực sự học được nhiều hơn bằng cách thực hiện dự án thực tế.

Thay vì vội vả học nhiều ngôn ngữ, tôi chọn học chuyên sâu một ngôn ngữ trước. Dĩ nhiên sẽ có nhiều người cùng thời gian lập trình như tôi biết nhiều ngôn ngữ hơn. Nhưng nếu nói rằng họ nắm vững các ngôn ngữ đó như tôi nắm vững Python thì chưa chắc.

Kế hoạch của tôi là tiếp tục chuyên sâu Python cho đến khi trở thành chuyên gia giỏi về ngôn ngữ này. Sau đó, tôi sẽ chuyển sang ngôn ngữ khác. Lúc đó sẽ dễ dàng hơn nhiều vì như đã nói tôi chỉ cần học cú pháp mới: Tôi đã BIẾT LÀM THẾ NÀO ĐỂ GIẢI QUYẾT VẤN ĐỀ rồi.

Một lần nữa, tôi muốn hỏi bạn câu hỏi này: Nếu bạn phải thực hiện một cuộc phẫu thuật quan trọng mang tính sống còn, bạn muốn nó được thự chiện bởi một bác sĩ phẫu thuật với 05 năm kinh nghiệm chuyên sâu hay một bác sĩ biết về phẫu thuật, nha khoa và đã tham dự nhiều khoá học về chuyên khoa mắt trong 03 tháng?

Tóm tắt: Tập trung vào một ngôn ngữ và học nắm vững nó. Các công ty trả lương cao cho những người biết làm thế nào để giải quyết các vấn đề khó bằng một ngôn ngữ, hơn là biết 20 ngôn ngữ.

Có một dự án mình đam mê

Nên luôn có một DỰ ÁN MÀ BẠN ĐAM MÊ, dự án mà bạn muốn làm khi bạn rãnh.

Nếu bạn thích đấm bốc?: hãy tạo một trang web hay một ứng dụng liên quan đến các trận đấu, kết quả, số thống kê.v.v…

Hoặc nếu bạn thích nấu ăn: Hãy tạo một trang web hay ứng dụng web về các công thức nấu ăn và bạn có thể upload công thức của bạn lên đó! Sau đó bạn thêm vào chức năng “Chia sẻ công thức này” (‘Share this recipe”). Và sau đó bạn thêm vào “tìm kiếm theo loại nguyên liệu”. Sau đó là chức năng bình chọn công thức món ăn,…….

ĐAM MÊ SẼ LÀ ĐỘNG LỰC GIÚP BẠN TIẾN LÊN PHÍA TRƯỚC. Vậy tại sao không áp dụng việc học code vào đam mê của bạn?

Hãy suy nghỉ về dự án mà bạn muốn làm bởi vì nó liên quan đến sở thích hoặc vấn đề mà bạn đang gặp phải hoặc vấn đề mà bạn nghỉ bạn có thể kiếm ra tiền từ đó. KHỞI ĐẦU BẰNG PHIÊN BẢN ĐƠN GIẢN TRƯỚC, và tiếp tục thêm vào các đặc điểm, tính năng ngay khi bạn học được nó.

Ví dụ tôi muốn tạo một ứng dụng web về công thức nấu ăn tốt nhất và tôi muốn làm nó với Django, một framework của Python.

Tôi sẽ học những điều căn bản trước, sau đó khi tôi học được cách tạo ra tính năng/ đặc điểm mới mới, tôi sẽ thêm nó vào ứng dụng web này.

Tôi học cách tạo giao diện/ tính năng đăng nhập/ đăng xuất người dùng. Tôi sẽ thêm tính năng này vào dự án của tôi. Tôi học cách upload hình ảnh? Ngay lập tức tôi thêm tính năng cho phép người dùng upload hình ảnh món ăn của họ lên trang web của tôi.

Nếu bạn không thực hành những gì bạn học, bạn sẽ quên hầu hết mọi thứ. Và còn có gì tốt hơn là THỰC HÀNH TRÊN DỰ ÁN MÀ BẠN ĐAM MÊ?

Tóm tắt: Hãy nghỉ về dự án mà bạn muốn cam kết thực hiện trong nhiều tuần hoặc nhiều tháng. Tạo một phiên bản đơn giản và bắt đầu thêm vào các đặc tính, tính năng ngay sau khi bạn học được cách làm.

Lập trình không giống như những gì bạn thấy trong phim Hollywood.

Lập trình không giống như nhưng gì bạn thấy trên phim. Bạn không thể viết code mà không suy nghỉ như chúng ta đã đề cập ở điểm đầu tiên của bài viết. Bạn cần nhiều thời gian để đọc code và suy nghỉ về các dòng code chưa hoàn thiện.

VÀ CẦN TÌM KIẾM RẤT NHIỀU TRÊN INTERNET.

Bạn cũng sẽ cần đọc nhiều các bài viết, thủ thuật trên các trang StackOverflow, Reddit hoặc các blogs khác cũng như là xem các video trên Youtube.

Do đó BẠN CẦN PHẢI KIÊN TRÌ. Đôi khi bạn không thể giải quyết vấn đề ngay lập tức, và bạn sẽ tốn hàng giờ (hoặc hàng ngày) để giải quyết một vấn đề. Đừng lo lắng, đó là “chuyện thường ngày ở huyện” mà thôi.

Nhưng học giải quyết các vấn đề theo cách này, bạn sẽ học được rất rất nhiều. Không chỉ với những câu trả lời đúng mà bạn còn HỌC ĐƯỢC TỪ NHỮNG LẦN LÀM SAI. Bạn sẽ phát hiện ra những việc và đặc điểm mới trong quá trình giải quyết vấn đề mà trước đó bạn chưa biết. Hãy thưởng thức nó!

Tóm tắt: Lập trình không phải chỉ là hành động gõ code (như bạn thấy trên phim ảnh). Nó đòi hỏi phải suy nghỉ nhiều, đọc nhiều và học nhiều. Và nó rất lôi cuốn, hấp dẫn.

Học hỏi là một quá trình. Hãy tận hưởng nó.

Khi bắt đầu học lập trình, tôi đã học bằng cách xem rất nhiều các hướng dẫn (tutorials).

Tôi đã xem các video, đôi khi tua nhanh với tốc độ 150%-200%, để mau hết và tiếp tục xem video tiếp theo. Đương nhiên tôi cũng code theo hướng dẫn của người hướng dẫn trên video, nhưng hiếm khi tôi dừng video để đọc những gì tài liệu hướng dẫn nói gì hoặc dừng lại xem các dòng code, thử cố gắng thay đổi và điều chỉnh nó hoặc viết các dòng code mới cho nó.v.v….

Hồi tưởng lại những điều này làm tôi xấu hỗ vô cùng, nhưng đó thực sự là những gì tôi đã làm. Và giờ đây tôi nhận ra rằng tôi đã phí thời gian cho cách làm đó như thế nào.

Thay vì thế, HÃY TỪ TỐN. TẬN HƯỞNG NÓ (thời gian viết code). Nếu bạn học được kiến thức mới, ví dụ như về vòng lặp (loops), hãy tạo một vòng lặp.Thay đổi thông số. Thử in các chỉ mục (index). THỬ NHỮNG ĐIỀU MỚI MÀ GIẢNG VIÊN KHÔNG NÓI VỚI BẠN. Đọc tài liệu xem bạn có thể làm gì với kiến thức mới đó, khi nào có thể dùng hoặc khi nào không nên dùng nó.

Bằng cách này bạn sẽ mau chóng tiến bộ và gắn kết với việc code.

Tóm tắt: Hãy tận hưởng thời gian bạn lập trình. Chậm và kiên định sẽ giúp bạn chiến thắng.

Kết luận
• Học lập trình là học cách giải quyết vấn đề, chứ không phải là học nhiều ngôn ngữ.
• Tập trung vào một ngôn ngữ và học để nắm chắc ngôn ngữ đó. Các công ty trả lương cao cho những người biết làm thế nào để giải quyết các vấn đề khó bằng một ngôn ngữ, hơn là biết 20 ngôn ngữ nhưng không giải quyết được vấn đề.
• Hãy nghỉ về dự án mà bạn muốn cam kết thực hiện trong nhiều tuần hoặc nhiều tháng. Tạo một phiên bản đơn giản và bắt đầu thêm vào các đặc tính, tính năng ngay sau khi bạn học được cách làm.
• Lập trình không phải chỉ là hành động gõ code. Nó đòi hỏi phải suy nghỉ nhiều, đọc nhiều và học nhiều. Và nó rất lôi cuốn, hấp dẫn.
• Hãy tận hưởng thời gian bạn lập trình. Chậm và kiên định sẽ giúp bạn chiến thắng.

Và một câu hỏi dành cho bạn: Nếu bạn có thể quay ngược thời gian trở lại thời điểm khi bạn mới bắt đầu lập trình, bạn ước rằng mình sẽ thay đổi điều gì?

Bài viết này dựa trên Qazi’s video “4 things I wish I knew when I started programming” có chỉnh sửa thêm ý của tác giả David MM.