Bài viết của anh Truong Van Quoc, đăng trong nhóm Bình Dân Học AI.
Nội dung bức thư này khá tương đồng với quan điểm của Quốc khi sử dụng AI (LLM) để giúp viết code.
Quan điểm của mình tóm gọn như sau:
“Mọi người không có nền tảng lập trình, hãy nên học ít nhất một ngôn ngữ lập trình, ở mức cực kỳ cơ bản (như biết biến, hàm, function, data type, if…else, …). Sau đó hãy tìm hiểu chuyên sâu hơn về kiến trúc phần mềm, tập trung vào 1 mảng nhất định (web, mobile, nhúng …), mình đề xuất là phát triển Website.”
Nội dung thư mình đã dịch sang tiếng Việt bên dưới, giữ nguyên các thuật ngữ chuyên môn để anh em Dev đọc quen mắt hơn.
Andrew Ng là Nhà sáng lập & Tổng giám đốc điều hành của Landing AI, Nhà sáng lập deeplearning.ai, đồng chủ tịch và Đồng sáng lập của Coursera, và hiện là Giáo sư thỉnh giảng tại Đại học Stanford. Ông cũng là Nhà khoa học trưởng tại Baidu Inc., và Nhà sáng lập & Trưởng nhóm của Dự án Google Brain.
Bức thư từ Andrew Ng
Chào các bạn thân mến,
Mặc dù mình là một lập trình viên Python (Python developer) giỏi hơn nhiều so với JavaScript (JavaScript developer), nhưng nhờ sự trợ giúp của AI, gần đây mình đã viết khá nhiều mã JavaScript.
Việc lập trình có sự hỗ trợ của AI (AI-assisted coding) đang làm cho các ngôn ngữ lập trình cụ thể trở nên ít quan trọng hơn, mặc dù việc học một ngôn ngữ vẫn rất hữu ích để đảm bảo bạn nắm được các khái niệm chủ chốt (key concepts). Điều này đang giúp nhiều lập trình viên viết mã bằng những ngôn ngữ mà chúng ta không quen thuộc, cho phép chúng ta làm cho mã nguồn hoạt động được trong nhiều bối cảnh (contexts) hơn!
Mình vốn chuyên về kỹ thuật học máy (machine learning engineering) và phát triển back-end (back-end development), nhưng việc lập trình có AI hỗ trợ đang giúp mình dễ dàng xây dựng các hệ thống front-end (front-end systems) (phần của trang web hoặc ứng dụng mà người dùng tương tác) bằng JavaScript (JS) hoặc TypeScript (TS), những ngôn ngữ mà mình không giỏi lắm. AI tạo sinh (Generative AI) đang làm cho cú pháp (syntax) trở nên ít quan trọng hơn, vì vậy tất cả chúng ta có thể đồng thời là lập trình viên Python, JS, TS, C++, Java, và thậm chí cả Cobol. Có lẽ một ngày nào đó, thay vì là “lập trình viên Python” (Python developers) hay “lập trình viên C++” (C++ developers), nhiều người trong chúng ta sẽ chỉ đơn giản là “lập trình viên” (developers)!
Nhưng việc hiểu các khái niệm (concepts) đằng sau các ngôn ngữ khác nhau vẫn rất quan trọng. Đó là lý do tại sao việc học ít nhất một ngôn ngữ như Python vẫn mang lại nền tảng (foundation) tuyệt vời để đưa ra yêu cầu (prompting) cho các Mô hình Ngôn ngữ Lớn (LLMs) nhằm tạo mã bằng Python và các ngôn ngữ khác. Nếu bạn chuyển từ ngôn ngữ lập trình này sang ngôn ngữ khác để thực hiện các tác vụ tương tự nhưng với cú pháp (syntax) khác — ví dụ, từ JS sang TS, hoặc C++ sang Java, hay Rust sang Go — một khi bạn đã học được bộ khái niệm đầu tiên, bạn sẽ nắm được rất nhiều khái niệm cần thiết để yêu cầu (prompt) một LLM viết mã bằng ngôn ngữ thứ hai. (Mặc dù TensorFlow và PyTorch không phải là ngôn ngữ lập trình, việc học các khái niệm học sâu (deep learning) đằng sau TensorFlow cũng sẽ giúp bạn dễ dàng hơn rất nhiều trong việc yêu cầu LLM viết mã PyTorch cho bạn, và ngược lại!) Ngoài ra, bạn cũng sẽ có thể hiểu phần lớn mã được tạo ra (có thể với một chút trợ giúp từ LLM).
Các ngôn ngữ lập trình khác nhau phản ánh những quan điểm khác nhau về cách tổ chức việc tính toán (computation), và việc hiểu các khái niệm (concepts) vẫn rất quan trọng. Ví dụ, một người không hiểu về mảng (arrays), từ điển (dictionaries), bộ nhớ đệm (caches), và bộ nhớ (memory) sẽ kém hiệu quả hơn khi yêu cầu LLM viết mã bằng hầu hết các ngôn ngữ.
Tương tự, một lập trình viên Python (Python developer) muốn chuyển sang lập trình front-end nhiều hơn với JS sẽ có lợi khi tìm hiểu các khái niệm đằng sau hệ thống front-end (front-end systems). Ví dụ, nếu bạn muốn LLM xây dựng một front-end sử dụng framework React, bạn sẽ có lợi khi hiểu cách React chia nhỏ front-end thành các thành phần giao diện người dùng (UI components) có thể tái sử dụng, và cách nó cập nhật cấu trúc dữ liệu DOM (DOM data structure) – thứ quyết định giao diện của trang web. Điều này cho phép bạn đưa ra yêu cầu (prompt) cho LLM một cách chính xác hơn nhiều, và giúp bạn hiểu cách khắc phục sự cố nếu có vấn đề xảy ra. Tương tự, nếu bạn muốn LLM giúp bạn viết mã bằng CUDA hoặc ROCm, việc hiểu cách các GPU tổ chức việc tính toán (compute) và bộ nhớ (memory) sẽ rất hữu ích.
Giống như những người thông thạo nhiều ngôn ngữ loài người có thể giao tiếp dễ dàng hơn với người khác, các LLM đang giúp các lập trình viên xây dựng hệ thống trong nhiều bối cảnh (contexts) dễ dàng hơn. Nếu bạn chưa thử, mình khuyến khích bạn hãy thử yêu cầu LLM viết một ít mã bằng ngôn ngữ mà bạn muốn học nhưng có lẽ chưa có dịp bắt đầu, và xem liệu nó có giúp bạn làm cho một số ứng dụng mới hoạt động được không nhé.
Hãy tiếp tục xây dựng!
Andrew
————————————–
Link thư gốc ở đây.