- Trong môi trường phát triển có trợ lý AI, ngày càng có nhiều trường hợp kỹ sư còn non kinh nghiệm gửi PR quy mô lớn chưa được kiểm chứng
- Nhiệm vụ cốt lõi của lập trình viên không phải chỉ là viết mã, mà là cung cấp đoạn mã đã được chứng minh là hoạt động
- Để làm được điều đó, bắt buộc phải thực hiện hai bước: kiểm thử thủ công và kiểm thử tự động
- Tác nhân lập trình cũng cần được thiết lập để tự xác minh các thay đổi do chính nó tạo ra
- Cuối cùng, trách nhiệm thuộc về lập trình viên con người, và chỉ những đoạn mã đi kèm bằng chứng xác minh mới thực sự có giá trị
Vấn đề của việc gửi mã chưa được kiểm chứng
- Bài viết đề cập đến những trường hợp kỹ sư junior dùng công cụ LLM để gửi PR khổng lồ chưa được kiểm chứng rồi dựa vào code review
- Điều này bị xem là bất lịch sự, kém hiệu quả, và là hành vi né tránh trách nhiệm của một lập trình viên
- Vai trò của kỹ sư phần mềm không chỉ là sản xuất mã, mà là cung cấp đoạn mã đã được chứng minh là hoạt động
- Mã chưa được kiểm chứng bị xem là hành vi chuyển gánh nặng sang người review
Hai bước để chứng minh mã hoạt động
- Bước đầu tiên là kiểm thử thủ công, tức phải trực tiếp xác nhận rằng mã vận hành đúng như mong đợi
- Cần thiết lập hệ thống về trạng thái ban đầu, áp dụng thay đổi rồi kiểm chứng kết quả
- Có thể đính kèm lệnh terminal và kết quả đầu ra vào comment code review hoặc chứng minh bằng video quay màn hình
- Sau khi xác nhận hoạt động bình thường, cần tiếp tục tìm vấn đề thông qua kiểm thử các trường hợp biên
- Bước thứ hai là kiểm thử tự động, được nhấn mạnh là quy trình bắt buộc nhờ sự phát triển của các công cụ LLM
- Cần đi kèm kiểm thử tự động cùng với thay đổi, và nếu hoàn tác phần triển khai thì bài kiểm thử phải thất bại
- Việc viết kiểm thử tuân theo cùng quy trình như kiểm thử thủ công, và năng lực tích hợp test harness là yếu tố quan trọng
- Việc cho rằng chỉ kiểm thử tự động là đủ rồi bỏ qua kiểm thử thủ công bị xem là cách tiếp cận sai lầm
Vai trò và việc xác minh của tác nhân lập trình
- Một xu hướng lớn của lĩnh vực LLM trong năm 2025 là sự tăng trưởng bùng nổ của các tác nhân lập trình, tiêu biểu như Claude Code và Codex CLI
- Chúng có thể chạy mã và tự sửa vấn đề
- Tác nhân lập trình cũng phải chứng minh các thay đổi của chính mình, bằng cách thực hiện cả kiểm thử thủ công lẫn tự động
- Với công cụ CLI, có thể huấn luyện để tác nhân tự chạy trực tiếp, hoặc tự động hóa bằng các hệ thống như CLIRunner của Click
- Với thay đổi CSS, có thể cấu hình để xác nhận kết quả bằng chụp ảnh màn hình
- Nếu dự án đã có sẵn kiểm thử, tác nhân sẽ mở rộng chúng hoặc tái sử dụng các mẫu hiện có
- Cấu trúc và chất lượng của mã kiểm thử ảnh hưởng trực tiếp đến chất lượng kiểm thử do tác nhân tạo ra
- Cảm quan thẩm mỹ đối với mã kiểm thử được nhắc đến như một năng lực cốt lõi để phân biệt kỹ sư senior
Trách nhiệm của con người và giá trị của mã
- Máy tính không thể chịu trách nhiệm, và con người phải đảm nhận vai trò đó
- Việc để LLM tạo ra các bản vá lớn không còn là điều có giá trị nữa
- Giá trị thực sự nằm ở việc cung cấp đoạn mã đã được chứng minh là hoạt động
- Khi gửi PR, bắt buộc phải kèm theo bằng chứng cho thấy mã hoạt động đúng
4 bình luận
Tôi rất đồng cảm. Hiện tại, trách nhiệm đối với mã theo cách PR đang bị chuyển sang cho maintainer và reviewer. Không có bất lợi nào đối với người gửi lên mã do LLM tạo ra mà chưa được tự mình rà soát.
Khi thử đóng góp vào codebase của Google, tôi thấy họ đo lường những thứ như mức độ tín nhiệm của contributor; có lẽ các dự án mã nguồn mở / doanh nghiệp khác cũng sẽ bắt đầu áp dụng điều này. Tôi nghĩ niềm tin sẽ trở thành một tài sản còn quan trọng hơn nữa.
Ồ, vậy là Google dùng khái niệm đó à.
> Kỹ nghệ vibe
Ý kiến trên Hacker News
Gần đây có một giai thoại buồn xuất hiện khá thường xuyên. Một kỹ sư junior được tiếp sức bởi công cụ LLM ném một PR khổng lồ, chưa được kiểm thử cho đồng nghiệp hoặc maintainer mã nguồn mở, rồi kỳ vọng code review sẽ xử lý phần còn lại. Tệ hơn nữa là kiểu hành xử này không chỉ đến từ junior mà còn từ cả các lập trình viên senior
Cách viết PR tốt không chỉ áp dụng cho mã do AI sinh ra mà đúng trong mọi trường hợp. Khi viết mô tả PR, tôi thường sắp xếp theo thứ tự: cách hệ thống đang hoạt động, lý do thay đổi, và nội dung thay đổi. Tôi còn kèm cả cách test, ảnh chụp màn hình, và lệnh test E2E để giảm gánh nặng cho reviewer. Cách này cũng hữu ích cho cộng tác bất đồng bộ hoặc các nhóm làm việc lệch múi giờ
Bản chất của kỹ sư là hiểu yêu cầu, chuyển chúng thành luồng logic, cân bằng trade-off, và chịu trách nhiệm với kết quả. Việc sinh code hay ném PR bừa bãi là triệu chứng của sự thiếu hụt những nền tảng đó. Các coding agent ngược lại đang là dịp nhắc mọi người nhớ lại bản chất của nghề kỹ sư
Test là cần thiết nhưng không đủ. Cần xác minh code bằng logic. Test chỉ chứng minh việc hoạt động bình thường trong những đầu vào và môi trường cụ thể mà thôi
Tôi không coi test là nghĩa vụ. Tôi làm test đơn giản vì muốn tận mắt thấy code thực sự chạy được. Nếu nhìn code chạy mà bạn không thấy hào hứng thì nghề này có lẽ không hợp với bạn
Tôi có nghe chuyện junior nhờ LLM rồi ném ra PR khổng lồ, nhưng trong tổ chức của chúng tôi thì chuyện đó vẫn chưa xảy ra
Tôi không đồng ý với câu “công việc là bàn giao code ở trạng thái đã được chứng minh”. Công việc thật sự là giải quyết vấn đề kinh doanh. Tất nhiên trong đa số trường hợp điều đó dẫn tới code, nhưng phân biệt như vậy vẫn quan trọng
Ở công việc trước đây tôi từng làm tại một nhà sản xuất phần cứng chất lượng cao của Nhật, nơi nếu bộ phận QA tìm ra bug thì việc ra mắt sản phẩm sẽ bị dừng lại. Vì vậy mỗi bộ phận phát triển đều lập đội QC riêng để tăng cường test trước. Kết quả là phần mềm được xác minh rất kỹ lưỡng
Dạo này bản chất công việc đã biến thành đóng ticket. Chất lượng code không hiện ra trong thống kê nên thành ra không còn quan trọng. Tôi không tham gia vào hệ thống như vậy. Giờ tinh thần nghề thủ công đã biến mất, ai cũng chỉ muốn gỗ dán rẻ tiền và keo dính
Vấn đề nằm ở ý nghĩa của “code đã được chứng minh”. Cũng có trường hợp người ta gắn thêm test do LLM tạo rồi nộp một PR khổng lồ. Tôi cũng vibe coding trong dự án cá nhân, nhưng làm vậy ở quy mô cả nhóm là một thói quen xấu. Lý do người ta thuê kỹ sư là để mua lấy chuyên môn của họ