15 điểm bởi GN⁺ 7 giờ trước | 2 bình luận | Chia sẻ qua WhatsApp
  • 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

    • Ở đây gần như đang nghiêng hẳn về kiểu Joker. Ông ấy vốn vẫn nói như nhân vật truyện tranh à?
    • Giống giọng ông quản lý công ty bảo hiểm phụ trách người bố trong Incredibles
    • Cảm giác giống Lewis Black hơn nhiều. Cứ tưởng sắp bùng nổ thành một tràng độc thoại giận dữ, mà cuối cùng lại không nổ nên hơi tiếc
    • Tôi lại nhớ hơn đến cảnh thẩm vấn Neo trong Matrix. Kiểu như “Hello Mr Anderson”
  • Trông đúng là một lập trình viên từng trải thật sự

    • Đúng vậy. Giờ chắc tôi sẽ không còn phải tự viết kiểu code như if (f == -1) { printf("open failed\n"); exit(1); } nữa
      AI 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

    • Thật ra trước giờ code chẳng phải vốn chủ yếu cũng là mã khuôn mẫu sao? Viết thuật toán hay thì tốt đấy, nhưng cuối cùng vẫn phải bọc nó thành sản phẩm rồi gắn CRUD, phân quyền, UI, hỗ trợ đa nền tảng, thanh toán các thứ
    • Cứ như thể mô hình ngôn ngữ lớn là một trình transpiler chuyển DSL cấp cao thành code thực tế một cách ổn định vậy, nhưng hoàn toàn không phải thế
      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é”
    • Chúng ta vẫn còn rất xa mới tới mức “chỉ cần có khả năng truyền đạt hiệu quả thứ mình cần là đủ”
      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
    • Ở giữa còn thêm vài bước nữa
    • Cảm giác như chúng ta vừa đi qua giai đoạn mà phần lớn assembly là mã khuôn mẫu
  • 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

    • Điều mà mọi người quên trong cuộc thảo luận này là mục tiêu không phải làm đúng y nguyên công việc coding mà ta làm vào ngày trước khi vibe coding được phát minh
      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
    • Thế thì thử dùng logic tương tự để giải thích cả lời nói xem
    • Ông ấy còn nói tới mức là chỉ cần review test chứ không cần review code nữa, mà tôi thấy gần như hoang tưởng. Có vẻ chỉ đang nói về các dự án sở thích không bao giờ được triển khai production thực sự
    • Uncle Bob từng đăng tweet về chính điều ông ấy đang nói bây giờ
  • Đâ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 đủ

    • Tôi làm ra đúng thứ đó đấy
    • Sao bạn nghĩ là ông ấy không nói với giọng mỉa mai hay phản ngữ? Các công cụ vẫn còn rất xa mới trở nên hữu ích theo cách được mô tả
  • Cứ như Matrix mà người này là một Agent vậy

    • Ý bạn không phải là The Architect à?
  • 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.