- Có một niềm tin rằng vì AI giúp viết và dọn dẹp mã, nợ kỹ thuật (tech debt) sẽ trở nên ít quan trọng hơn
- Nhưng trên thực tế, AI lại đang làm chi phí của nợ kỹ thuật tăng lên nhiều hơn
- Trong các codebase có mức nợ thấp, mức cải thiện tốc độ từ các công cụ AI được tối đa hóa, nhưng ở các codebase legacy có mức nợ cao, hiệu quả của công cụ AI giảm mạnh
- Kết quả là, các codebase có nhiều nợ kỹ thuật đang gặp khó khăn lớn hơn trong việc tận dụng công cụ AI
AI tạo sinh dễ tổn thương trước mã phức tạp
- Các công cụ lập trình AI như Cursor hay Aider phản ứng rất nhạy với độ phức tạp của mã
- Trong mã có các pattern hoặc interface sẵn có được định nghĩa rõ ràng, mức tăng tốc là rất lớn, nhưng với luồng điều khiển phức tạp và mã có nhiều phụ thuộc, chúng gặp khó khăn trong việc tạo ra phản hồi hợp lệ
- Codebase phức tạp không chỉ gây khó cho mô hình AI mà còn khiến lập trình viên khó cấu trúc yêu cầu một cách rõ ràng
- Vì vậy, nhiều lập trình viên có xu hướng chờ đến khi công cụ AI có thể xử lý mức độ phức tạp ở ‘cấp độ production’
Tận dụng công cụ AI đúng cách
- Thay vì cố ép dùng công cụ AI trong codebase legacy, điều quan trọng là chuyên gia con người thực hiện refactor để AI có thể hoạt động trơn tru
- Nếu việc refactor trực tiếp có rủi ro, có thể dùng các phương pháp như mẫu Strangler Fig để phát triển module mới và qua đó tận dụng ngay lợi ích của công cụ AI
- Nhờ vậy, đội ngũ phát triển có thể tập trung vào mức trừu tượng cao hơn và chú trọng vào thiết kế kiến trúc hơn là chi tiết triển khai mã
Cách tiếp cận thân thiện với AI
- Điều quan trọng là module hóa hệ thống để công cụ AI có thể hoạt động tốt, đồng thời định nghĩa tương tác giữa các module thông qua các interface rõ ràng
- Duy trì một cấu trúc module mà trong đó có thể mô tả các chức năng cốt lõi và luồng dữ liệu bằng ngôn ngữ tự nhiên là một tiêu chí hữu ích
- Nếu dùng các công cụ như Gauge Tach để thiết lập khả năng quan sát và các quy tắc kiến trúc, có thể phát triển thành một hệ thống được module hóa
Chất lượng quyết định tốc độ
- Việc duy trì một codebase chất lượng cao trở nên quan trọng hơn bao giờ hết
- Nếu đầu tư vào kiến trúc module hóa, đội ngũ có thể phát huy tối đa hiệu quả của công cụ AI, đồng thời xây dựng cả tính năng nhanh lẫn phần mềm chất lượng cao
4 bình luận
Việc phần mềm phình to dường như là số phận không thể tránh khỏi
Có vẻ như quản lý hay những người kiểu vậy nghe ngóng đâu đó rồi nghĩ rằng AI sẽ giải quyết được hết. ChatGPT đã tạo ra quá nhiều ảo tưởng. Có lẽ cần nhấn mạnh rằng nó vẫn mới chỉ như học sinh tiểu học. Có vẻ cũng cần nói rõ rằng nó chỉ giúp được một chút như một công cụ hỗ trợ mà thôi.. Và điều ở trên khiến tôi đồng cảm là, khi mọi thứ phức tạp thì nó dễ hiểu sai. Có vẻ như nó không nắm được toàn bộ luồng của dự án.
garbage in garbage out thì đúng là không thể thoát được.
Ý kiến trên Hacker News
Các công ty có codebase trẻ và chất lượng cao hưởng lợi nhiều nhất từ các công cụ AI tạo sinh. Ngược lại, các công ty có codebase legacy phức tạp gặp khó khăn khi áp dụng chúng. Tôi cũng có trải nghiệm tương tự khi dùng LLM cho các dự án cá nhân. Chỉ cần codebase trở nên hơi đặc thù một chút là mô hình mắc lỗi và công việc trở nên khó hơn
LLM khiến các tác vụ dễ trở nên dễ hơn, nhưng lại mắc sai lầm với các tác vụ khó. Khoảng cách này không thu hẹp lại mà còn đang ngày càng lớn hơn
Trong môi trường "nợ cao", các công cụ này gặp khó khăn trong việc tạo ra phản hồi hữu ích vì luồng điều khiển tinh vi, phụ thuộc dài hạn và các mẫu không lường trước được. Trong nhiều trường hợp, đây không phải là "nợ kỹ thuật" mà là dấu hiệu cho thấy codebase đã trưởng thành
Thay vì ép các công cụ AI tạo sinh giải quyết những vấn đề phức tạp của codebase legacy, các chuyên gia con người nên refactor mã legacy để AI tạo sinh có thể hoạt động trơn tru
Đang xuất hiện niềm tin rằng AI sẽ khiến nợ kỹ thuật trở nên kém quan trọng hơn. Tuy nhiên, mã do AI tạo ra thường không đồng đều, thiếu nhất quán và rất nhạy với prompt cụ thể cũng như ngữ cảnh đầu vào
Mã do AI tạo ra thực sự có thể có giá trị, nhưng cách đặt khung vấn đề trong bài viết này là phi thực tế
Machine learning giống như thẻ tín dụng lãi suất cao của nợ kỹ thuật. Việc sinh mã càng dễ thì càng có nhiều mã được tạo ra, và chi phí bảo trì càng tăng
Tôi rất ấn tượng với khả năng sinh mã của LLM, nhưng mục tiêu vẫn là giảm lượng mã
AI xử lý các tác vụ đơn giản và tạo ra nhiều mã hơn, nhưng cũng tạo ra những lỗi rất khó phát hiện. Bạn có thể di chuyển nhanh hơn với các công cụ này, nhưng sẽ cần vận hành theo cách khác
AI có thể hỗ trợ hiểu và sửa mã, nhưng việc sao chép-dán một cách mù quáng là không tốt. Việc review mã, yêu cầu giải thích và lặp đi lặp lại vẫn cần thiết