Lập trình thời AI Bài 2 Ảo giác của việc copy-paste code: Vì sao bạn nghĩ mình hiểu nhưng thực ra không hiểu?
1. Hiện tượng "Ảo giác năng lực" (Illusion of Competence)
Khi bạn ném đề bài vào AI, nhận về một đoạn mã hoàn chỉnh, ấn Run và thấy output xanh lè (Pass test), não bộ sẽ tự động kích hoạt cơ chế tự đánh lừa: "À, bài này mình làm được rồi, logic cũng đơn giản thôi."
Thực tế, có sự khác biệt rất lớn giữa hai trạng thái não bộ:
- Khả năng Nhận diện (Recognition): Đọc lướt qua code AI viết, thấy các từ khóa quen thuộc (
for,if-else,map,async/await) và cảm thấy nó hợp lý. Quá trình này tiêu tốn rất ít năng lượng não. - Khả năng Truy xuất & Tái tạo (Recall & Reconstruction): Tự xây dựng mô hình dữ liệu trong đầu, tự quản lý trạng thái biến, tự lường trước các trường hợp lỗi từ một trang giấy trắng. Quá trình này đòi hỏi nỗ lực tư duy thực sự (Cognitive Load).
Việc đọc hiểu một đoạn code có sẵn dễ hơn gấp 10 lần việc tự tay thiết kế và viết ra nó. Nhầm lẫn giữa việc "đọc hiểu sơ qua" và "làm chủ kiến thức" chính là cái bẫy lớn nhất của người học hiện nay.
2. Ba rủi ro chết người khi copy-paste code từ AI
- "Nợ nhận thức" (Cognitive Debt) tích lũy: Bạn giải quyết được bài tập hôm nay mà không tích lũy thêm tế bào thần kinh nào cho tư duy giải thuật. Đến khi dự án phình to thành hàng chục file đan xen, bạn mất hoàn toàn khả năng định hình hệ thống.
- Bỏ qua bài toán biên (Blind to Edge Cases): AI thường giải quyết rất tốt "Happy Path" (kịch bản lý tưởng). Tuy nhiên, các lỗi thực tế như: race condition (tranh chấp tài nguyên), tràn bộ nhớ, kết nối mạng chập chờn, dữ liệu đầu vào bị null/sai kiểu... thường bị bỏ qua nếu người dùng không có kiến thức nền để kiểm tra.
- Tê liệt khi AI "bó tay" (Prompt Loop Paralyzation): Khi code bị lỗi, thay vì đọc log hoặc debug từng dòng, bạn tiếp tục copy lỗi ném lại cho AI. AI sửa chỗ này lại hỏng chỗ khác, tạo thành một vòng lặp luẩn quẩn và bạn hoàn toàn bất lực vì không hiểu gốc rễ vấn đề nằm ở đâu.
3. Case Study thực tế: Bài toán bẫy hiệu năng ( vs )
Giả sử bạn cần tìm các phần tử trùng nhau giữa hai danh sách lớn (100.000 phần tử mỗi bên).
Đoạn code AI có thể tạo ra (nhìn rất ngắn gọn, chạy đúng với test nhỏ 10 phần tử):
# Happy path: Code ngắn, dễ đọc, pass test trên lớp
def find_duplicates(list_a, list_b):
return [item for item in list_a if item in list_b]
Vấn đề tiềm ẩn:
- Cú pháp
if item in list_bvới List có độ phức tạp là . - Tổng độ phức tạp thuật toán là . Với mỗi danh sách 100.000 phần tử, hệ thống phải thực hiện xấp xỉ 10 tỷ phép tính, gây treo server ngay lập tức trên môi trường Production.
Giải pháp chuẩn của kỹ sư hiểu bản chất:
# Chuyển list_b sang Hash Set để tra cứu với độ phức tạp O(1)
def find_duplicates(list_a, list_b):
set_b = set(list_b) # Chi phí O(m)
return [item for item in list_a if item in set_b] # Tổng độ phức tạp giảm xuống O(n + m)
Nếu chỉ nhìn code chạy được với dữ liệu mẫu nhỏ ở trường, người học sẽ không bao giờ nhận ra quả bom nổ chậm về hiệu năng này.
4. Quy tắc "Bàn tay sạch" (Clean-room Rule) để tự cứu mình
Để biến AI thành đòn bẩy thay vì chiếc nạng kìm hãm, hãy áp dụng quy trình học tập sau:
- Bước 1: Tự nháp giải thuật (No-AI Draft): Trước khi mở AI, hãy vẽ luồng dữ liệu, viết mã giả (pseudocode) hoặc vẽ sơ đồ khối ra giấy trong ít nhất 10–15 phút.
- Bước 2: Sử dụng AI để đối chiếu: Đưa bài toán cho AI và so sánh cách tiếp cận của AI với bản nháp của bạn. Tự đặt câu hỏi: Vì sao AI dùng cấu trúc dữ liệu này mà không dùng cách của mình?
- Bước 3: Quy tắc 5 phút gõ lại: Đóng cửa sổ AI, tự tay gõ lại giải pháp trên màn hình code của bạn. Nếu bạn không thể tự gõ lại và giải thích được từng dòng, nghĩa là bạn chưa thực sự hiểu.
All Rights Reserved