Uncle Bob: "Kỷ nguyên tự tay viết code đã kết thúc"
(reddit.com)- Uncle Bob, nổi tiếng với "Clean Code", tuyên bố rằng kỷ nguyên AI viết code nhanh vượt trội hơn lập trình viên đã đến, đồng thời kêu gọi thay đổi vai trò của lập trình viên
- Vì AI có thể hoàn thành trong 5 phút những việc từng mất cả ngày, nên thời đại lập trình viên trực tiếp viết code đã kết thúc
- Nhưng điều đó lại trao cho lập trình viên sức mạnh khổng lồ, giúp họ làm được những việc trước đây chưa từng dám mơ tới
- Test coverage từng rất đau đầu, nhưng giờ lập trình viên có thể yêu cầu AI đảm bảo test coverage và dùng mutation tester để kiểm chứng tính hiệu quả thực sự của test
- Kết hợp với công cụ phân tích độ phức tạp chu trình (cyclomatic complexity), có thể yêu cầu AI nâng chất lượng code lên mức cao hơn rất nhiều so với trước đây
Bản chép lời từ video đính kèm
Hãy nhìn thẳng vào sự thật. AI viết code nhanh hơn các bạn nhiều lần. Việc các bạn mất cả ngày, AI chỉ cần 5 phút là xong. Kết thúc rồi. Kỷ nguyên các bạn tự tay viết code đã kết thúc. Tôi biết. Hãy chấp nhận điều đó.
Nhưng vấn đề là, chính điều đó lại trao cho các bạn sức mạnh khổng lồ. Bởi giờ đây các bạn có thể làm những việc mà trước kia còn không dám mơ tới.
Hãy nghĩ về test coverage chẳng hạn. Tôi biết nó từng đau đớn đến mức nào. Các bạn phải viết hết đống test đáng ghét đó. Mà có test rồi cũng không có nghĩa là code chạy đúng. Mọi người bật code coverage lên, cười nhạt rồi nói: "Ừ thì, nhưng điều này đâu có nghĩa code hoạt động đúng… chỉ là nó đã được chạy qua thôi."
Giờ thì có thể sửa được chuyện đó. Vì các bạn đã có horsepower. Hãy bảo AI cover code, rồi sau đó chạy mutation tester. Đúng, đó là một công cụ. Các bạn cũng có thể bảo AI tạo luôn công cụ đó. 5 phút là xong. Rồi để AI chạy công cụ ấy. Công cụ đó sẽ chỉnh sửa mã nguồn và chạy lại toàn bộ test. Nếu test không fail thì sao? Hãy viết test khiến nó fail. Khi đó các bạn sẽ có test coverage thật sự.
Tôi thề, các bạn sẽ có test coverage thật sự.
Và còn biết có thể làm gì nữa không? Các bạn có thể phân tích chất lượng của code. Có thể viết một công cụ để xem độ phức tạp chu trình. Thực ra đã có một công cụ rất tuyệt rồi. Một công cụ 20 năm tuổi. Tên của nó là CRAP. Tên hay đấy. Tôi không biết nó viết tắt của gì. Cũng chẳng muốn biết. Nó là sự kết hợp giữa test coverage và độ phức tạp chu trình. Các bạn có thể bảo AI kéo điểm CRAP xuống dưới 5, dưới 4. Khi đó AI sẽ chia nhỏ các hàm lớn và bao phủ chúng bằng test.
Hãy nghĩ về sức mạnh mà các bạn đang có. Các bạn có thể nâng chất lượng code lên đến mức chưa từng thấy trước đây.
Tôi biết. Tôi là ông già Clean Code đó. Nhưng tôi sẽ nói thật. Nếu các bạn thúc AI làm việc, các bạn có thể khiến code sạch hơn rất, rất nhiều.
2 bình luận
Ý kiến trên Reddit
Nghe giống như Mark Hamill đang dùng giọng phản diện quen thuộc của ông ấy
Trông đúng là một lập trình viên từng trải thật sự
if (f == -1) { printf("open failed\n"); exit(1); }nữaAI sẽ viết thay, rồi gắn các kiểu lỗi và thông báo riêng cho mọi nguyên nhân thất bại có thể xảy ra, kèm theo các tham số có ý nghĩa. AI không lười như tôi, nên giờ tôi có thể tập trung vào logic xử lý tệp
Có vẻ chúng ta đang bước vào thời kỳ mà phần lớn code là mã khuôn mẫu. Điều cần thiết là khả năng truyền đạt yêu cầu thật tốt, cùng với cách liên tục kiểm tra bảo mật (OWASP) và hiệu năng của code được sinh ra
Nó cực kỳ phi định tính, và ngay cả các model mới nhất cũng thường dao động trong ngày từ mức “ổn đấy” tới “gần như không dùng được”
Ngôn ngữ tự nhiên trước đây đã mơ hồ, bây giờ vẫn mơ hồ, và sau này có lẽ cũng sẽ tiếp tục như vậy, nên khả năng cao vấn đề này không được giải quyết. Đó là lý do người ta dùng công thức toán học, chứ không phải kiểu “ừm, cộng X vào Y rồi cho vào Z và suy nghĩ cho kỹ nhé”
Ngay lúc này tôi vẫn đang vật lộn để tìm cách xử lý quyền hạn với Claude cho hiệu quả, và cách nó triển khai thay đổi action/quyền mới là một ví dụ hoàn hảo của kiểu code “tạm chạy được nhưng một ngày nào đó sẽ vỡ”
Claude viết code khá tốt, nhưng không phải lúc nào cũng viết code tốt
Điều cần hiểu về AI là ở khía cạnh “tư duy”, nó không giỏi hơn con người, chỉ là nhanh hơn thôi. Khi được giao việc, nó thường làm theo cách mà đa số người sẽ làm, mà trong code thì điều đó nhiều khi không hề tốt
Từ xưa bạn đã có thể thuê vài lập trình viên, nói cho họ thứ mình muốn rồi nhận về một mớ đầy bug; một thay đổi mới làm vỡ thêm ba chỗ khác cũng là chuyện thường. Nếu cứ để Claude tự chạy thì nó cũng làm y như thế. Tôi đã thấy rồi, và câu trả lời lúc nào cũng là phải vào đọc code nó viết, rồi bảo nó refactor cho bớt dễ vỡ và vững hơn
Chừng nào còn dùng Claude để viết code, bạn vẫn phải có khả năng đánh giá xem code đó có ổn không. Cũng giống như nhờ nó viết hộ CV hay tài liệu kế toán thì bạn vẫn phải kiểm tra kết quả
Có thể chúng ta sẽ không còn viết code theo cách cũ nữa, nhưng khả năng đọc đầu ra được tạo ra và rà soát nó dựa trên kinh nghiệm vẫn sẽ cần thiết
Vấn đề là ai cũng nghĩ “mình biết tiếng Anh nên có thể bảo Claude tạo chương trình cho mình”. Nhưng biết tiếng Anh không có nghĩa là bạn có thể bảo Claude viết một luận án tiến sĩ phản bác Hawking radiation. Vì bạn hoàn toàn không có cách nào biết kết quả có đúng hay không
Khi Microsoft đưa ra scaffolding, số lập trình viên được tuyển vẫn nhiều hơn bây giờ. Khi những ngôn ngữ như Basic cho phép người ta nhập các lệnh con người đọc được thay vì assembler, số lập trình viên cũng nhiều hơn thời trước đó nữa, khi còn phải đục mã lên thẻ đục lỗ
Máy tính từ trước đến nay luôn được lập trình bằng các tập lệnh ngày càng ít ràng buộc hơn và dễ đọc dễ viết hơn
Tôi rất tôn trọng Bob Martin, nhưng lần này tôi nghĩ ông ấy sai. Con người vẫn sẽ tiếp tục viết lệnh cho máy tính. Chỉ là thay vì một tập lệnh cụ thể bị giới hạn, họ sẽ viết bằng một ngôn ngữ ít bị ràng buộc hơn nhiều và dễ đọc với con người hơn rất nhiều
Chẳng có gì kết thúc cả. Mọi thứ mới chỉ bắt đầu thôi. Lập trình vừa phát hành một ngôn ngữ mới, và tên của nó là English
Ngay lúc này chúng ta đã đang tạo ra lượng phần mềm kỷ lục, và việc đó sẽ còn nhanh hơn nữa. Chúng ta sẽ viết nhiều code hơn trước đây, và dù có nhanh hơn rất nhiều thì cuối cùng vẫn sẽ có nhiều người làm việc với phần mềm theo cách nào đó hơn. Đầu ra đã trở nên quá rẻ, và điều này gần với nghịch lý Jevons
Nghĩ rằng “lần này sẽ khác” là một kiểu kiêu ngạo, và ngay cả người thông minh cũng khó hình dung được tăng trưởng hàm mũ đa chiều thực sự có nghĩa là gì. Không chỉ riêng các mô hình ngôn ngữ lớn đang tiến bộ
Nên tôi nghĩ ý đó là đúng
Đây đúng là đỉnh điểm của bong bóng phải không? Tôi tuyên bố ngay tại đây ☎️
Cách ông ấy nói đòi hỏi phải có chỉ số chất lượng phần mềm, kiểm thử chuyên nghiệp, và nhiều năm hiểu biết về chất lượng code
Hiện vẫn chưa có đủ công cụ như vậy. Ít nhất là chúng chưa được chấp nhận rộng rãi. Tôi cũng không chắc ngành này có chịu tiếp nhận chúng hay không
Thực hành CI/CD cũng không khó triển khai đến thế, nhưng nhiều công ty vẫn không áp dụng đầy đủ và cứ tiếp tục làm việc kém hiệu quả bằng cách tuyển thêm người. Trừ khi AI xử lý tất cả những điều đó theo mặc định, chuyện này sau này có lẽ vẫn vậy thôi. Chỉ với Claude Code, Cursor và các công cụ Codes hiện tại thì vẫn chưa đủ
Cứ như Matrix mà người này là một Agent vậy
Muốn dẫn dắt AI cho đúng thì phải có độ sâu kỹ thuật hàng đầu. Cứ đơn giản bảo AI tiếp tục thêm code vào thì sẽ không thể bảo trì được
Với lại tôi vẫn chưa nghe nói có sản phẩm ở cấp độ thị trường nào vận hành hoàn toàn bằng AI cả. Nên cứ bình tĩnh đã
Tiếp theo chắc là vibe coding luôn cả não người
Có vẻ như các ý kiến trên reddit phần lớn là tiêu cực hoặc mang tính mỉa mai.
Trong thực tế, ở những trường hợp nhờ AI mà đang có thể triển khai chắc chắn những phần vốn bị trì hoãn bấy lâu như test coverage, E2E test, thì ngược lại các phản ứng đó lại có vẻ khá cay nghiệt.