Các cách để làm chủ khi học ngôn ngữ lập trình mới (Phần 1)
Bài đăng này đã không được cập nhật trong 5 năm
Mở đầu
Có nhiều người hỏi mình rằng “Làm thế nào để bạn biết tất cả các ngôn ngữ lập trình?”.
Lập trình là rất khó. Những người nói khác đều là những người có nhiều năm kinh nghiệm lập trình trong hồ sơ của họ. Nếu bạn bị choáng ngợp trong quá trình học cũng là chuyện bình thường. Có rất nhiều thứ phải học và có thể bạn sẽ quên đi những thứ đó rất nhanh sau khi bạn học chúng.
Nhưng chỉ vì nó là bình thường không có nghĩa rằng nó không gây bực bội và nản lòng. Sự thật mà nói, học lập trình có thể cực kỳ căng thẳng nếu bạn không tiếp cận nó với những suy nghĩ và thái độ đúng đắn.
Bạn muốn học một ngôn ngữ, thư viện hoặc framework mới càng sớm càng tốt, phải không nào? Đó là điều dễ hiểu. Trong bài viết này, mình sẽ đưa ra một số phương pháp để làm chủ khi học ngôn ngữ lập trình mới.
1. Đừng học nhồi nhét thật nhiều kiến thức vào một lúc
Không ai muốn nghe điều đó, nhưng nhồi nhét là cách tồi tệ nhất để học lập trình. Nếu bạn có điểm gì đó giống tôi, nhồi nhét là cách làm việc của bạn suốt quãng thời gian học sinh lẫn thời sinh viên đại học. Đó là cách duy nhất bạn biết làm thế nào để học.
Nhưng bài học từ những sai lầm của tôi đó là: bạn càng cố nhồi nhét, thì bạn càng nhớ được ít đi. Đó là điều đúng cho bất kỳ chủ đề học vấn nào, nhưng nó đặc biệt đúng khi nói đến lập trình.
Nói cách khác: trong bất kỳ buổi học nào đó, bạn có nhiều khả năng nhớ rõ các thông tin mà bạn đã học được ở phần đầu và kết thúc buổi học và nhiều khả năng sẽ quên các thông tin ở giữa buổi.
Bạn muốn tối đa hóa số lượng của những giai đoạn bắt đầu và kết thúc. Đó là lý do tại sao sẽ là tốt hơn khi bạn chia nhỏ buổi học thành nhiều phiên ngắn, nó sẽ giúp cho bạn ghi nhớ và tiếp thu kiến thức mới được tốt hơn.
Lần tới khi bạn ngồi xuống để học lập trình, hãy chỉ học một chủ đề vào một thời điểm và có một vài phút nghỉ ngơi ngắn giữa mỗi chủ đề. (Chỉ cần chắc chắn khoảng thời gian nghỉ ngơi đó không làm bạn rơi vào trạng thái trì hoãn).
2. Xem lại, xem lại, xem lại
Một lý do khác, học nhồi nhét không thể giúp bạn ghi nhớ được kiến thức lâu dài là bởi vì ký ức thường bị mờ nhạt theo thời gian. Điều này không phải lúc nào cũng đúng – tôi chắc là tất cả chúng ta đều có một vài kỷ niệm tuổi thơ còn nhớ mãi – nhưng nó có vẻ là trường hợp tổng quát cho những kỷ niệm mà không gắn với cảm xúc nào đó.
Có một số cuộc tranh luận về việc liệu trí nhớ có tự phân rã theo thời gian (lý thuyết decay) hoặc đơn giản là bị đẩy ra ngoài và thay thế bằng những ký ức mới theo thời gian (lý thuyết nhiễu). Cho dù bạn ủng hộ lý thuyết nào đi nữa, thì kết quả là những ký ức cũ có nhiều khả năng sẽ bị biến mất theo thời gian.
Đây chính là nơi mà việc xem lại (review) đóng vai trò quan trọng.
Hãy suy nghĩ về nó giống như bạn đang đi qua một khu rừng của ký ức. Mỗi khi bạn muốn truy cập vào một ký ức, bạn phải vạch ra một con đường trong trí não để tìm ra nó. Mỗi lần bạn lục lọi trong trí nhớ như vậy, thì con đường sẽ được hằn sâu hơn một chút – giống như cách một lối mòn hình thành khi người ta cứ đi lại mỗi ngày. Nếu bạn không còn đi trên con đường đó, nó có thể phai nhạt đi và ký ức đó bị thất lạc ở đâu đó trong khu rừng tri thức.
Gạt sang một bên tất cả các hiệu ứng về tâm lý, thông tin quan trọng nhất cần nhớ là: khi nói đến lập trình, sẽ là không đủ nếu bạn học một chủ đề chỉ một lần hoặc hai lần. Bạn phải xem lại nó hàng chục hoặc thậm chí hàng trăm lần. Mỗi lần xem lại như vậy sẽ làm khắc sâu chủ đề đó vào bộ não của bạn thêm một chút.
Tôi biết điều này khó có thể thực hiện được nếu bạn là một người có thói quen học nhồi nhét, nhưng bạn sẽ ngạc nhiên vì bạn sẽ bắt đầu lưu giữ được kiến thức lâu hơn thông qua những nỗ lực xem lại nó đều đặn.
3. Sử dụng nhiều nguồn tài nguyên khác nhau
Khía cạnh khó khăn nhất của lập trình – ít nhất là cho những lập trình viên mới vào nghề – đó là các chi tiết và sắc thái cần phải tiếp thu. Cho đến khi kiến thức được tiếp nhận, thì bạn sẽ rơi vào trạng thái vò đầu bứt tóc rất nhiều.
Tùy thuộc vào ngôn ngữ, bạn sẽ cần phải nhớ hàng trăm quy tắc cú pháp (ví dụ từ khóa, dấu chấm phẩy, khoảng trắng). Một số ngôn ngữ rất nghiêm ngặt, những ngôn ngữ khác ít hơn, còn có những ngôn ngữ có cách tiếp cận độc đáo của riêng nó mà cú pháp đó không sử dụng được ở bất cứ nơi nào khác. Tất cả điều này có thể gây nhầm lẫn nếu bạn chưa có kinh nghiệm lập trình trước đó.
Đó là chưa đề cập đến tất cả các thông tin về khái niệm vượt quá các ngôn ngữ riêng rẽ. Các chủ đề như lập trình hướng đối tượng, các hệ thống entity-component, và observer patterns thực sự có thể làm cho đầu của bạn quay mòng mòng khi lần đầu tiên bạn cố gắng học về chúng.
Học lập trình có thể có những tùy ý đáng ngạc nhiên. Mọi người có thể đều ca ngợi tài liệu A như là cách tốt nhất để học ngôn ngữ X, nhưng có thể nó lại không có ý nghĩa đối với bạn. Có thể mọi người ghét tài liệu B nhưng khi bạn tham khảo nó thì thấy rất tuyệt vời! Đối với một số người khác, có thể họ không thu được gì nhiều khi nghiên cứu tài liệu A và B nhưng hưởng lợi rất nhiều từ nguồn tài liệu C.
Đó là lý do tại sao điều quan trọng là bạn có thể sẵn sàng học từ tất cả các loại nguồn tài nguyên hiện có. Mọi người đều học theo một cách khác nhau. Nếu bạn đang gặp rắc rối với một chủ đề cụ thể, hãy tìm kiếm thêm những nguồn tài nguyên khác. Có thể sẽ có một tài nguyên nào đó phù hợp với bạn. Có thể không.
Ngay cả khi bạn nghĩ rằng mình đã hiểu về các chủ đề nhất định nào đó, nhưng có thể là có nhiều thứ hơn để tìm hiểu thêm về nó. Nó cũng có thể là lời giải thích của người khác sẽ giúp củng cố thêm các khái niệm trong tâm trí của bạn trở nên tốt hơn. Bạn chẳng bao giờ biết được, vậy tại sao không sử dụng nhiều tài nguyên nhất bạn có thể?
4. Dạy lại những khái niệm sau khi bạn tìm hiểu chúng
Có một khái niệm đẹp trong lập trình được gọi là rubber duck debugging, đó là mô tả kỹ thuật giải thích từng dòng code một cho một con vịt cao su vô tri vô giác. Nó được sử dụng khi một đoạn code cụ thể bị hỏng, nhưng không có lý do rõ ràng cho nó.
Lạ lùng thay, hầu hết các lập trình viên đều có một khoảnh khắc thốt lên “Eureka! (tìm ra rồi)” ở khoảng giữa trong quá trình giải thích code đó, vì bất ngờ họ nhìn thấy nơi xảy ra lỗi logic lập trình. Chính việc giải thích đó kích thích lên môt khu vực khác của não bộ, buộc bạn nhìn vấn đề đó từ một góc độ mới.
Ngoại trừ một số lĩnh vực chủ yếu làm việc với kiến thức lý thuyết cao cấp, thì câu nói này là đúng. Bạn càng hiểu rõ một chủ đề, thì bạn càng được trang bị tốt hơn để giải thích nó theo cách sao cho một người không có kiến thức về chủ đề đó vẫn có thể hiểu được.
Điều ngược lại cũng đúng. Khi bạn cố gắng để dạy về một chủ đề, bạn sẽ đi qua một số khái niệm mà bạn dường như không thể giải thích một cách rõ ràng. Đây không chỉ là một cách tuyệt vời để chẩn đoán những điểm yếu trong kiến thức của bạn, quá trình thực tế của việc tìm kiếm lời giải thích hợp có thể giúp củng cố các khái niệm trong tâm trí của bạn.
Nó được gọi là học tập bằng cách giảng dạy và về cơ bản là một biến thể của kỹ thuật rubber duck debugging nói trên.
Lúc này, tôi không nói rằng bạn thực sự cần phải dạy cho người khác; thay vào đó, mỗi chủ đề lập trình mới mà bạn nghiên cứu, hãy cố gắng dạy nó cho một con vịt cao su (hoặc một người bạn vô hình). Lúc đầu thì việc này có thể cảm thấy hơi ngớ ngẩn, nhưng bạn sẽ nhận ra rằng nó vô cùng hiệu quả để ghi nhớ kiến thức.
5. Thực hành có chủ đích tạo ra sự hoàn hảo
Quan điểm về tài năng hiện nay hoàn toàn là sai lầm. Không ai vừa ra khỏi bụng mẹ đã trở thành một nghệ sĩ đàn dương cầm, đô vật, hoặc lập trình viên đẳng cấp thế giới cả. Chắc chắn, một số người có thể nghiêng nhiều hơn về một lĩnh vực nhất định, nhưng tài năng nếu không có kinh nghiệm là vô nghĩa. Tương tự như vậy, làm việc chăm chỉ luôn luôn có giá trị hơn tài năng.
Điều đáng nói là, không phải tất cả các hình thức của làm việc chăm chỉ đều giống nhau. Malcolm Gladwell đã nêu ra quy luật 10.000 Giờ rất nổi tiếng, trong đó nói rằng bạn phải đầu tư ít nhất 10.000 giờ vào một chủ đề để trở thành một bậc thầy trong lĩnh vực đó. Trong khi quy tắc này là đúng, nhưng nhiều người hiểu sai những gì ông muốn nói.
Thực ra, việc cam kết thực hành 10.000 giờ không thực sự đảm bảo bạn sẽ trở nên tinh thông. Chắc hẳn bạn đã biết câu nói: “Thực hành không tạo ra sự hoàn hảo. Thực hành hoàn hảo làm cho nó hoàn hảo.” Nói một cách dễ hiểu hơn thì thực hành phải có chủ đích. Sự tinh thông chỉ có thể đạt được thông qua 10.000 giờ luyện tập có chủ đích.
Cách bạn thực hành như thế nào quan trọng hơn nhiều so với lượng thời gian bạn dành cho việc thực hành.
Đọc sách là thụ động. Xem các video hướng dẫn trên YouTube cũng là thụ động. Lắng nghe các podcast cũng là thụ động. Là một lập trình viên newbie thì bạn có thể bị cám dỗ để nhảy hết từ hướng dẫn này sang hướng dẫn khác, ngâm cứu hết chủ đề này sang chủ đề khác nhưng không thực sự áp dụng bất kỳ những kiến thức đó một cách thiết thực. Hãy cưỡng lại sự cám dỗ này.
Nếu bạn muốn tăng tốc độ quá trình học tập của mình, thì bạn phải sẵn sàng học tập ở thế chủ động thay vì thụ động. Thực hành tích cực sẽ quyết định đến kết quả cuối cùng.
Kết luận
Ở trên là 5 phương pháp cơ bản cho những người học ngôn ngữ lập trình mới mà chưa có nhiều kinh nghiệm. Mình sẽ liệt kê các phương pháp còn lại ở phần tiếp theo.
Nguồn: tổng hợp từ Internet.
All rights reserved