Một tình huống đã bắt đầu quen thuộc trong những ngày cuối năm 2026 này: AI vừa viết xong 30 dòng code trong vài giây. Bạn copy, paste, nhấn Run... và nhận được một màn hình lỗi dài hơn cả đoạn code vừa tạo!
Có lẽ đây là một trong những tình huống khá quen thuộc với người mới học lập trình thời AI.
Bạn gặp một vấn đề. Không biết sửa thế nào. Thế là mở ChatGPT, Gemini hoặc một công cụ AI khác và hỏi:
"Viết giúp tôi đoạn code xử lý chức năng đăng nhập bằng PHP."
AI trả lời rất nhanh.
Có code. Có giải thích. Có vẻ chuyên nghiệp. Thậm chí còn có vài dòng chú thích rất đẹp.
Bạn copy toàn bộ vào project, nhấn chạy.
Và...
Fatal error!
Bạn quay lại hỏi AI:
"Sửa lỗi này giúp tôi."
AI đưa ra một phiên bản mới.
Bạn copy tiếp.
Lần này xuất hiện một lỗi khác.
Bạn lại hỏi.
AI lại sửa.
Sau khoảng 20 phút, bạn có một project với rất nhiều đoạn code mới, nhưng không còn chắc đoạn nào đang làm nhiệm vụ gì.
Chào mừng bạn đến với một tình huống rất hiện đại: AI viết code nhanh, nhưng người phải debug vẫn là bạn!
Vì sao code do "giáo sư AI" tạo ra vẫn có thể bị lỗi?
Trước hết, cần hiểu một điều:
AI không trực tiếp nhìn thấy toàn bộ môi trường lập trình của bạn, trừ khi bạn cung cấp thông tin đó hoặc sử dụng công cụ có quyền truy cập project.
Khi bạn hỏi một câu chung chung, AI thường phải dựa vào những thông tin bạn đưa ra và các mẫu code đã học để tạo câu trả lời phù hợp.
Đoạn code có thể đúng trong một ví dụ độc lập, nhưng lại không phù hợp với project hiện tại.
Có một số nguyên nhân phổ biến.
1. AI không biết chính xác cấu trúc project của bạn
Ví dụ, bạn đang có một website PHP sử dụng PDO để kết nối MySQL.
Trong project, bạn khai báo:
$pdo = new PDO(
"mysql:host=localhost;dbname=my_shop",
"root",
""
);Sau đó, bạn nhờ AI viết chức năng lấy danh sách sản phẩm.
AI có thể trả về:
$sql = "SELECT * FROM products";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}Nhìn qua, đoạn code không có gì quá lạ.
Nhưng project của bạn đang sử dụng PDO, còn đoạn code AI vừa tạo lại sử dụng MySQLi.
Đây là hai cách làm việc khác nhau.
Biến $pdo không phải đối tượng kết nối MySQLi. Nếu bạn thay $conn bằng $pdo rồi truyền vào mysqli_query(), PHP có thể báo lỗi kiểu dữ liệu vì hàm này cần một kết nối MySQLi.
Nói đơn giản:
Bạn đang có một chiếc chìa khóa PDO, nhưng AI lại đưa cho bạn ổ khóa MySQLi.
Cả hai đều có thể mở cửa trong thế giới của chúng, nhưng không thể tùy tiện dùng lẫn nhau.
Nếu project đang sử dụng PDO, đoạn code nên tiếp tục sử dụng PDO:
$sql = "SELECT * FROM products";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($products as $product) {
echo htmlspecialchars($product['name']);
}Đây vẫn là ví dụ đơn giản. Trong project thực tế, bạn cần kiểm tra dữ liệu, xử lý lỗi và bảo đảm cách hiển thị phù hợp với ứng dụng.
Bài học: Khi nhờ AI viết code, hãy cho nó biết project đang sử dụng công nghệ gì, thư viện nào và cấu trúc hiện tại ra sao.
2. AI tự giả định những thứ không tồn tại
Đây là một lỗi khá thú vị.
Bạn yêu cầu AI viết chức năng gửi email.
AI tạo code và gọi một hàm:
sendWelcomeEmail($email);Nhìn rất gọn gàng.
Nhưng trong project của bạn không hề có hàm sendWelcomeEmail().
Khi chạy, PHP có thể báo:
Fatal error: Uncaught Error:
Call to undefined function sendWelcomeEmail()AI đã sử dụng một hàm có vẻ hợp lý, nhưng không có nghĩa hàm đó đã tồn tại trong project của bạn.
Tình huống tương tự cũng xảy ra với:
- Một thư viện chưa được cài đặt.
- Một file mà project không có.
- Một biến chưa được khai báo.
- Một API không tồn tại.
- Một phương thức không được hỗ trợ trong phiên bản thư viện đang sử dụng.
AI có thể tạo ra code nhìn rất thuyết phục, nhưng bạn vẫn phải xác minh những thành phần mà nó sử dụng.
3. Code đúng nhưng sai phiên bản
Bạn tìm được một đoạn code trên mạng, AI cũng có thể đưa ra một cách viết tương tự.
Nhưng project của bạn đang sử dụng phiên bản PHP, Python hoặc thư viện khác với môi trường mà đoạn code đó giả định.
Ví dụ:
Một thư viện Python có thể thay đổi tên hàm hoặc cách sử dụng giữa các phiên bản.
Một đoạn code chạy được với phiên bản mới chưa chắc chạy được với phiên bản cũ.
Vì vậy, khi yêu cầu AI hỗ trợ, nên cung cấp:
- Phiên bản ngôn ngữ lập trình.
- Phiên bản framework hoặc thư viện.
- Hệ điều hành nếu có liên quan.
- Thông báo lỗi đầy đủ.
Đừng chỉ nói "Code không chạy".
Đó là thông tin hơi ít, giống như gọi thợ sửa xe rồi chỉ nói: "Xe em không ổn, anh xem giúp!"
4. AI không biết dữ liệu đầu vào thực tế
Giả sử bạn yêu cầu AI viết chức năng tính tổng tiền:
$total = $price * $quantity;Về mặt cú pháp, đoạn code này không có gì sai.
Nhưng nếu $price nhận được giá trị "abc" thay vì một con số, chương trình có thể gặp vấn đề.
Nếu $quantity không tồn tại, bị rỗng hoặc có giá trị không hợp lệ, kết quả cũng có thể không như mong muốn.
AI thường tạo code dựa trên những giả định về dữ liệu.
Trong khi đó, người dùng thật có thể nhập:
- Bỏ trống ô dữ liệu.
- Nhập chữ thay vì số.
- Nhập số âm.
- Nhập ký tự đặc biệt.
- Gửi dữ liệu không đúng định dạng.
Code chạy với dữ liệu đẹp chưa chắc chạy tốt với dữ liệu ngoài đời.
Đó là lý do chúng ta luôn cần kiểm tra dữ liệu đầu vào.
5. AI sửa một lỗi nhưng vô tình tạo ra lỗi khác
Đây là tình huống có liên quan trực tiếp đến Technical Debt trong bài trước.
Bạn đưa một đoạn code cho AI và yêu cầu sửa lỗi.
AI thay đổi một hàm.
Nhưng hàm đó lại đang được sử dụng ở ba nơi khác nhau.
Sau khi sửa, một chức năng hoạt động tốt hơn, nhưng hai chức năng còn lại bắt đầu lỗi.
Vấn đề không hẳn nằm ở việc AI viết code kém.
Có thể AI chưa biết những nơi khác đang phụ thuộc vào hàm đó.
Một đoạn code không chỉ cần chạy đúng một mình. Nó còn phải hoạt động đúng trong toàn bộ project.
Một ví dụ thực tế: Đừng chỉ đưa câu "Code bị lỗi" cho AI
Giả sử bạn đang làm website quản lý sản phẩm bằng PHP.
Bạn yêu cầu AI:
"Viết chức năng hiển thị danh sách sản phẩm."
AI trả về code nhưng khi chạy lại báo lỗi.
Lúc này, bạn có hai cách hỏi.
Cách hỏi thứ nhất:
Code của tôi bị lỗi.
Sửa giúp tôi.
Thông tin này quá ít.
AI không biết bạn đang dùng PDO hay MySQLi, không biết cấu trúc database, cũng không biết lỗi xuất hiện ở dòng nào.
Nó chỉ có thể đoán.
Cách hỏi thứ hai:
Tôi đang làm website quản lý sản phẩm bằng PHP.
Thông tin project:
- PHP 8.2
- MySQL
- Kết nối database bằng PDO
- File kết nối database là config/database.php
- Biến kết nối hiện tại là $pdo
Tôi muốn hiển thị danh sách sản phẩm từ bảng products.
Đây là code hiện tại:
[Đưa code vào đây]
Đây là thông báo lỗi đầy đủ:
[Đưa lỗi vào đây]
Hãy giúp tôi:
1. Xác định nguyên nhân lỗi.
2. Giải thích vì sao lỗi xuất hiện.
3. Đề xuất cách sửa phù hợp với PDO.
4. Không tự ý chuyển project sang MySQLi.
5. Giữ nguyên cấu trúc project nếu không cần thiết phải thay đổi.
6. Chỉ rõ những dòng code cần sửa.
Cách hỏi thứ hai cung cấp nhiều thông tin hơn.
AI có cơ hội đưa ra câu trả lời phù hợp với project thực tế thay vì tạo một ví dụ hoàn toàn mới.
Tất nhiên, câu trả lời vẫn cần được kiểm tra. Prompt tốt không bảo đảm code sẽ đúng 100%.
Quy trình 6 bước khi sử dụng code do AI tạo ra
Đây là phần mà lính mới "toàn thấy màu hồng" nên ghi nhớ.
Không cần sợ AI viết code. Nhưng đừng giao toàn bộ quyền quyết định cho nó.
Bước 1: Nói rõ môi trường lập trình
Trước khi yêu cầu viết code, hãy cung cấp những thông tin cần thiết:
- Ngôn ngữ và phiên bản.
- Framework đang sử dụng.
- Thư viện liên quan.
- Cấu trúc file.
- Database hoặc phần cứng nếu có.
Ví dụ, thay vì nói:
"Viết code đọc cảm biến độ ẩm."
Hãy nói:
"Tôi sử dụng Arduino UNO R3 và cảm biến độ ẩm đất có ngõ ra Analog. Hãy viết chương trình đọc giá trị từ chân A0 và hiển thị trên Serial Monitor."
Càng có nhiều thông tin liên quan, AI càng ít phải đoán.
Bước 2: Yêu cầu giải thích code
Đừng chỉ yêu cầu AI đưa ra code hoàn chỉnh.
Hãy yêu cầu giải thích:
- Biến nào dùng để làm gì?
- Hàm nào thực hiện nhiệm vụ nào?
- Dữ liệu đi từ đâu đến đâu?
- Đoạn code phụ thuộc vào thư viện nào?
- Có cần cài đặt thêm thành phần gì không?
Nếu có đoạn code bạn không hiểu, hãy hỏi riêng đoạn đó.
Bạn không cần hiểu toàn bộ một framework phức tạp ngay lập tức, nhưng ít nhất phải hiểu phần code mà mình định đưa vào project.
Bước 3: Kiểm tra những thành phần mà code sử dụng
Trước khi chạy, hãy kiểm tra:
- File được gọi có tồn tại không?
- Hàm được gọi đã được khai báo chưa?
- Thư viện đã cài đặt chưa?
- Tên biến có đúng với project hiện tại không?
- Phiên bản thư viện có tương thích không?
- Cách kết nối có phù hợp với phần cứng không?
Đây là bước giúp phát hiện nhiều lỗi trước khi chương trình kịp crash.
Bước 4: Chạy thử từng phần nhỏ
Đừng copy 500 dòng code vào project rồi nhấn Run.
Nếu có lỗi, bạn sẽ rất khó biết nó xuất phát từ đâu.
Hãy chia nhỏ:
- Kiểm tra kết nối database.
- Kiểm tra truy vấn SQL.
- Kiểm tra dữ liệu trả về.
- Kiểm tra cách hiển thị dữ liệu.
Với Arduino cũng vậy:
- Đọc cảm biến.
- Kiểm tra giá trị trên Serial Monitor.
- Điều khiển LED hoặc tín hiệu đầu ra.
- Sau đó mới kết hợp với máy bơm.
Mỗi bước chạy ổn định rồi mới chuyển sang bước tiếp theo.
Bước 5: Kiểm tra cả trường hợp bất thường
Đừng chỉ thử trường hợp đẹp nhất.
Ví dụ, với chức năng đăng nhập:
- Nhập đúng tài khoản và mật khẩu.
- Nhập sai mật khẩu.
- Bỏ trống tài khoản.
- Bỏ trống mật khẩu.
- Nhập ký tự đặc biệt.
- Truy cập trực tiếp vào trang cần đăng nhập.
Với hệ thống tưới cây:
- Đất khô.
- Đất đủ ẩm.
- Cảm biến không đọc được giá trị hợp lệ.
- Bình nước hết.
- Nguồn điện bị ngắt rồi cấp lại.
Một chương trình chỉ hoạt động trong điều kiện hoàn hảo chưa phải một chương trình đáng tin cậy.
Bước 6: Lưu phiên bản trước khi thay đổi lớn
Nếu đang làm một project có nhiều chức năng, hãy dùng Git để lưu lại phiên bản trước khi đưa code mới vào.
Ví dụ:
git add .
git commit -m "Before adding AI generated feature"Sau khi thêm tính năng và kiểm tra xong:
git add .
git commit -m "Add product listing feature"Nếu thay đổi mới gây lỗi, bạn có thể so sánh các phiên bản để tìm phần code đã thay đổi.
Đừng để đến khi project hỏng mới nhớ ra rằng mình chưa từng lưu lại phiên bản ổn định.
Một số dấu hiệu cho thấy bạn đang phụ thuộc AI quá nhiều
AI là công cụ rất hữu ích. Nhưng có một ranh giới giữa việc sử dụng AI để học và việc để AI làm thay toàn bộ quá trình suy nghĩ.
Bạn thử kiểm tra:
- Bạn copy code nhưng không hiểu các biến và hàm chính.
- Bạn không biết code đang sử dụng thư viện nào.
- Khi xuất hiện lỗi, bạn chỉ gửi lỗi cho AI mà không đọc thông báo.
- Bạn liên tục thay code theo đề xuất mới mà không kiểm tra thay đổi cũ.
- Bạn không biết cách chạy thử từng phần.
- Bạn không thể giải thích chức năng mình vừa thêm vào project.
- Bạn không biết cách quay lại phiên bản code trước đó.
Nếu đánh dấu nhiều mục, có lẽ bạn nên dành thêm thời gian học cách đọc và kiểm tra code.
Không phải để từ bỏ AI.
Mà để sử dụng AI hiệu quả hơn.
Có nên để AI viết toàn bộ project không?
Có thể, tùy mục đích và mức độ phức tạp.
Với một chương trình nhỏ, AI có thể giúp bạn tạo bộ khung rất nhanh.
Ví dụ:
- Một ứng dụng tính toán đơn giản.
- Một trang HTML giới thiệu sản phẩm.
- Một script Python đổi tên file.
- Một chương trình Arduino đọc cảm biến.
Nhưng khi project có database, đăng nhập, phân quyền, thanh toán, API hoặc điều khiển phần cứng, việc chỉ copy code mà không kiểm tra sẽ tạo ra nhiều rủi ro.
Đặc biệt, đừng đưa mật khẩu database, API key, token truy cập hoặc dữ liệu cá nhân nhạy cảm vào một cuộc trò chuyện AI không được phép xử lý những thông tin đó.
Với code liên quan đến bảo mật, bạn cần kiểm tra kỹ hơn nữa.
AI có thể hỗ trợ bạn viết code, giải thích lỗi và đề xuất cách sửa.
Nhưng trách nhiệm kiểm tra kết quả cuối cùng vẫn thuộc về người phát triển sản phẩm.
Checklist: Trước khi copy code từ AI
- Đã cung cấp đúng ngôn ngữ và phiên bản đang sử dụng.
- Đã cho AI biết cấu trúc project liên quan.
- Đã kiểm tra thư viện và hàm mà code sử dụng.
- Đã đọc phần giải thích code.
- Đã chạy thử từng phần nhỏ.
- Đã kiểm tra cả trường hợp dữ liệu bất thường.
- Đã lưu phiên bản cũ trước khi thay đổi lớn.
- Không đưa mật khẩu hoặc thông tin bí mật vào prompt.
Sự thật thú vị
Trước đây, lập trình viên có thể mất hàng giờ để tìm một đoạn code mẫu phù hợp trên Google, Stack Overflow hoặc tài liệu chính thức.
Ngày nay, AI có thể tạo ra đoạn code trong vài giây.
Nhưng có một điều không thay đổi:
Code chạy được mới chỉ là bước đầu. Code chạy đúng, an toàn và phù hợp với project mới là điều quan trọng.
AI giúp chúng ta giảm thời gian gõ code.
Nhưng không thể thay thế hoàn toàn việc hiểu vấn đề, kiểm tra giả định và chịu trách nhiệm với sản phẩm.
Nói ...tào lao một chút:
Ngày xưa, chúng ta copy code từ Stack Overflow rồi cầu nguyện.
Ngày nay, chúng ta copy code từ AI rồi... cầu nguyện có thêm phần giải thích!
FAQ nhanh
AI có cố tình viết code sai không?
Không. AI không có ý định cố tình phá project của bạn. Nhưng nó có thể tạo ra câu trả lời không chính xác, sử dụng API không tồn tại hoặc giả định sai về môi trường.
Code AI tạo ra có thể dùng cho sản phẩm thật không?
Có thể, nếu được kiểm tra, thử nghiệm và đánh giá phù hợp. Không nên đưa code vào môi trường thật chỉ vì nó chạy được một lần trên máy cá nhân.
Có nên yêu cầu AI viết lại toàn bộ code khi gặp lỗi không?
Không nên vội. Hãy tìm nguyên nhân trước. Nếu chỉ một hàm bị lỗi, có thể chỉ cần sửa hàm đó. Viết lại toàn bộ đôi khi khiến bạn tạo thêm nhiều lỗi mới.
Người mới học lập trình có nên dùng AI không?
Có. AI có thể giải thích khái niệm, đưa ví dụ, gợi ý cách debug và giúp bạn học nhanh hơn. Nhưng hãy yêu cầu giải thích và tự thực hành lại thay vì chỉ copy kết quả.
Làm sao biết code AI tạo ra có an toàn không?
Không có một câu trả lời đơn giản cho mọi trường hợp. Bạn cần kiểm tra cách xử lý dữ liệu đầu vào, xác thực, phân quyền, truy vấn database, thông tin bí mật và các phụ thuộc bên ngoài. Với hệ thống quan trọng, nên có quy trình kiểm thử và review bảo mật riêng.
Bước tiếp theo
Chúng ta vừa đi qua ba vấn đề khá gần nhau:
- Project càng lớn càng khó kiểm soát.
- Technical Debt khiến việc sửa code ngày càng tốn công.
- Code do AI tạo ra có thể làm những vấn đề đó xuất hiện nhanh hơn nếu chúng ta không kiểm tra.
Nhưng có một chuyện khác cũng rất đáng nói.
Khi mới học lập trình, nhiều người thường nhìn thấy những sản phẩm rất lớn, những lập trình viên rất giỏi và những đoạn code cực kỳ phức tạp.
Rồi họ bắt đầu tự hỏi:
"Mình học mãi vẫn còn nhiều thứ không biết. Có phải mình không đủ giỏi để làm nghề này?"
Nếu bạn từng có suy nghĩ như vậy, bài tiếp theo có lẽ sẽ khiến bạn thấy dễ chịu hơn một chút.
Programmer Impostor Syndrome là gì? Vì sao càng học lập trình, đôi khi chúng ta càng cảm thấy mình chẳng biết gì?
Và biết đâu, bạn sẽ nhận ra rằng cảm giác đó không chỉ xuất hiện ở người mới học code.