Trang đăng nhập hiển thị chính xác. REST API trả về mã 200 OK. SaaS boilerplate khởi chạy mà không gặp một lỗi linting nào. Chỉ trong một buổi chiều, bạn đã hoàn thành công việc mà trước đây phải mất cả tuần. Các trợ lý lập trình AI đã tái định hình việc phát triển phần mềm một cách hoàn toàn đến mức việc xây dựng các tính năng giờ đây cảm giác ít giống như kỹ thuật (engineering) mà giống như đang gọi món từ một thực đơn hơn. Sự tiện lợi đó là có thật. Nhưng nó đi kèm với một cái giá mà chỉ xuất hiện sau đó, thường là khi rủi ro ở mức cao nhất. Các lập trình viên đã bắt đầu gọi cái bẫy này là Vibe Coding, và cái tên này đã lột tả vấn đề một cách hoàn hảo.

Vòng lặp Sao chép-Dán

Đây là cách vòng lặp đó thực sự diễn ra. Bạn đặt con trỏ vào cửa sổ chat và mô tả một tính năng bằng tiếng Anh bình thường. Một khối mã xuất hiện ngay lập tức. Bạn bôi đen, sao chép, chuyển lại trình soạn thảo, dán và lưu. Terminal không báo lỗi. Trình duyệt hiển thị bố cục đúng. Bạn commit thay đổi và mở ticket tiếp theo. Không có sự dừng lại nào để truy vết logic. Không có sự kiểm tra các dependency được import. Không có câu hỏi về việc liệu thư viện bên thứ ba đó có thực sự cần thiết hay một công cụ từ thư viện tiêu chuẩn (standard library) có thể đáp ứng được không. Quy trình làm việc đơn giản là hỏi, sao chép, dán, chạy. Nếu bề mặt trông có vẻ đúng, thì chiều sâu cũng được mặc định là đúng. Đây không phải là lập trình theo bất kỳ nghĩa thực thụ nào. Đó là việc lắp ráp các bộ phận đúc sẵn mà không đọc hướng dẫn sử dụng. Giống như bất kỳ lối tắt nào, nó sẽ hoạt động cho đến đúng thời điểm nó không còn hoạt động nữa.

Mất kiểm soát vào thời điểm tồi tệ nhất

Khi lỗi xảy ra trên môi trường production, nó sẽ rơi vào bàn làm việc của bạn, chứ không phải của AI. Vào lúc hai giờ sáng, chatbot không hề đăng nhập vào nền tảng observability của bạn. Nhưng bạn thì có. Nếu bạn chưa bao giờ đọc mã mà mình đã triển khai, bạn không thể lý giải được sự cố của nó. Bạn sẽ phải grep qua những tệp mà mình không hiểu, cố gắng vá lỗi logic mà mình chưa từng học qua. Cảm giác đó thật mất phương hướng. Một lập trình viên tự viết các cấu trúc của riêng mình sẽ xây dựng được một bản đồ tư duy về hệ thống. Họ biết đâu là những điểm nhạy cảm và giả định nào đang giữ cho nền tảng vững chắc. Vibe Coding xóa bỏ bản đồ đó. Bạn trở thành một người vận hành các hộp đen (black boxes). Cú pháp thì đúng, bản demo gây ấn tượng với khách hàng, nhưng hệ thống đó không thực sự thuộc về bạn. Quyền sở hữu đòi hỏi sự thấu hiểu, và sự thấu hiểu cần có thời gian. Bỏ qua bước đó không làm mất đi chi phí. Nó chỉ chuyển chi phí đó sang thời điểm đắt đỏ nhất có thể.

Mã chạy được không phải là mã an toàn

Các mô hình AI tạo ra phản hồi dựa trên các mẫu tìm thấy trong dữ liệu huấn luyện. Những mẫu đó bao gồm rất nhiều ví dụ lỗi thời và không an toàn. Hàm đăng nhập mà bạn vừa dán có thể đang lưu trữ mật khẩu bằng một hàm băm nhanh nhưng đã lỗi thời thay vì một hàm băm chậm có muối (salted slow hash) vì dữ liệu huấn luyện ưu tiên các đoạn mã từ các diễn đàn cũ. Endpoint API có thể nối trực tiếp đầu vào của người dùng vào một chuỗi SQL thô vì bạn yêu cầu một ví dụ đơn giản và mô hình đã đáp ứng. Thông tin xác thực cơ sở dữ liệu của bạn có thể bị rò rỉ vào JavaScript phía client vì AI không biết rằng bạn đang xây dựng một frontend serverless chứ không phải một backend route.

Việc thiếu kiểm tra tính hợp lệ của đầu vào (input validation) là rất phổ biến. Trình xử lý form được tạo ra mặc định rằng người dùng sẽ lịch sự và không kiểm tra độ dài chuỗi, phạm vi số, hoặc loại tệp trước khi chuyển dữ liệu sâu hơn vào stack. Các kiểm tra xác thực có thể dựa vào token phía client mà không có sự xác minh phía server thích hợp, tạo ra một cảm giác an toàn giả tạo. Một AI có thể tạo ra một session cookie mà không có các cờ HttpOnly hoặc Secure vì dữ liệu huấn luyện của nó bao gồm các câu trả lời cũ trên Stack Overflow. Mỗi vấn đề này đều vô hình trong một buổi demo. Ứng dụng vẫn chạy. Người dùng đăng nhập. Dữ liệu luân chuyển. Nhưng kẻ tấn công chỉ cần một điểm truy cập không được canh phòng. Xem xét đầu ra của AI dưới lăng kính bảo mật không phải là sự hoang tưởng. Đó là tiêu chuẩn cơ bản cho phần mềm chuyên nghiệp.

Cái giá của sự thiếu nhất quán

Một codebase cũng là một câu chuyện. Nó dạy cho các thành viên mới trong nhóm cách mọi thứ nên được thực hiện. Vibe Coding làm phân mảnh câu chuyện đó thành hàng tá phương ngữ mâu thuẫn nhau. Tính năng bạn xây dựng hôm qua sử dụng React hooks dạng functional với các state reducers rõ ràng. Tính năng hôm nay, được tạo ra từ một câu lệnh (prompt) hơi khác một chút, lại dùng các class components vì mô hình mặc định theo một pattern cũ hơn. Lớp API chuyển đổi giữa các stub được tạo bởi OpenAPI và các trình xử lý route được viết tay. Quy ước đặt tên trôi dạt giữa camelCase và snake_case. Việc xử lý lỗi biến mất trong tệp này nhưng lại xuất hiện dưới dạng các khối try-catch lồng nhau rườm rà ở tệp khác.

Qua nhiều tuần, dự án trở thành một cuộc khai quật khảo cổ. Bạn không thể thay đổi một module một cách an toàn vì không biết module do AI tạo ra ngay cạnh đó đang dựa trên những giả định nào. Việc tái cấu trúc (refactoring) biến thành một trò chơi đập chuột chậm chạp và đầy rủi ro. Hệ thống vẫn biên dịch được, nhưng nó không còn sự gắn kết. Khả năng bảo trì chết dần chết mòn bởi hàng ngàn đoạn mã được dán vào một cách vụn vặt.

Biến AI thành một người thầy

Việc học thực sự diễn ra khi bạn chất vấn kết quả đầu ra. Hãy đối xử với AI như một lập trình viên senior — người viết code rất nhanh nhưng vẫn cần được review code. Hãy hỏi tại sao nó lại chọn đệ quy thay vì vòng lặp để duyệt cây đó. Hãy hỏi liệu có cách nào tiết kiệm bộ nhớ hơn mà vẫn xử lý tốt các trường hợp biên (edge cases) hay không. Hãy hỏi điều gì sẽ xảy ra khi đầu vào là null, khi yêu cầu mạng bị quá hạn (timeout), hoặc khi hai người dùng cùng kích hoạt hàm đó một lúc. Hãy bắt nó giải thích logic từng dòng một, giống như cách bạn đang xem xét một pull request của một đồng nghiệp junior.

Khi bạn buộc mô hình phải giải trình cho các lựa chọn của mình, bạn cũng đang buộc bản thân phải hiểu chúng. Điều này thay đổi hoàn toàn cục diện. AI không còn là chế độ lái tự động nữa mà trở thành một gia sư. Mục tiêu không phải là bạn không tự viết một dòng code nào. Mục tiêu là chỉ đưa vào sản phẩm những đoạn mã mà bạn hiểu rõ hoàn toàn, ngay cả khi trợ lý AI là người soạn thảo phiên bản đầu tiên.

Những kỹ năng thực sự quan trọng vào lúc này

Việc viết cú pháp đang trở nên rẻ hơn từng ngày. Khả năng đọc và tư duy là