Ảnh minh hoạ bởi Unsplash
Vài tháng trước, tôi ngồi trong một quán cà phê và nghe lỏm được cuộc trò chuyện của hai cậu sinh viên năm nhất ngành CNTT bàn bên cạnh. Một cậu chép miệng thở dài: "Chắc em bỏ học chuyển ngành quá anh ạ. Học lập trình làm gì nữa khi bây giờ AI code nhoay nhoáy, làm app vài phút là xong. Ra trường lấy đâu ra việc cho F0 (Fresher) như mình làm?".
Nỗi sợ hãi này không hề vô căn cứ. Sự phát triển vũ bão của các công cụ hỗ trợ lập trình (AI Coding Assistants) như GitHub Copilot, Cursor, Tabnine, hay gần đây nhất là Devin đang dấy lên một cuộc tranh luận nảy lửa trên các diễn đàn StackOverflow hay Reddit: Liệu kỷ nguyên của Lập trình viên bằng xương bằng thịt sắp chấm dứt? Để tìm câu trả lời công bằng nhất, không có gì thuyết phục hơn việc trực tiếp đặt AI lên bàn cân thực nghiệm.
Bài viết này sẽ ghi lại toàn bộ quá trình tôi sử dụng AI để xây dựng một dự án ứng dụng web (Web App) nhỏ từ con số 0, qua đó bóc trần sự thật về những gì AI CÓ THỂ LÀM cực tốt, và những khoảng trống tử huyệt mà CHỈ CÓ CON NGƯỜI mới có thể lấp đầy.
Phần 1: Thử Nghiệm Xây Dựng Ứng Dụng Với AI - Điều Kỳ Diệu Xảy Ra
Tôi quyết định xây dựng một ứng dụng "Quản lý công việc cá nhân (To-do List) có tích hợp đồng hồ Pomodoro" bằng ngôn ngữ ReactJS và giao diện TailwindCSS. Tôi sử dụng trình soạn thảo Cursor (một IDE được tích hợp sẵn AI siêu mạnh) để thực hiện bài test này.
1. Giai đoạn sinh mã (Code Generation) - Nhanh như chớp
Thay vì hì hục gõ từng thẻ `
Trong đúng 4 giây, AI xổ ra một khối code dài 150 dòng, hoàn chỉnh cả về logic (State management với useState) lẫn CSS. Tôi copy dán vào, và bùm! Một giao diện tuyệt đẹp hiện lên trên trình duyệt, không có một lỗi cú pháp nào. Nếu tự code tay, tôi sẽ mất khoảng 45 phút cho khối lượng công việc này. AI đã giảm nó xuống còn 4 giây.
2. Giai đoạn tái cấu trúc (Refactoring) và giải thích code
Khi tôi có một hàm tính toán thời gian Pomodoro rất rối rắm, tôi bôi đen hàm đó, nhấn phím tắt `Ctrl + K` và gõ: "Hãy tối ưu lại hàm này cho gọn gàng hơn và giải thích nó hoạt động như thế nào". AI ngay lập tức viết lại hàm bằng các cú pháp ES6 hiện đại nhất, làm cho đoạn code trở nên thanh lịch (elegant) và dễ đọc vô cùng. Nó thậm chí còn tạo ra những bình luận (comments) chỉn chu cho từng dòng.
Đến lúc này, tôi bắt đầu toát mồ hôi. "Thế này thì coder ra rìa thật rồi!". Nhưng sự thật mới chỉ bắt đầu hé lộ ở giai đoạn thứ 3.
Phần 2: Cú Trượt Ngã Của AI - Tử Huyệt Nằm Ở Đâu?
Sau khi xây xong bộ khung cơ bản, tôi bắt đầu yêu cầu AI thực hiện những chức năng phức tạp hơn, có sự liên kết lằng nhằng giữa nhiều file khác nhau trong dự án (Ví dụ: Kết nối To-do list với cơ sở dữ liệu Firebase và gửi email thông báo khi công việc quá hạn). Và đây là lúc AI bắt đầu vấp váp thảm hại.
- Hiện tượng Ảo giác (Hallucination) nguy hiểm: AI rất tự tin sinh ra một đoạn code để gọi API. Nhìn bề ngoài, đoạn code đó trông CỰC KỲ hợp lý, tuân thủ đúng chuẩn. Nhưng khi tôi chạy thử, nó báo lỗi vỡ mặt. Hóa ra, AI đã gọi một thư viện (Library) đã bị ngừng hỗ trợ (Deprecate) từ 3 năm trước, hoặc bịa ra một cái hàm (Function) hoàn toàn không tồn tại trong tài liệu chính thức. Nếu một người không có nền tảng lập trình vững chắc (Non-tech) copy đoạn code này, họ sẽ rơi vào một mê cung lỗi (Dependency Hell) và hoàn toàn bất lực không biết bắt đầu sửa từ đâu.
- Vấn đề về Kiến trúc tổng thể (Architecture): AI giống như một anh thợ xây xây từng viên gạch cực kỳ nhanh và đẹp. Nhưng nó không phải là một Kiến trúc sư (Software Architect). Khi dự án phình to lên hàng chục ngàn dòng code, yêu cầu sự kết nối phức tạp, tối ưu hiệu năng (Performance) và bảo mật (Security), AI hoàn toàn mất phương hướng. Nó không biết cách chia nhỏ cấu trúc thư mục sao cho hợp lý, không đánh giá được việc dùng công nghệ X sẽ tốn chi phí Cloud hơn công nghệ Y như thế nào trong dài hạn.
- Xử lý các bài toán nghiệp vụ kinh doanh (Business Logic) đặc thù: AI có thể viết thuật toán sắp xếp (Bubble sort) hoàn hảo vì nó có nhan nhản trên internet. Nhưng AI không thể hiểu được: "Tại sao trong công ty của bạn, quy trình duyệt hóa đơn lại phải đi qua ông A, rồi chờ 3 ngày mới gửi qua bà B, nhưng nếu hóa đơn trên 1 tỷ thì lại gửi thẳng cho sếp C?". Những logic nghiệp vụ đời thực, oái oăm và đặc thù này yêu cầu con người phải đi họp với các phòng ban, cãi nhau nảy lửa để chốt quy trình, sau đó mới dịch quy trình đó thành code. AI không thể đi họp thay bạn!
Phần 3: Lời Cảnh Tỉnh Về Việc Trở Thành "Copy-Paste Developer"
Cạm bẫy lớn nhất của AI Coding Tools là nó mang lại cảm giác thỏa mãn (Dopamine) tức thì. Lập trình viên rất dễ bị nghiện việc nhấn nút "Chấp nhận (Accept)" dòng code do AI gợi ý mà không thực sự hiểu nó hoạt động như thế nào bên dưới lớp vỏ bọc. Hành động này sẽ dẫn đến một thảm họa kỹ thuật được gọi là Nợ Kỹ Thuật (Technical Debt).
Sẽ có ngày ứng dụng của bạn sập do quá tải, dữ liệu khách hàng bị rò rỉ. Khi bạn mở mã nguồn ra để sửa, bạn hoang mang không hiểu chính ứng dụng của mình viết cái gì, vì 80% trong số đó là do AI viết và bạn đã nhắm mắt copy/paste. Bạn không kiểm soát được đứa con tinh thần của mình nữa.
"Trọng tâm của nghề lập trình sẽ dịch chuyển: Từ việc VIẾT MÃ (Writing Code) sang việc ĐỌC, KIỂM DUYỆT VÀ BẢO TRÌ MÃ (Reading & Reviewing Code)."
AI sẽ đóng vai trò như một thực tập sinh siêu cấp (Super Intern). Nó viết code nháp thô, và bạn với tư cách là kỹ sư trưởng, sẽ làm nhiệm vụ Code Review. Bạn dùng bộ não kinh nghiệm của mình để soi xem đoạn code này có bị lỗi bảo mật SQL Injection không? Vòng lặp này có làm chậm CPU không? Sau đó yêu cầu nó sửa lại.
Phần 4: Sinh Viên IT Và Fresher Nên Làm Gì Bây Giờ?
Nếu bạn đang học ngành lập trình, đừng vứt bỏ giáo trình C++, Cấu trúc dữ liệu và thuật toán vào sọt rác. Ngược lại, nền tảng cơ sở (Fundamentals) lại càng quan trọng hơn bao giờ hết.
- Học cách gỡ lỗi (Debugging): Khi AI sinh ra hàng ngàn dòng code lỗi, kỹ năng cô lập vấn đề, đọc tài liệu (Documentation) tiếng Anh, phân tích luồng chạy của chương trình để tìm ra hạt sạn nhỏ nhất sẽ là vũ khí sống còn phân biệt giữa một thợ gõ code và một kỹ sư thực thụ.
- Viết Test (Kiểm thử): Đừng bao giờ tin tưởng mù quáng vào code của AI. Hãy bắt AI viết Unit Test (Kiểm thử mức hàm) và Integration Test (Kiểm thử tích hợp). Bạn phải xây dựng một hàng rào phòng ngự tự động để đảm bảo rằng code do AI sinh ra không phá hỏng những chức năng đang chạy bình thường khác trong hệ thống.
- Tập trung vào System Design (Thiết kế hệ thống): Rèn luyện tư duy thiết kế kiến trúc phần mềm, xây dựng database lớn, tối ưu hóa hạ tầng đám mây (Cloud Infrastructure). Đây là vùng đất cấm mà AI chưa thể chạm tới được.
Lời kết - Tiếng gọi của thời đại mới:
Máy tính không bao giờ cướp đi công việc của con người; chúng chỉ loại bỏ những phần tẻ nhạt, giải phóng không gian để con người chạm đến những tầng nấc sáng tạo cao hơn. Lập trình viên không chết đi, họ chỉ đang tiến hóa. Giống như việc họa sĩ không biến mất khi máy ảnh ra đời, người lập trình trong 5 năm tới có thể sẽ viết ít code hơn bằng tay, nhưng sẽ tạo ra những phần mềm có sức mạnh gấp 100 lần hiện tại.
Trong bài viết tiếp theo, chúng ta sẽ vượt ra khỏi ranh giới của việc lập trình thông thường, để khám phá một vấn đề kinh doanh vô cùng nhức nhối: Làm thế nào để nhồi nhét hàng ngàn trang tài liệu nội bộ, hợp đồng bí mật của công ty bạn vào bộ não của ChatGPT mà không bị lộ dữ liệu ra ngoài? Đó chính là quyền năng của công nghệ RAG.