Trong một tập gần đây của Dwarkesh Podcast, nhà nghiên cứu AI Andrej Karpathy (trước đây là Giám đốc AI và Tầm nhìn Autopilot tại Tesla) đã chia sẻ những kinh nghiệm và quan điểm của mình về việc viết code có sự hỗ trợ của AI. Những gì ông ấy thảo luận đã gây ấn tượng với tôi — nhiều lập trình viên sẽ nhận ra những căng thẳng và đánh đổi tương tự mà ông ấy mô tả.
Dưới đây, tôi sẽ trình bày những điểm chính của Andrej (bạn cũng có thể xem toàn bộ cuộc phỏng vấn nếu bạn tò mò).
Phong cách lập trình
Andrej mô tả ba cách tiếp cận rộng rãi để viết code ngày nay:
-
Chế độ viết từ đầu kiểu cũ: viết mọi thứ thủ công, hoàn toàn bỏ qua các công cụ AI.
-
Kết hợp với tự động hoàn thành: bạn viết logic chính, nhưng dựa vào tự động hoàn thành hoặc các đề xuất của AI cho các đoạn mã soạn sẵn. Bạn vẫn biết chính xác mọi thứ sẽ hoạt động như thế nào — AI chỉ giúp triển khai các phần nhỏ.
-
Viết code theo cảm hứng: bạn nhập một cái gì đó như “vui lòng triển khai cái này” và để mô hình thực hiện công việc nặng nhọc, sau đó nhấn Enter.
Andrej tự nhận mình thuộc nhóm thứ hai: anh ấy tự viết hầu hết logic, tận dụng tính năng tự động hoàn thành khi hợp lý.
Ưu và nhược điểm của code có sự hỗ trợ của AI
Các mô hình viết code AI hiện tại rất giỏi trong việc tạo code soạn sẵn chỉ là những thứ sao chép và dán.
Các mô hình viết code AI cũng giỏi những thứ đã có trên internet. Ví dụ: nếu bạn đang xây dựng một máy chủ HTTP trong Go, nó có thể giúp tạo code máy chủ HTTP cơ bản một cách dễ dàng vì nó khá chuẩn vì các mô hình đã được đào tạo trên nhiều code như vậy.
Các mô hình viết code AI giúp người mới dễ tiếp cận ngôn ngữ mới hơn. Ví dụ: nếu bạn có một dự án Python mà bạn khá quen thuộc và bạn muốn triển khai lại nó trong Rust (vì lý do hiệu suất) mà bạn không giỏi, thì đây là một lựa chọn rất tốt để mô hình viết code trợ giúp.
Mặc dù các mô hình viết code có tất cả những tính năng tốt này, nhưng chúng cũng đi kèm với một số thiếu sót. Dưới đây là một số điều được Andrej chia sẻ
Chúng liên tục hiểu sai code vì chúng có quá nhiều code trong bộ nhớ, thường làm mọi thứ theo một cách nào đó có thể không phù hợp. Một ví dụ
So the way to synchronize, so we have eight GPUs that are all doing forward backwards. The way to synchronize gradients between them is to use a distributed data parallel container of PyTorch, which automatically does all the, as you're doing the backward, it will start communicating and synchronizing gradients. I didn't use DDP because I didn't want to use it because it's not necessary. So I threw it out. And I basically wrote my own synchronization routine that's inside the step of the optimizer. And so the models were trying to get me to use the DDP container, and they were very concerned about, this gets way too technical, but I wasn't using that container because I don't need it, and I have a custom implementation of something like it.
Các mô hình viết code cũng thích làm rối tung các kiểu, đôi khi nó quá phòng thủ. Chúng sẽ tạo ra rất nhiều câu lệnh try-catch mà lập trình viên viết code đã có các giả định an toàn. Điều này thường dẫn đến một triển khai rất phức tạp và lộn xộn.
Đôi khi chúng cũng sử dụng các API không được dùng nữa. Thật khó chịu khi người ta cần nhập quá nhiều tiếng Anh về những gì cần thiết và chờ đợi quá trình triển khai.
Nhìn chung, Andrej nghĩ rằng việc sử dụng hoàn toàn các mô hình viết code có sự hỗ trợ của AI để viết code không phải là một ý kiến hay. Chúng có những phần tốt nhưng vẫn còn rất nhiều điều cần cải thiện.
No comment for this article.