5 điểm bởi GN⁺ 2026-01-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kết quả thử nghiệm việc thêm prompt persona "Code như Kent Beck" cho công cụ lập trình AI (Genie) để xem liệu chất lượng mã có được cải thiện hay không cho thấy phong cách viết test và cách đặt tên biến có cải thiện, nhưng thiết kế kiến trúc không thay đổi
  • So sánh và kiểm chứng hiệu quả của prompt persona và các điều kiện ràng buộc thiết kế thông qua một dự án triển khai cấu trúc dữ liệu Rope
  • Persona cải thiện hành vi vi mô (cách viết test, đặt tên), còn các ràng buộc tường minh quyết định kiến trúc vĩ mô (cấu trúc phân cấp lớp)
  • Kết quả thí nghiệm với 4 nhóm cho thấy prompt kết hợp persona và ràng buộc cho kết quả tốt nhất
  • Trích dẫn "The Bitter Lesson" của Rich Sutton, bài viết gợi ý rằng việc tận dụng tài nguyên tính toán hiệu quả hơn so với mã hóa chuyên môn của con người

Giai đoạn hiện tại của các công cụ lập trình AI

  • Các công cụ lập trình AI (Genie) hiện đang ở giai đoạn "cỗ xe không ngựa kéo"
  • Mọi đổi mới công nghệ đều ban đầu được hiểu theo khung cũ, rồi sau đó mới nhận ra sự thay đổi mang tính căn bản
    • cỗ xe không ngựa kéo → ô tô
    • điện báo không dây → radio
    • thư điện tử → nhắn tin
  • Muốn hiểu được hiệu ứng bậc hai của công nghệ mới, cũng như các vòng lặp khuếch đại và kìm hãm, cần phải sử dụng nó trong thời gian đủ dài

Thử nghiệm: cấu trúc dữ liệu Rope

  • Cấu trúc dữ liệu Rope là cấu trúc dùng để xóa ký tự ở giữa trong các chuỗi rất dài một cách hiệu quả
  • Cách đơn giản là dồn toàn bộ ký tự bên phải sang, mất thời gian O(n)
  • Cấu trúc Rope xử lý thao tác xóa trong thời gian hằng số bằng cách dùng đối tượng substringđối tượng concatenation
    • Khi xóa sẽ cấp phát 3 đối tượng
    • Việc duyệt có độ phức tạp O(số phép toán), nhưng nhỏ hơn độ dài chuỗi và có thể nén định kỳ

Quá trình thí nghiệm

Phase 1: Persona ("Code like Kent Beck")

  • Kiểm chứng xem việc thêm prompt "Code like Kent Beck" có cải thiện chất lượng mã hay không
  • Kết quả: xác nhận có cải thiện về phong cách mã
    • Tên biến tốt hơn
    • Chiến lược kiểm thử chuyển từ script nguyên khối sang unit test được mô-đun hóa (theo kiểu TDD)
  • Phát hiện ngoài dự đoán: kiến trúc không thay đổi
    • Rope được triển khai bằng cây nhị phân tiêu chuẩn
    • Mẫu Composite mà Kent Beck sử dụng bị bỏ qua

Phase 2: Bổ sung hướng dẫn thiết kế

  • Mã của nhóm Control quá dài dòng nên phát sinh lỗi cú pháp do vượt giới hạn token
    • Đã giải quyết bằng cách tăng giới hạn token
    • "Nhiều tính toán hơn" có thể là lời giải đơn giản
  • Bổ sung các ràng buộc tường minh vào prompt
    • "Sử dụng mẫu Composite"
    • "Tách hành vi thành các lớp nhỏ, chuyên biệt"
  • Kết quả: triển khai đúng thiết kế mong đợi
    • Các lớp SubstringConcatenation được tách riêng
    • Cấu trúc đơn giản hơn so với một lớp duy nhất
    • Trên thực tế còn cho ra thiết kế đơn giản hơn: xử lý bằng Substring 0..size mà không cần Null Object (EmptyString) hay wrapper cho chuỗi native

Phase 3: Thí nghiệm tách 4 nhóm

  • Thiết kế thí nghiệm đối chiếu chéo để xác định can thiệp nào tạo ra hiệu quả
    1. Control: trợ lý tiêu chuẩn
    2. Kent Beck: chỉ áp dụng persona
    3. Composite: chỉ áp dụng ràng buộc kiến trúc
    4. Combined: persona + ràng buộc

Kết luận thí nghiệm

  • Xác nhận hiệu ứng của ma trận 2x2
    1. Persona quyết định hành vi vi mô: prompt "Kent Beck" cải thiện ổn định phong cách testcách đặt tên, nhưng không ảnh hưởng đến các quyết định cấu trúc
    2. Ràng buộc quyết định kiến trúc vĩ mô: prompt "Composite Pattern" ép buộc cấu trúc phân cấp lớp, và vẫn tạo ra thiết kế chi tiết dù không có persona
    3. Kết hợp là tốt nhất: nhóm Combined vừa có kiến trúc đúng (Composite) vừa có thói quen phát triển đúng (TDD/Unit Tests)

Áp dụng The Bitter Lesson

  • Mục tiêu ẩn: để Genie có thể phát triển tốt hơn trong khi cân bằng giữa chức năng hiện tại và tương lai
  • Những phương pháp đã thử: prompt kỹ lưỡng, xem xét cẩn thận các thay đổi do Genie đề xuất, chia bước nhỏ hơn/lớn hơn, v.v.
  • Trích dẫn "The Bitter Lesson" của Rich Sutton
    • Bài học từ 70 năm nghiên cứu AI: tận dụng tài nguyên tính toán cho kết quả tốt hơn so với mã hóa chuyên môn của con người
    • Nỗ lực mã hóa phong cách hóa ra lại là cùng một sai lầm mà ai cũng mắc phải

Đề xuất phong cách phát triển hiệu quả thông qua tận dụng tính toán

  • Không nhất thiết phải bị mắc kẹt với một Genie viết code vụng về chỉ biết sao chép phong cách mã tệ hại từ vô số kho mã
  • Đề xuất cách tận dụng tính toán
    1. Chọn một kho mã lớn
    2. Để một triệu Genie triển khai tính năng tiếp theo, mỗi Genie tự chọn cách dọn dẹp và mức độ dọn dẹp khác nhau
    3. Chọn Genie thêm được tính năng với chi phí thấp nhất (thời gian, token, điện năng, chi phí, v.v.)
    4. Lặp lại trên nhiều Genie, nhiều tính năng, nhiều kho mã
  • Cách này trông có vẻ như đang "lãng phí" việc lập trình, nhưng thực tế không phải vậy
  • Jessica Kerr gọi đây là "Design Contest"

1 bình luận

 
kallare 2026-01-25

Vậy nếu bảo nó code như Jeff Dean thì sẽ ra sao...?!