Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Học code giống như học ngoại ngữ

Nghe có vẻ lạ. Vấn đề là: tài nguyên học code nhiều đến mức dễ bị lạc lối, choáng ngợp. Nhưng tiếp cận học code như học ngoại ngữ sẽ cho bạn khung làm việc hữu ích.

Dùng khung (framework) để cấu trúc tiến trình học tập. Cung cấp định hướng, mốc (milestone) trên đường đi, và đích đến cuối cùng.

Lợi thế chính: chia đường từ beginner đến advanced thành các giai đoạn. Phân biệt giai đoạn giúp bạn hiểu rõ hơn việc mình đang làm.

Ví dụ: nếu biết mình ở level nào, kiến thức đó thiết lập kỳ vọng. Nếu vẫn ở giai đoạn beginner, đừng kỳ vọng dễ dàng đạt skill intermediate/advanced. Kỳ vọng thực tế giúp tránh nản chí, thậm chí bỏ cuộc.

Nghe hay không? Bắt đầu với bài tập nhỏ vui vui:

Mục tiêu cuối cùng của bạn là gì?

Học ngoại ngữ, mục tiêu không chỉ học từ vựng, cụm từ ngẫu nhiên. Gần như không ai học ngôn ngữ chỉ để học từ mới. Luôn có ứng dụng thực tế nào đó. Muốn dùng nó làm điều hữu ích, phải không? Bạn thậm chí có đích đến cụ thể: nói chuyện trôi chảy, du lịch nước đó, đọc sách bằng ngôn ngữ đó.

Học code cũng vậy. Nên có mục tiêu cuối ngoài "học code". Có thể: xin việc full-time, bán app mobile, tự làm chủ. Mục tiêu đó cho động lực học tiếp khi khó khăn. Là kim chỉ nam (true north) khi bạn điều hướng thế giới lập trình.

Dừng đọc một chút, dành 1 phút suy nghĩ mục tiêu cuối cùng học code. Tại sao bạn làm điều này? Động lực ban đầu gì đưa bạn lên con đường này? Viết mục tiêu ra giấy. Đặt nơi thấy mỗi ngày – cạnh máy tính, hoặc gương nhà tắm. Khi đọc note đó, bạn nhớ tại sao bắt đầu hành trình. Nhớ lý do cốt lõi sẽ khuyến khích bạn không bỏ cuộc.

Đã có mục tiêu? Tốt. Sau khi đọc xong, comment bên dưới chia sẻ mục tiêu. Chúng ta luôn tìm thấy động lực trong câu chuyện của nhau, và tôi muốn nghe câu chuyện của bạn.

Giờ chuyển sang việc thành thạo code!

Ngôn ngữ đầu tiên là khó nhất

Tập trung học một thứ tại một thời điểm

Giống như thế giới có nhiều ngôn ngữ nói (hơn 6000!) – có nhiều ngôn ngữ lập trình để chọn. Nếu mới bắt đầu, không khuyến khích học Python, Ruby, JavaScript, React, Java cùng lúc. Rất không thực tế. Bạn không học cùng lúc Tiếng Trung, Tây Ban Nha, Đức, Bồ Đào Nha, phải không?

Nếu chọn ngôn ngữ đầu tiên, đừng stress – chọn một và học đến mức thành thạo hợp lý. Ngôn ngữ đầu tiên khó nhất vì bạn không chỉ học ngôn ngữ – bạn còn học cách lập trình hoạt động. Khi đã giỏi một ngôn ngữ, học ngôn ngữ thứ 2, thứ 3 dễ dàng hơn.

Tất cả ngôn ngữ lập trình có nguyên tắc chung. Khi nắm nguyên tắc đó, chỉ còn việc học syntax và vocabulary mới, nếu muốn. Tất nhiên mỗi ngôn ngữ có quirk riêng. Nhưng khi đã đặt nền móng lập trình, dễ dàng 습得 kỹ năng mới sau này.

Đã chọn ngôn ngữ đầu tiên, bắt đầu giai đoạn đầu hành trình:

Cấp độ Beginner (Người mới)

Hello, World!

Học ngoại ngữ, điều đầu tiên học nói gì? Thường là chào hỏi cơ bản: "xin chào". Không ngẫu nhiên, xuất ra "Hello, world!" thường là điều đầu tiên học trong ngôn ngữ lập trình.

Sau chào hỏi, học từ vựng và ngữ pháp cơ bản. Lập trình: học kiểu biến (variable types), phương thức (methods), syntax, cấu trúc file project. Có thể không vui lắm khi học function thủ công và mắc lỗi syntax vặt. Nhưng nắm vững building block này cho kỹ năng tiến lên.

Giai đoạn đầu, bạn sẽ mắc rất nhiều lỗi. Không, sẽ mắc RẤT NHIỀU lỗi. Nhưng hoàn toàn ổn! Mục đích không phải học hoàn hảo trước khi dùng. Thực tế, mắc lỗi là tốt, vì học từ lỗi. Nếu sợ sai mà không thử, bạn tự cản trở học tập. Chìa khóa: mắc lỗi, thử nghiệm với điều mới học.

Cách thử nghiệm:

Nếu làm theo coding tutorial, follow lesson như bình thường. Nhưng dành thời gian tự chơi với code trong editor. Thử làm hỏng code đang làm, hiểu cách và tại sao nó hỏng. Sau đó viết lại code từ đầu, chỉ nhìn note lesson khi bị kẹt.

Thử nghiệm kiểu này đòi hỏi đầu tư thời gian/năng lượng trước, nhưng trả lợi lâu dài. Bằng cách "chơi" với concept code, bạn hiểu bản chất chúng, giúp skill định착 tốt hơn. Có thể làm điều này trở thành phần cố hữu cách tiếp cận ý tưởng mới ở mọi level. (Kỹ thuật thử nghiệm như con đường đến expertise là chủ đề bài viết gần đây của Michael Simmons)

Cấp độ Intermediate (Trung cấp)

Ghép các mảnh ghép lại với nhau

Ngoại ngữ: lúc này bắt đầu vui hơn – biết càng nhiều, làm được càng nhiều. Phát triển kỹ năng hội thoại, hiểu phần lớn đọc/nghe. Thậm chí kết bạn native speaker nhờ tài nguyên online.

Lập trình: intermediate = bắt đầu nắm nguyên tắc ngôn ngữ, và những gì nó làm được. Vẫn cần ôn cơ bản – đọc sách, tutorial, thử nghiệm. Nhưng bắt đầu xây dựng khung (framework) cải tiến theo thời gian. Cũng học interact với developer senior hơn trên cộng đồng như GitHub. Thực tế, nghiên cứu cách người khác code giúp rất nhiều.

Ví dụ: xem các GitHub repo thú vị, xem developer khác giải quyết vấn đề như thế nào. Sau khi nghiên cứu repo, có thể nhận ra fix tiềm năng cho issue, thử submit pull request. Dù chủ repo không accept, bạn vẫn tích lũy kinh nghiệm làm việc với code. Tiếp tục thử, tiếp tục học.

Cũng nhận được giúp đỡ, hỗ trợ từ lập trình viên khác trên forum: Stack Overflow, group Facebook, kênh Slack. Rất nhiều người trên thế giới sẵn sàng giúp debug và chỉ đường!

Gặp "bình địa" (The Slump)

Phải nói tin xấu: tại một lúc nào đó, bạn sẽ cảm thấy stagnant (đình trệ). Dù không còn ở phía dốc learning curve, nhưng cảm thấy còn bao la đường đi, không thấy đích. Thực lòng, nó tệ.

Tuyệt đừng tuyệt vọng! Slump này là phần bình thường học kỹ năng mới. Đầu tiên, tiến bộ nhanh, cảm thấy nhanh chóng có skill. Nhưng càng giỏi, skill trung cấp/nâng cao càng khó học, vì chúng nâng cao. Thành thạo kỹ năng nào cũng mất nhiều thời gian hơn nhiều so với thành thạo beginner.

Nếu cảm thấy kẹt slump, đừng bỏ cuộc. Kiên nhẫn với bản thân, hiểu rằng cần thời gian hơn để tiến tiếp. Cố gắng không burn out, không ép bản thân phải hoàn hảo. Quan trọng nhất: lúc này mạng lưới hỗ trợ mạnh (thực tế và online) giúp ích rất lớn. Kết nối người cùng hoàn cảnh, chia sẻ câu chuyện, động viên nhau.

Cấp độ Advanced (Nâng cao)

"Hey, có vẻ mình khá giỏi đây!"

Học ngoại ngữ, proficiency (thành thạo) là đích đến đa số người hướng tới. Proficiency = tự tin biểu đạt mọi ý tưởng/cảm xúc bằng ngôn ngữ đó. Gần như fluent!

Đạt proficiency ngôn ngữ code cảm giác rất tốt. Dù vẫn đôi khi gặp impostor syndrome, tổng thể tự tin hơn vào skill và giá trị programmer. Xử lý được hầu hết thứ sếp/khách ném tới. Biết rằng dù không biết chính xác cách làm, có công cụ research (Google) và tìm giải pháp với thời gian.

Tuy nhiên, không phải lúc nghỉ ngơi. Lập trình thay đổi liên tục, nhanh chóng. Cần tiếp tục mài giũa skill, vì dừng lại → proficiency khó đạt được sẽ dần mất. Tự mãn và stagnant = chuông báo tử cho career programmer. Tin tốt: lúc này bạn đã khá giỏi học. Học language/framework/tool mới không mất lâu như trước. Thậm chí có thể enjoy quá trình!

Mục tiêu cuối cùng của bạn là gì? Comment bên dưới…

Hy vọng bạn thích bài viết về cách học lập trình. Như nói, tôi muốn nghe mục tiêu code của bạn, và bạn đang học gì.