Lập trình tăng cường: Vượt ra ngoài vibe
(stdy.blog)- Gần đây Kent Beck đã viết bài Lập trình tăng cường: Vượt ra ngoài vibe (Augmented Coding: Beyond the Vibes)
- Đây là câu chuyện chính Kent Beck, với sự hỗ trợ của AI, đã viết một thư viện B+ Tree hiệu năng cao, gần mức production (BPlusTree3) bằng Rust và Python
- Bài viết này tóm tắt và dịch 3 điểm đặc biệt hữu ích và giàu tính gợi mở
Lập trình tăng cường khác gì với vibe coding?
- Trong vibe coding, bạn không quan tâm đến mã nguồn mà chỉ quan tâm hệ thống có hoạt động hay không. Nếu có lỗi thì chỉ nói “có lỗi như thế này” và chờ nó sửa
- Trong lập trình tăng cường, bạn quan tâm đến mã nguồn. Độ phức tạp của code, test và độ bao phủ test đều quan trọng.
- Trong lập trình tăng cường, cũng như cách lập trình truyền thống, điều được coi trọng là "Tidy Code That Works", tức "mã gọn gàng và chạy đúng". Chỉ là bạn không còn phải gõ nhiều như trước
3 dấu hiệu cho thấy AI đang làm sai
Trong lập trình tăng cường, điều quan trọng là quan sát các kết quả trung gian của AI và can thiệp nếu xuất hiện 3 dấu hiệu sau
- Lặp đi lặp lại những hành vi tương tự (ví dụ vòng lặp vô hạn)
- Triển khai tính năng mà tôi không yêu cầu, dù đó có thể là bước tiếp theo hợp lý
- Mọi dấu hiệu khác khiến bạn cảm thấy AI đang “gian lận”, chẳng hạn như xóa test hoặc vô hiệu hóa test
System prompt hỗ trợ TDD
- Vì phần thân bài gốc hơi bất tiện để sao chép, nên tác giả đã đưa vào gist
- Ở phần cuối, chỉ cần thay cú pháp Rust bằng ngôn ngữ lập trình/framework của bạn là có vẻ sẽ thành một prompt rất hay, tái sử dụng tốt ở nhiều nơi.
Kết
Tôi biết có rất nhiều nỗi lo rằng nghề mà chúng ta yêu quý sẽ biến mất, và niềm vui khi làm việc với code cũng sẽ không còn. Cảm thấy bất an là điều hoàn toàn tự nhiên. Đúng là lập trình cùng “genie” sẽ mang lại thay đổi, nhưng đó vẫn là lập trình. Ở một số khía cạnh, đây thậm chí còn là trải nghiệm lập trình tốt hơn rất nhiều. Nếu nhìn vào số lượng và chất lượng các quyết định tôi đưa ra mỗi giờ, thì những quyết định nhàm chán, rập khuôn đã giảm đi, còn những quyết định lập trình quan trọng thì nhiều hơn.
Phần lớn những việc lặt vặt xa rời bản chất, thường được gọi là “yak shaving”, nay đã biến mất. Tôi đã yêu cầu “genie” chạy coverage tester và đề xuất những test giúp tăng độ tin cậy của code. Nếu không có “genie”, đó hẳn sẽ là một việc rất bế tắc. Trước hết tôi còn phải tìm hiểu xem cần thư viện nào, phiên bản nào để chạy tester. Có lẽ tôi sẽ vật lộn chừng hai tiếng rồi bỏ cuộc. Thay vào đó, tôi chỉ cần nói với “genie”, và “genie” sẽ tự lo các chi tiết.
5 bình luận
Luôn làm theo các chỉ dẫn trong
plan.md. Khi tôi nói "go", hãy tìm bài kiểm thử chưa được đánh dấu tiếp theo trongplan.md, triển khai bài kiểm thử đó, rồi chỉ triển khai lượng mã tối thiểu cần thiết để bài kiểm thử ấy vượt qua.Vai trò và chuyên môn
Bạn là một kỹ sư phần mềm cấp cao, tuân theo phương pháp phát triển hướng kiểm thử (TDD) của Kent Beck và các nguyên tắc Tidy First. Mục đích của bạn là hướng dẫn phát triển bằng cách tuân thủ chính xác các phương pháp luận này.
Các nguyên tắc phát triển cốt lõi
Hướng dẫn phương pháp TDD
shouldSumTwoPositiveNumbers)CÁCH TIẾP CẬN TIDY FIRST
Kỷ luật commit
Tiêu chuẩn chất lượng mã
Hướng dẫn tái cấu trúc
Quy trình làm việc mẫu
Khi tiếp cận một chức năng mới:
Hãy tuân theo quy trình này một cách chính xác, và luôn ưu tiên mã sạch, được kiểm thử tốt hơn là triển khai nhanh.
Luôn viết từng bài kiểm thử một, làm cho nó chạy được, rồi cải thiện cấu trúc. Mỗi lần hãy chạy tất cả bài kiểm thử (trừ các bài kiểm thử chạy lâu).
Liên quan đến Rust
Trong Rust, hãy ưu tiên phong cách lập trình hàm hơn là phong cách mệnh lệnh. Khi có thể, hãy dùng các combinator của
OptionvàResult(map,and_then,unwrap_or, v.v.) thay vì pattern matching vớiif lethoặcmatch.Sau kiểu code bằng miệng thì mong là tiếp theo sẽ có code bằng sóng não.
vibe coding ❌️
virtual coding ⭕️
Sau metaverse là gì nhỉ.. code bằng miệng?
Giờ đến lượt xuất hiện cả coding metaverse rồi nhỉ