Làm thế nào để học một ngôn ngữ mới

0

Có thể nói, các ngôn ngữ lập trình mới xuất hiện mỗi ngày. Dart, Go, Kotlin, Elixir và vô vàn cái tên khác. Để xây dựng một lộ trình học tập tìm hiểu chúng có thể sẽ khó khăn nếu bạn chưa có nhiều kinh nghiệm, nhưng vẫn có một vài mẹo nhỏ giúp bạn vượt qua nỗi sợ bỏ cuộc này. Có một số bước mà bạn chắc chắn phải thực hiện để thúc đẩy quá trình học tập và tăng thêm hiệu quả, đặc biệt là trong lĩnh vực CNTT vốn luôn phát triển và biến đổi không ngừng.

Hiểu rõ ngôn ngữ. Sau đó mới làm quen với framework.

Có nhiều người chỉ chú trọng vào việc học framework, kể tên một cái tiêu biểu như Ruby on Rails, mà hoàn toàn không quan tâm tới ngôn ngữ bắt buộc phải học trước, trong trường hợp này, là Ruby. Đây là một vấn đề lớn cần nhìn nhận, đặc biệt khi ta nói về Rails, tức là ta đang bàn tới việc sử dụng Ruby như một DSL (Domain-specific language – Ngôn ngữ riêng cho từng miền). Nếu chưa hiểu khái niệm DSL này, bạn có thể đọc thêm tại đây:

https://en.wikipedia.org/wiki/Domain-specific_language

Giải quyết các thử thách code

Có vô vàn các trang trực tuyến được xây dựng để giúp mọi người rèn luyện óc tư duy và khả năng code của bản thân. Tiêu biểu một số cái tên nổi bật như LeetCode, HackerRank hay Project Euler.

Có thể tham khảo danh sách đầy đủ cập nhật mới nhất tại đây:

https://minhthuongeh.wordpress.com/2018/01/08/tong-hop-cac-trang-hoc-code-tot-nhat-2018/

https://minhthuongeh.wordpress.com/2018/01/05/muon-lap-trinh-gioi-hay-luyen-tap/

Ưu điểm của những trang này là trình bày rất rõ ràng và được viết dưới dạng văn phong đơn giản, dễ hiểu. Nếu chịu khó bỏ thời gian mỗi ngày chừng 30 phút, 1 tiếng để tập trung, bạn có thể học được rất nhiều kiến thức về các dạng cấu trúc, cú pháp, thư viện và luyện được tư duy logic trực quan. Bên cạnh đó, nếu kiên trì luyện tập với các trang thử thách này, điều này cũng đồng nghĩa bạn đang tự gia tăng khả năng đậu phỏng vấn của bản thân nhiều hơn. Trong các bài viết đã dẫn liên kết ở trên, có một số trang đặc biệt trích nguồn câu hỏi phỏng vấn của các tập đoàn lớn ra để làm thử thách cho mọi người tham khảo.

Sử dụng StackOverflow và Code Review càng nhiều càng tốt

Khi bạn càng làm nhiều các thử thách kể trên, bạn sẽ càng gặp nhiều vấn đề không thể giải quyết được một mình. Đây là lúc bạn cần đến một cộng đồng thực sự. Và có một trang web mà bất kì ai là dân lập trình chắc chắn cũng biết đến, đó là StackOverflow. Bởi mức độ nổi tiếng của nó nên chắc chắn không cần phải giới thiệu nhiều.

The ace in the hole – thiên cơ quyết định thắng bại có thể tìm thấy ở Code Review, một cộng đồng của StackExchange, cùng hệ thống giống với StackOverflow. Nói đơn giản, Code Review như cái tên của nó đã nói lên tất cả: chỉ cần bạn đưa code lên, sẽ có những chuyên gia trong từng ngôn ngữ đó xem qua giúp cho bạn và góp ý. Dĩ nhiên, nói đơn giản vậy nhưng nếu bạn không tuân thủ theo các nguyên tắc chung của cộng đồng, thì điều vừa nói có thể sẽ không hẳn đúng.

Nếu thực sự muốn phát triển bản thân và nghề nghiệp, nên tham gia ngay.

Có thể tham khảo một câu hỏi để tham khảo cách thức nó vận hành và nguyên tắc để được trả lời tại đây:

https://codereview.stackexchange.com/questions/180567/checking-for-balanced-brackets-in-python

Đọc thật nhiều code

GitHub là cái tên đầu tiên cần phải nghĩ đến khi muốn thực hiện mục tiêu này. Cộng đồng mở này mỗi phút lại cập nhật thêm một lượng code được chia sẻ miễn phí. Nếu biết sử dụng, thậm chí bạn có thể tìm được những nguồn production code (hiểu đơn giản là code chất lượng) trong nhóm ngôn ngữ mà bạn đang tìm hiểu. Điều tốt hơn và luôn được khuyến khích, đó là bạn cũng nên đóng góp vào đây để thấy được khả năng mình tới đâu.

Cài đặt các công cụ linting

Linting tool có thể hiểu là các công cụ phân tích code giúp ghi nhận các đoạn code gây ra bugs, các đoạn sai cú pháp, sai ngữ nghĩa và nhiều hơn thế. Thay vì căng mắt ra đọc từng dòng code, công cụ sẽ giúp bạn phần nào ghi dấu lại các chỗ lỗi để bạn đọc lại và tự sửa chữa. Điều này giúp bạn học hỏi nhiều hơn và tiết kiệm thời gian hơn.

Nếu là lập trình viên Ruby, bạn nên thử sử dụng qua RuboCop.

Code đúng phong cách (Code idiomatically)

Ghi chú của người dịch: Thật tình tôi không biết dịch từ idiomatically sao cho đẹp và đúng nghĩa cả. Sau khi xem giải thích nghĩa, tôi mạo muội dịch theo cách này.

Khi tôi tìm hiểu Python, tôi đã chuyển đổi tất cả những kiến thức về C# và áp dụng vào cho Python trong suốt lộ trình học. Dĩ nhiên đó cũng là một cách hay, nhưng như vậy không đảm bảo sẽ lĩnh hội được đúng “chất” của Python. Bởi vì sao? Mỗi ngôn ngữ dẫu có nằm chung nhóm với nhau đi nữa, cũng đều có cái đặc trưng riêng.

Bạn không thể bê nguyên xi kiểu cách của C# đem áp vào Python, bởi nếu chúng giống nhau đến vậy, thì sự tồn tại của một trong hai chỉ là điều dư thừa vô nghĩa.

Hãy học cái mới với một tâm thế, ta đang học điều mới mẻ. Đừng định kiến áp đặt sẽ tự thu nhỏ lăng kính nhìn đời đi rất nhiều.

Lấy ví dụ thực tế xã hội hơn để bạn dễ hiểu. Một chàng trai yêu một cô gái, một vài năm sau vì có chuyện không đi đến được tiếng nói chung nên họ chia tay. Sau đó chàng trai yêu cô gái khác. Lúc nào anh ta cũng đem so sánh hình ảnh người cũ với cô gái mới, khiến cô này rất buồn phiền. Rồi mặc dù rất yêu anh ta, nhưng cô gái thứ hai này cũng rời bỏ, vì không làm sao thật sự giống với người cũ mà anh ta luôn níu kéo và mong muốn cô như vậy.

Đấy chính là idiomactical của mỗi người. Trong ngôn ngữ lập trình cũng như vậy.

Tạo ra một cái gì đó

Điều này nghe rất tuyệt. Làm ra một sản phẩm gì đó từ chính những dòng code của bản thân mình. Thật ra đây cũng chính là mục tiêu cốt lõi nhất mà các ngôn ngữ lập trình ra đời. Nó không phải chỉ là thứ để bạn khoe mẽ bản thân bằng những vấn đề đã cũ kĩ và sáo mòn học thuật, hay chỉ đơn thuần là minh họa thuật toán nữa. Mà phải tạo ra được một cái gì đó thực sự có ý nghĩa, giúp ích được trước tiên là cho bản thân, sau là mọi người. Đó mới là chân thiện ý và đích đến thực sự của lập trình.

Khởi đầu không cần phải là thứ gì cao siêu. Bạn có thể tập làm theo, làm lại một cái gì đó để nắm ý tưởng, sau đó phát triển lên thành sản phẩm mang phong cách riêng với những tính năng mới.

Có thể trích vài pet project của tôi. Dẫu biết không hẳn mới, nhưng nếu thực sự làm, bạn sẽ tạo được dấu ấn riêng.

https://medium.com/quick-code/image-web-crawler-with-php-edfbfb4ef823

Bài viết về pet project đó đã được một Publisher quan tâm và mời đóng góp cho cộng đồng họ, giúp nhiều người biết đến hơn.

Hoặc bạn cảm thấy không hài lòng với những thứ đã có sẵn, thì bắt tay làm lại:

https://medium.com/@votinhthuong/download-video-from-facebook-7c710ac1fecb

Mọi thứ chỉ thực sự nhích lên nếu bạn bắt tay vào làm bước đầu tiên.

Đừng bỏ cuộc

Xây dựng lộ trình học, đặc biệt là học một mình càng khiến bản thân dễ nản và bỏ cuộc. Bạn sẽ cần rất nhiều động lực và nỗ lực, thời gian. Nhưng đừng vì vậy mà suy nghĩ bỏ cuộc. Bởi nếu bỏ cuộc, bạn sẽ càng trông giống kẻ thất bại hơn bạn nghĩ.

Nếu bị kẹt trong khó khăn, hãy đi hỏi. Cứ gõ, cửa sẽ mở.

Mẹo của Jedi: while(true) => study()

Tôi biết một người bạn học về C# trong suốt hơn 20 năm. Và cho đến tận bây giờ, anh ta vẫn tiếp tục tìm hiểu, học hỏi về nó và công nghệ .NET hàng ngày. Đó là Antonio Maniero, một thành viên có ảnh hưởng rất lớn trong cộng đồng StackOverflow Bồ Đào Nha.

Ý tôi muốn truyền tải ở đây là: Chúng ta không cách nào học hết về một ngôn ngữ nào đó trong chỉ một lần được. Đó là hành trình kéo dài từ lúc bạn bắt đầu cho đến khi bạn thực sự muốn dừng thì thôi.

Có thể bạn giỏi về một cái gì đó, trở thành một người thông thạo về nó, nhưng chắc chắn sẽ có người hiểu biết hơn bạn về nó.

Và như phong cách của Star Wars: May the force be with you! Mong cho thần lực luôn bên bạn!

Dịch và biên tập thêm lại từ nguồn:

https://hackernoon.com/how-to-learn-a-new-programming-language-faster-dc31ec8367cb

LEAVE A REPLY