Trước đây, tôi thường thấy nhẹ nhõm khi một đoạn code chạy được. Sau này tôi nhận ra “chạy được” và “hiểu được” là hai việc khác nhau. Nếu tôi sửa một lỗi bằng cách thử ngẫu nhiên cho đến khi màn hình hết đỏ, tôi chỉ dời sự mơ hồ sang lần sau. Vì vậy, tôi bắt đầu giữ lại dấu vết: điều gì đã xảy ra, tôi dự đoán nguyên nhân nào, phép thử nào bác bỏ dự đoán đó và thay đổi cuối cùng đã tác động vào đâu.
Cách làm này đặc biệt hữu ích khi xây hệ thống agent. Một câu trả lời tệ có thể đến từ truy xuất sai tài liệu, phân loại sai ý định, prompt không rõ hoặc công cụ trả dữ liệu thiếu. Nếu chỉ chỉnh câu lệnh cho đến khi một ví dụ trông ổn, tôi không biết hệ thống đã tốt hơn hay chỉ tình cờ may mắn. Tôi cần tách từng lớp và đo đúng lỗi của từng lớp.
Việc học tiếng Trung cũng giống vậy. Khi viết 你要去哪里? (Nǐ yào qù nǎlǐ? — “Nee yaow chyoo naa-lee?” — Bạn muốn đi đâu?), tôi từng do dự ở 哪里. Sự do dự đó không phải một điểm xấu cần giấu. Nó nói rằng tôi đã hiểu khung câu nhưng chưa gọi từ để hỏi nơi chốn đủ nhanh. Bài luyện tiếp theo vì thế trở nên rất rõ ràng.
Tôi đang học cách nhìn lỗi sai với ít cảm xúc phòng thủ hơn. Không phải lỗi nào cũng cần một bài phân tích dài, nhưng lỗi lặp lại luôn đáng được quan sát. Khi tôi gọi đúng tên vấn đề, việc sửa thường nhỏ hơn tưởng tượng. Và sau mỗi lần sửa có chủ đích, niềm tin vào kiến thức của mình cũng thật hơn một chút.