Đọc diff một cách phê phán
Một diff là danh sách chính xác những gì đã thay đổi: các dòng đỏ bị xóa, các dòng xanh được thêm vào. Đọc diff là thói quen có đòn bẩy cao nhất trong vibe coding, vì đó là nơi bạn bắt được AI làm điều gì đó mà bạn không yêu cầu.
Bạn không cần phải hiểu từng dòng. Hãy quét tìm những dấu hiệu cảnh báo sau:
- Các tệp bạn không ngờ tới sẽ bị thay đổi. Vì sao một tệp cấu hình lại bị chạm vào?
- Mã bị xóa. Nó có xóa một bước kiểm tra xác thực, một trình xử lý lỗi, hoặc một bài kiểm thử "để làm cho nó pass" không?
- Bí mật hoặc giá trị được viết cứng (hardcoded). Khóa (Application Programming Interface — giao diện lập trình ứng dụng), mật khẩu, hoặc (Uniform Resource Locator — địa chỉ web) không nên có trong mã nguồn.
- Các bước kiểm tra bị vô hiệu hóa. Một bài kiểm thử bị bỏ qua, một lớp bảo vệ bị comment ra, một
// @ts-ignore, hoặc một quyền truy cập bị nới lỏng. - Phạm vi bị lan man (scope creep). Những thay đổi xa rời so với những gì bạn yêu cầu.
Nếu có gì đó trông không ổn, hãy hỏi: "Giải thích vì sao bạn thay đổi X — tôi không yêu cầu điều đó." Hãy buộc AI phải giải trình đặc biệt cho các việc xóa bỏ. "Nó đang gây ra lỗi" là một lý do để hiểu lỗi đó, chứ không phải để xóa bước kiểm tra.
Một cách thực tế để xây dựng thói quen này: đọc diff trước khi bạn chấp nhận thay đổi, không bao giờ sau đó. Một khi mã đã được merge và ứng dụng có vẻ hoạt động, bạn sẽ không bao giờ quay lại đọc nó nữa — không có ma sát nào buộc bạn phải làm vậy. Khoảnh khắc rà soát phải là khoảnh khắc ra quyết định. Các công cụ có thể giúp ở đây: git diff --stat cho bạn một bản tóm tắt một dòng cho mỗi tệp để một tệp bất ngờ nổi bật ngay lập tức, và việc rà soát trên trang đưa toàn bộ thay đổi vào một khung nhìn có thể cuộn duy nhất thay vì rải rác trong trình soạn thảo của bạn.