Hacker News: AI bài nổi bật
85

Thủ thuật

Ploeh chia sẻ kinh nghiệm học lập trình trong kỷ nguyên LLM

(giờ Việt Nam)

Tóm tắt AI

Blogger Ploeh chia sẻ quan điểm về việc học lập trình khi có AI: ông khuyên chỉ nên dùng LLM cho các vấn đề có thể kiểm chứng được, thay vì dựa dẫm vào AI để định hướng lộ trình học tập cá nhân.

Bản dịch AI

On learning programming in an age of LLMs

Những câu trả lời cho thư của độc giả.

Một độc giả gần đây đã gửi cho tôi một bức thư dài với rất nhiều câu hỏi về việc học lập trình trong kỷ nguyên của các mô hình ngôn ngữ lớn (LLM). Sau một vài lần trao đổi, tôi đã được phép trích dẫn rộng rãi bức thư này để đưa ra một số câu trả lời công khai.

Tôi không coi bất kỳ câu trả lời nào của mình là hoàn toàn chặt chẽ; tình hình hiện tại quá bất định nên tôi chỉ có thể trả lời dựa trên khả năng tốt nhất của mình, chứ không khẳng định chúng là những chân lý bất biến.

"Tôi đang cố gắng tìm hiểu cách những người am hiểu sâu sắc về phần mềm suy nghĩ về việc học tập và năng lực trong kỷ nguyên AI. Tôi tiếp cận vấn đề này gần giống như một nhà sử học: hỏi trực tiếp mọi người về cách họ thấu hiểu một bước chuyển đổi công nghệ khi đang thực sự sống trong đó."

"Khoảng một năm trước, tôi trở nên say mê với lập trình có sự hỗ trợ của AI. Dù không có nền tảng khoa học máy tính (CS) chính quy, với các LLM, tôi đã xây dựng được một hệ thống TypeScript/JavaScript khá lớn bao gồm các API, PostgreSQL, các quy trình xử lý LLM, tự động hóa nghiên cứu và các quy trình làm việc đa mô hình. Ban đầu, cảm giác gần như là phép thuật: AI dường như đã xóa bỏ khoảng cách giữa việc có một ý tưởng và khả năng hiện thực hóa nó."

"Nhưng bây giờ tôi đang cố gắng biến hệ thống đó thành một sản phẩm thực tế và tôi đang gặp khó khăn. Tôi sửa một lỗi bằng AI, rồi lỗi khác lại xuất hiện, sau đó một phần khác lại hoạt động theo cách mà tôi không hoàn toàn hiểu rõ. Sau nhiều tháng tái cấu trúc, tôi nhận ra một sự thật khó chịu: có lẽ tôi đã xây dựng một hệ thống vượt quá trình độ hiểu biết của chính mình. Khi mọi thứ hoạt động, khoảng cách đó gần như vô hình. Khi nó không hoạt động, khoảng cách đó trở nên rất thực tế."

"Đôi khi tôi thực sự không biết phải làm gì tiếp theo nếu không hỏi một mô hình khác. Điều đó khiến tôi tự hỏi liệu mình đã dành một năm để xây dựng một sản phẩm, hay chỉ là xây dựng vẻ ngoài của một sản phẩm: thứ gì đó đủ tinh vi để hoạt động, nhưng tôi lại chưa hiểu đủ sâu để thực sự làm chủ nó."

"Tôi hoàn toàn không bài trừ AI. Tôi bị mê hoặc bởi những hệ thống này và muốn làm việc chuyên nghiệp với chúng. Nhưng tôi không chắc mối quan hệ đúng đắn với chúng nên là gì."

Thực ra, tôi cũng không chắc, nhưng trước khi tiếp tục, tôi thấy minh bạch nhất là nên tiết lộ quan điểm của mình. Tôi vẫn chưa quyết định về AI, nhưng tôi nghiêng về phía không thích nó, dù biết rõ rằng nó có thể là một xu thế không thể ngăn cản.

Tôi vẫn làm việc và thử nghiệm với nó, và nó thường làm tôi ấn tượng. Những lúc khác, nó lại làm tôi thất vọng. Thường thì khi nó làm tôi ấn tượng nhất cũng là lúc tôi thấy ác cảm với nó nhiều nhất.

Khi nó hoạt động tệ, nó có thể gây bực bội, nhưng ít nhất tôi có thể tìm thấy chút an ủi trong ảo tưởng rằng những gì tôi đã dành hơn ba mươi năm để học vẫn còn giá trị. Khi nó ở trạng thái tốt nhất, đôi khi tôi tự hỏi: Mình nên đăng ký tham gia "Butlerian jihad" ở đâu nhỉ?

Quan điểm của tôi về LLM chỉ dựa một phần vào vị thế kinh tế - xã hội của chính mình. Tôi đã đủ lớn tuổi và đã có đủ thành công, nên nếu mọi thứ khác không đổi, tôi có thể sống sót qua tình trạng thất nghiệp. Mặt khác, tôi không chắc liệu bất kỳ xã hội dựa trên tri thức nào có thể làm được điều đó hay không.

Có thể các LLM sẽ cướp đi công việc của lập trình viên trước khi chúng nhắm đến các công việc văn phòng khác. Suy cho cùng, lập trình có thể là một ngành mà việc xác minh dễ dàng hơn so với, chẳng hạn như quản lý yêu cầu bồi thường bảo hiểm. Tuy nhiên, nếu chúng ta đạt đến mức thất nghiệp hàng loạt trong giới lao động tri thức, tôi không chắc xã hội như chúng ta biết sẽ tồn tại được.

Tôi thường không nói nhiều về nền tảng kinh tế của mình, nhưng trong bối cảnh này, tôi thấy cần phải đề cập đến. Với tư cách là một nhà kinh tế, tôi không thể tưởng tượng được rằng tỷ lệ thất nghiệp hàng loạt từ 30-40% sẽ không gây ra tác động đáng kể đến nền kinh tế.

Tôi nhận thức rõ những lập luận cho rằng điều này đã từng xảy ra trước đây: Có thể có sự mất việc làm, nhưng sự tiến bộ của công nghệ dẫn đến những công việc mới mà ngày nay chúng ta thậm chí không thể tưởng tượng nổi. Điều đó đã từng xảy ra với sự ra đời của khung dệt, động cơ hơi nước, động cơ đốt trong, máy tính, v.v. Điều này chỉ đúng một phần: Đúng là các công việc mới đã được tạo ra, nhưng thường không dành cho những người đã mất việc. Những người thợ mỏ than không thể trở thành lập trình viên chỉ sau một đêm.

Lập luận tương tự cũng đã được sử dụng khi Trung Quốc gia nhập Tổ chức Thương mại Thế giới (WTO). Và quả thực, rất nhiều công việc mới đã được tạo ra, chỉ là không phải ở thế giới phương Tây.

Vì vậy, dựa trên kinh nghiệm sống và lịch sử, tôi hoài nghi về những lập luận cho rằng mọi thứ rồi sẽ ổn thỏa.

Nhưng tôi chân thành hy vọng rằng mình đã sai. Tôi yêu thích lập trình và không ngại làm công việc này thêm mười năm nữa. Quan trọng hơn, tôi có những đứa con đã trưởng thành. Tôi hy vọng rằng cũng sẽ có một thế giới dành cho chúng.

"Vì vậy, tôi thực sự muốn biết ông nghĩ gì về điều này. Ông có vui vì đã học các nguyên lý lập trình trước khi LLM tồn tại không? Nếu bắt đầu từ hôm nay, ông có còn nghiêm túc học về ngôn ngữ, cấu trúc dữ liệu, cơ sở dữ liệu, mạng, hệ điều hành, gỡ lỗi và kiến trúc không? Ông có nghĩ rằng AI có thể giúp mọi người có khả năng xây dựng nhanh hơn nhiều so với khả năng thấu hiểu không?"

Tôi có vui vì đã học lập trình trước khi có LLM không? Có, tất nhiên rồi. Những kỹ năng đó đã phục vụ tôi tốt trong suốt ba mươi năm qua.

Nếu bắt đầu từ hôm nay, tôi sẽ nghiêm túc cân nhắc việc học nghề mộc, gia công kim loại, chế tạo súng, hoặc bất cứ thứ gì đòi hỏi sự phối hợp giữa tay và mắt. Tôi biết rằng những tiến bộ cũng đang được thực hiện trong lĩnh vực robot, nhưng việc thay thế lao động chân tay dường như còn ở tương lai xa hơn.

Nhưng để trả lời câu hỏi: Cá nhân tôi hiện đang học về cấu trúc dữ liệu, ngữ nghĩa ngôn ngữ, v.v. như một phần của chương trình đại học. Tôi làm điều đó vì tò mò, chứ không phải vì mong đợi nhận được nhiều lợi ích kinh tế từ nó.

Tôi có nghĩ rằng AI cho phép mọi người phát triển nhanh hơn khả năng bắt kịp của họ không? Điều này vẫn còn phải chờ xem. Các nhà phát triển phần mềm đã làm việc trên các lớp trừu tượng mà họ không hiểu trong nhiều thập kỷ nay. Nếu bạn là một nhà phát triển web, bạn không biết nhiều về lập trình trình biên dịch. Nếu bạn là một lập trình viên trình biên dịch, bạn không biết nhiều về thiết kế mạch tích hợp. Và nếu công việc của bạn là kỹ sư mạch tích hợp, bạn sẽ không biết nhiều về các cấp độ trừu tượng bên trên mình.

Một quy tắc ngón tay cái (quy tắc kinh nghiệm) tốt là: Hãy hiểu các cấp độ trừu tượng ngay bên dưới cấp độ bạn đang làm việc, cũng như cấp độ ngay bên trên nó. Điều đó sẽ giúp bạn khắc phục hầu hết các vấn đề.

"Và cá nhân ông xử lý việc đó như thế nào? Khi AI có thể giải quyết vấn đề ngay lập tức, ông quyết định khi nào nên sử dụng nó và khi nào nên tự mình giải quyết vấn đề đó như thế nào? Nếu ở vị trí của tôi, với một dự án lớn được xây dựng bằng AI nhưng nền tảng bên dưới lại yếu, ông sẽ lùi lại và học một cách có hệ thống những nền tảng đó, tiếp tục xây dựng và học hỏi khi vấn đề phát sinh, hay kết hợp cả hai?"

Đó là hai câu hỏi hoàn toàn khác biệt, vì tôi không còn có nền tảng yếu trong phát triển phần mềm nữa. Ngay cả khi tôi đang xử lý thứ gì đó khác xa với những gì tôi thường làm, tôi vẫn có thể nâng cao trình độ bằng cách tận dụng những gì đã biết. Hãy tưởng tượng ai đó giao cho tôi nhiệm vụ duy trì một ứng dụng được viết hoàn toàn bằng mã hợp ngữ RISC-V. Đó là môi trường phần mềm xa lạ nhất mà tôi có thể tưởng tượng. Việc thích nghi với môi trường phát triển như vậy sẽ rất khó khăn đối với tôi, nhưng vẫn không khó bằng người mới bắt đầu lập trình nói chung. Tin hay không tùy bạn, tôi đã từng viết các chương trình bài tập nhỏ bằng RISC-V, cũng như một trình biên dịch bài tập biên dịch sang RISC-V.

Nhưng nếu tôi hầu như không có nền tảng phần mềm thì sao?

Chà, ngày xửa ngày xưa, tôi đã ở đúng tình huống đó. Khi bắt đầu sự nghiệp, trong nhiều năm, tôi đã phải cân bằng trên lưỡi dao giữa việc hoàn thành công việc và vừa làm vừa học. Bắt đầu từ năm 1999, tôi đã viết các thành phần COM bằng C++ mà không hiểu nhiều về những gì mình đang làm. Bằng cách nào đó, tôi vẫn làm cho nó hoạt động, thậm chí đến mức tôi đã loại bỏ được bất kỳ lỗi rò rỉ bộ nhớ rõ ràng nào.

Tuy nhiên, tôi chưa bao giờ hài lòng với việc chỉ chắp vá mọi thứ lại với nhau mà không hiểu cách chúng hoạt động. Vì vậy, như câu hỏi đã gợi ý, tôi đã lùi lại để học các nguyên lý cơ bản một cách có hệ thống. Điều này đã hiệu quả tốt cho một sự nghiệp bắt đầu vào giữa những năm 1990. Liệu nó có hiệu quả tốt ngày nay không?

Tôi không chắc lắm: Để đạt đến trình độ năng lực đủ cao để nhận ra sự tự tin trong quá khứ của bạn thực chất nằm ở phần "quá thiếu hiểu biết để nhận ra" trên đường cong Dunning-Kruger, đã mất hàng thập kỷ. Bạn có đủ thời gian đó ngày nay không?

Phải thừa nhận rằng, với LLM, bạn có thể học nhanh hơn vì bạn có thể đặt những câu hỏi trực diện hơn. Ba mươi năm trước, tôi sẽ mua sách với hy vọng rằng chúng chứa đựng tài liệu hữu ích. Điều này vẫn có nghĩa là phải vất vả đọc qua rất nhiều tài liệu học tập không liên quan trực tiếp đến nhiệm vụ hiện tại.

Tuy nhiên, tôi nghi ngờ rằng liệu có thể tăng tốc đáng kể việc học tập của con người hay không. Nút thắt cổ chai hầu như không nằm ở giáo viên hay tài liệu, mà nằm ở tốc độ bộ não con người có thể tiếp thu kiến thức mới.

"Một điều cuối cùng mà tôi đặc biệt biết ơn nếu được nghe là ông đã tự học lập trình như thế nào, và cách ông học những thứ kỹ thuật mới ngày nay. Ông đã tiếp cận việc học một ngôn ngữ mới như thế nào trong giai đoạn đầu sự nghiệp? Sách, dự án, đọc mã nguồn của người khác, bài tập, gỡ lỗi, hay thứ gì khác? Và nếu phải học một ngôn ngữ lập trình hoàn toàn mới ngày nay, với sự hỗ trợ của AI, ông sẽ làm như thế nào?"

Câu trả lời ngắn gọn cho câu hỏi đầu tiên: Chậm rãi, dựa trên nhiều lần thử và sai, thỉnh thoảng có sự hỗ trợ của sách.

Ngoài một khởi đầu sai lầm rất sớm với COMAL 80, các dự án lập trình đầu tiên của tôi là (tính toán lại) các biểu đồ phân nhánh và bộ thu hút Lorenz cho luận văn thạc sĩ kinh tế của mình. Tận dụng những gì có trong tay, tôi đã viết chúng bằng QBasic, học từ các mẫu đi kèm với nó, cũng như thỉnh thoảng hỏi một người bạn.

Mặc dù tôi đã bỏ qua nhiều chi tiết, nhưng trong những năm 1990 và 2000, tôi chủ yếu học từ các ví dụ và tài liệu hướng dẫn. Mặc dù tôi có mua một cuốn sách về C++, tôi không nghĩ mình đã đọc hết nó, và tôi đã học các phương ngữ Basic khác nhau cũng như C# hoàn toàn từ tài liệu và mã ví dụ.

Mặc dù vậy, dù chưa bao giờ đọc sách để học C#, nhưng sách lại đóng vai trò quan trọng trong việc dạy tôi cả F# và Haskell. Trong nhiều năm, tôi đã dựa rất nhiều vào sách để tự học, nhưng như hồ sơ Goodreads của tôi cho thấy, tôi yêu sách nói chung.

Tôi học một ngôn ngữ lập trình hoàn toàn mới ngày nay như thế nào? Một lần nữa, kinh nghiệm của tôi vô dụng đối với người mới bắt đầu lập trình vào năm 2026: Tôi đã thấy quá nhiều ngôn ngữ lập trình đến mức nếu gặp một ngôn ngữ mới, tôi thường có thể nắm bắt nó bằng cách xem qua mã nguồn hiện có và tra cứu một vài thứ không rõ ràng ngay lập tức.

Nhưng đó là với giả định rằng ngôn ngữ đó là 'bình thường'. Nếu tôi phải quay lại với APL, ít nhất tôi cũng phải tìm một tài liệu hướng dẫn.

lập trìnhLLMtư duyphát triển bản thânAI
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hacker News: AI bài nổi bật. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.