Tóm tắt nhanh
- Cây bút công nghệ Anurag Singh đưa ba bài tập Python thời đại học cho một AI coding agent: tìm kiếm nhị phân, đổi biểu thức trung tố sang hậu tố bằng stack, và tính căn bậc hai bằng Newton-Raphson.
- Cả ba bản code từng qua bài kiểm tra ở trường, nhưng agent vẫn tìm ra lỗi biên, lỗi off-by-one, lỗi kết hợp toán tử lũy thừa và điều kiện dừng vòng lặp thiếu chặt.
- Giá trị nằm ở thứ tự: người học tự viết trước, rồi mới để agent soi lỗi và giải thích từng bước.
- Môn CMU 15-113 “Effective Coding with AI” mở từ học kỳ mùa xuân 2026 cho thấy hướng dạy này đã vào chương trình chính quy.
Code qua được vài bộ test mẫu chưa phải code đúng

Ba chương trình trong thí nghiệm đều có chung một lịch sử: được viết cho bài tập, chạy ra đúng kết quả mong đợi, rồi bị bỏ xó. Với sinh viên, thế là xong việc, còn với một agent được yêu cầu rà soát thì đó mới là điểm xuất phát. Agent chạy chương trình, rồi chủ động tìm đầu vào có khả năng làm nó gãy, thay vì thử vài giá trị cho khớp với kỳ vọng như cách học ở lớp.
Đây là chỗ khác biệt đáng nói nhất. Phần lớn lỗi mà agent tìm ra không nằm ở logic chính, mà ở vùng biên: phần tử đầu danh sách, phần tử cuối danh sách, danh sách rỗng, số rất nhỏ, số rất lớn. Những trường hợp này hiếm khi xuất hiện trong dữ liệu mẫu của bài tập, nên bản code sai vẫn qua được.
Binary search sai ở cách cập nhật biên, đúng là lỗi off-by-one kinh điển
Bản tìm kiếm nhị phân dùng bộ ba biến low, high, mid quen thuộc và chạy ổn với các ví dụ thường gặp. Khi agent thử phần tử ở đầu hoặc cuối danh sách, phần tử không tồn tại và danh sách rỗng, chương trình bộc lộ lỗi off-by-one cùng cách cập nhật biên chưa đúng. Agent giải thích vì sao điều kiện vòng lặp quan trọng: cập nhật low hoặc high lệch một đơn vị có thể khiến thuật toán nhảy qua đúng phần tử cần tìm. Sau đó nó sửa code, chạy lại cùng bộ test để kiểm chứng và bổ sung các bài test tự động, thứ mà bản gốc không hề có.
Thuật toán này được dạy ở nhiều giáo trình, và lỗi biên của nó cũng nổi tiếng không kém. Việc một bản cài đặt tự viết, nhìn qua thấy hợp lý, vẫn dính lỗi cho thấy kiểm tra bằng mắt và vài ví dụ không đủ.
Stack và Newton-Raphson lộ ra chỗ hiểu thuật toán chưa tới nơi

Bài đổi trung tố sang hậu tố đã chạy được với biểu thức đơn giản như A+B*C thành ABC*+. Lỗi xuất hiện ở biểu thức có ngoặc lồng nhau và toán tử cùng độ ưu tiên. Ca khó nhất là lũy thừa: A^B^C phải hiểu là A^(B^C), tức kết hợp từ phải sang trái, còn code cũ xử lý sai tính kết hợp này. Singh còn yêu cầu agent đi qua từng thao tác stack với biểu thức A*(B+(C-D)); agent chỉ ra lúc nào toán tử được đẩy vào, lúc nào bị lấy ra, và vì sao ngoặc đổi thứ tự tính. Bản sửa có thêm bước kiểm tra biểu thức không hợp lệ.
Bài Newton-Raphson thì lộ ra một kiểu lỗi khác. Căn bậc hai của 25 hay của 2 chạy tốt, nhưng với số rất nhỏ hoặc rất lớn, điều kiện dừng khiến chương trình có thể kết thúc trước khi đủ chính xác, hoặc lặp nhiều hơn cần thiết. Số 0 và số âm cũng không được xử lý. Agent bổ sung kiểm tra đầu vào, chỉnh điều kiện dừng và đặt giới hạn số vòng lặp tối đa để chương trình không chạy vô tận, rồi đối chiếu kết quả với math.sqrt() của Python và giải thích độ lệch về độ chính xác.
Cách dùng đáng giữ lại: tự viết trước, nhờ agent bới lỗi sau
Một nhận định riêng của TekCafe: câu chuyện này dễ bị đọc thành “giao bài tập cho AI”, trong khi chiều ngược lại mới là điều làm nên giá trị. Mọi lỗi kể trên chỉ có ý nghĩa vì sinh viên đã tự dựng thuật toán một lần, nên khi agent chỉ ra off-by-one hay lỗi kết hợp toán tử, người học có sẵn ngữ cảnh để hiểu vì sao. Nếu agent viết hộ từ đầu, bước tự vấp và tự hỏi “sao nó sai” biến mất, và cái còn lại là một bản code đúng mà người học không giải thích nổi.
Có một giới hạn cần nói rõ: đây là trải nghiệm của một người, với ba chương trình nhỏ, và bài gốc không công bố số liệu đo lường nào về mức độ học được. Kết luận hợp lý là phương pháp này đáng thử, chưa phải bằng chứng rằng nó hiệu quả hơn lớp học truyền thống.
Carnegie Mellon đã đưa cách dùng này vào lớp học
Hướng đi này không chỉ nằm trong các bài chia sẻ cá nhân. Carnegie Mellon mở môn 15-113 “Effective Coding with AI” vào học kỳ mùa xuân 2026, do Mike Taylor phụ trách, yêu cầu tiên quyết là 15-112 Fundamentals of Programming and Computer Science, với thời lượng 6 giờ mỗi tuần (3 giờ trên lớp và 3 giờ làm ngoài lớp). Mục tiêu của môn là đánh giá nội dung do AI sinh ra về độ đúng, bảo mật, hiệu năng và khả năng bảo trì, đồng thời chọn công cụ phù hợp với yêu cầu bài toán. Phần chấm điểm nhấn vào nỗ lực và mức hiểu bài, kèm điều kiện sinh viên phải hiểu và giải thích được lựa chọn của mình trong code.
Điểm chung với thí nghiệm ở trên là AI được xem như công cụ buộc người học phải phản biện, thay vì lệnh cấm hay đường tắt. Với sinh viên và người tự học lập trình tại Việt Nam, cách làm này không đòi hỏi gì ngoài một agent và vài bài tập cũ còn lưu trong máy: viết xong, tự chạy thử, rồi nhờ agent tìm đầu vào làm gãy chương trình trước khi coi như hoàn thành.
Nguồn tham khảo: XDA Developers; Carnegie Mellon University – CMU 15-113.







