Lập trình Vibe
Lập trình Vibe là gì?
Vibe coding là một phương pháp lập trình được hỗ trợ bởi AI do Andrej Karpathy giới thiệu vào năm 2024/2025. Với lập trình vibe, bạn mô tả những gì bạn muốn bằng các prompt ngôn ngữ tự nhiên và thường thì các mô hình ngôn ngữ lớn (LLMs) sẽ tạo ra phần lớn, thường là toàn bộ, mã hoạt động cho bạn. Nếu bạn có thời gian, hãy xem Nghệ thuật Lập trình Vibe do Rick Rubin chuyển thể để tìm hiểu thêm về con đường lập trình vibe.
Một lợi thế lớn của phương pháp mới này là tính dễ tiếp cận vì những người không có kinh nghiệm lập trình vẫn có thể xây dựng dự án, trong khi các nhà phát triển có kinh nghiệm có thể nhanh chóng phác thảo ý tưởng mới trước khi cam kết hoàn toàn với chúng. Điều này đặc biệt hữu ích cho các startup. Điểm hạn chế là các nhà phát triển rất có thể sẽ không hiểu hoàn toàn cách hoạt động của mã được tạo ra. Đối với các dự án phụ nhỏ, điều này chấp nhận được, nhưng đối với phần mềm ở mức sản xuất thì nó có thể dẫn đến vấn đề lâu dài và nợ kỹ thuật.
Có rất nhiều công cụ giúp cho lập trình vibe mượt mà hơn. Cursor IDE, Claude Code CLI, GitHub Copilot, Loveable, Replit, v0 và những công cụ khác cho phép bạn làm việc với AI trực tiếp trong môi trường của mình hoặc cung cấp giao diện chuyên dụng cho lập trình vibe. Cá nhân, tôi chủ yếu dùng Cursor IDE và Claude Code CLI cho những dự án này.
Nhưng có điều này. Những công cụ và mô hình này tốn tiền. Với lập trình truyền thống, bạn chủ yếu trả bằng thời gian của mình. Với lập trình vibe, bạn trả bằng ví tiền. Và nếu bạn không biết mình đang làm gì, bạn sẽ trả bằng cả ví tiền lẫn thời gian. Mỗi dự án trên trang này tốn khoảng $10 đến $20 để xây dựng. Điều đó cộng dồn nếu bạn thử nghiệm nhiều. Tôi nghĩ khi các mô hình này cải thiện và hiệu quả hơn, chi phí sẽ giảm dần. Hiện tại, đó là điều cần cân nhắc khi quyết định liệu lập trình vibe có phù hợp với dự án của bạn hay không.
Tò mò về những gì khả thi, tôi đã thử lập trình vibe và tạo trang này để khám phá nguyên lý thông qua các dự án thực tế. Tôi không chỉ xây dựng sản phẩm, tôi đang thử nghiệm và chứng minh xem lập trình vibe thực tế có thể làm được gì. Việc này chỉ cho vui, nhưng nó cung cấp một cái nhìn về cách lập trình có thể trông như thế nào trong tương lai khi các mô hình tiếp tục cải thiện.
Định lý Con Khỉ Vô Hạn
Bạn có từng nghe về Định lý Con Khỉ Vô Hạn chưa? Đó là một thí nghiệm tư duy triết học nói rằng nếu bạn cho vô hạn con khỉ vô hạn máy đánh chữ và vô hạn thời gian, cuối cùng một trong số chúng sẽ tạo ra toàn bộ tác phẩm của Shakespeare chỉ bằng cách gõ ngẫu nhiên trên bàn phím.
Nghe có vẻ vô lý, phải không? Nhưng đây là phần kỳ lạ. Lập trình vibe hơi giống như vậy, chỉ khác là thay vì khỉ thì ta có các mô hình AI, thay vì máy đánh chữ thì ta có ngôn ngữ lập trình, và thay vì Shakespeare thì ta có phần mềm hoạt động.
Hãy nghĩ mà xem. Các mô hình ngôn ngữ lớn được huấn luyện trên hàng tỷ dòng mã, các mẫu và ví dụ. Khi bạn đưa cho một LLM một prompt, nó không thực sự “suy nghĩ” qua vấn đề từng bước như một lập trình viên con người sẽ làm. Thay vào đó, nó dự đoán token tiếp theo có khả năng xuất hiện nhất dựa trên các mẫu nó học được trong quá trình huấn luyện. Về cơ bản nó đang đưa ra các phỏng đoán có cơ sở bằng cách sinh mã dựa trên những gì có vẻ đúng về mặt thống kê.
Và bằng cách nào đó, thường thì nó hoạt động. Mô hình xuất ra mã thực sự biên dịch được, chạy được, và giải quyết vấn đề của bạn. Không phải thông qua sự hiểu biết, mà là thông qua việc khớp mẫu xác suất ở quy mô cực lớn. Nó giống như trình tạo văn bản ngẫu nhiên tinh vi nhất của vũ trụ tìm thấy câu trả lời “đúng”. Nhưng ở đây, khác biệt là tốc độ. Những con khỉ đó sẽ cần vô tận thật sự. AI của bạn? Đạt được điều đó trong vài giây hoặc vài phút.
Vì vậy, theo một cách nào đó, khi bạn sử dụng lập trình vibe, bạn đang khai thác hàng triệu dòng mẫu mã, được chưng cất vào một mô hình, để tạo ra giải pháp. Đó không phải là giải quyết vấn đề có ý thức, mà là phép màu thống kê. Và chính vì vậy mà nó mạnh mẽ đến vậy và, dĩ nhiên, lý do tại sao hiểu mã thực sự làm gì vẫn rất quan trọng.
Câu hỏi quan trọng hơn câu trả lời
Có điều quan trọng thường bị bỏ qua. Lập trình vibe không phải là để có được bất kỳ câu trả lời nào, mà là để đặt câu hỏi đúng. Hãy nghĩ về Siêu máy tính Deep Thought từ Hướng Dẫn Du Hành Cho Người Đi Nhờ Trên Dải Ngân Hà. Nó đã dành hàng triệu năm để tính toán câu trả lời cho câu hỏi tối thượng về cuộc sống, vũ trụ và mọi thứ, chỉ để đưa ra con số 42. Về mặt kỹ thuật câu trả lời là đúng, nhưng vô dụng vì vấn đề thực sự là phải xác định câu hỏi cần hỏi ngay từ đầu.
Lập trình vibe hoạt động tương tự. Prompt của bạn là tất cả, nhưng quản lý ngữ cảnh cũng quan trọng không kém. Một prompt mơ hồ sẽ cho bạn mã mơ hồ, và nếu bạn không cung cấp các tệp, tài liệu hoặc ví dụ phù hợp làm ngữ cảnh, mô hình sẽ không hiểu bạn thực sự cần gì. Nếu bạn là người hiểu lập trình, kiến trúc và thiết kế hệ thống, bạn có thể soạn prompt chi tiết và tuyển chọn ngữ cảnh phù hợp để hướng LLM đến các giải pháp xuất sắc. Nhưng nếu bạn không biết phải yêu cầu gì hoặc cung cấp ngữ cảnh gì, AI cũng sẽ không biết.
Đây thực tế là lý do tại sao lập trình vibe mạnh mẽ đối với các nhà phát triển có kinh nghiệm. Chúng ta biết mã tốt trông như thế nào, hiểu những cái bẫy, và có thể viết prompt để điều hướng mô hình tránh khỏi chúng. Đối với người mới bắt đầu không có nền tảng kỹ thuật, đây trở thành một hạn chế thực sự. Bạn có thể nhận được mã chạy được, nhưng nếu không hiểu điều gì đã sai hay nên hỏi gì tiếp theo, bạn sẽ bị mắc kẹt.
Khi lập trình Vibe không đủ
Các mô hình AI mới nhất ấn tượng, nhưng chúng không phải là viên đạn bạc. Lập trình vibe có thể hoạt động trong môi trường sản xuất, nhưng chỉ khi bạn thực sự nghiêm túc. Bạn cần các unit test vững chắc. Bạn cần các nguồn sự thật rõ ràng cho những gì hệ thống của bạn nên làm. Bạn cần phát hiện khi mọi thứ bị hỏng hoặc trôi. Và bạn cần tư duy của một hacker. Hãy nghĩ vượt khuôn khổ và cố gắng phá hỏng dự án lập trình vibe của bạn theo những cách bất ngờ. Những trường hợp biên nào bạn chưa cân nhắc? Những lỗ hổng bảo mật nào có thể bị ai đó lợi dụng? Đây là thứ phân biệt mã chỉ đơn thuần chạy được và mã thực sự bền bỉ.
Nhưng có điều nữa tôi đã học được. Đôi khi bạn chỉ cần kết thúc một phiên với AI và bắt đầu một phiên mới. Khi lịch sử hội thoại của bạn càng ngày càng lớn, hiệu suất của mô hình sẽ suy giảm. Nó mắc nhiều lỗi hơn, sinh mã kém mạch lạc hơn, và bắt đầu ảo tưởng (hallucinate) thường xuyên hơn. Nếu bạn không nhận ra điều này và dừng lại, những lỗi này sẽ chồng chất lên nhau, khiến mọi thứ ngày càng tệ. Nó giống như cố đọc một tài liệu bị photocopy lại nhiều lần. Bắt đầu mới giúp mọi thứ sạch sẽ và sắc nét.
Các dự án được lập trình bằng Vibe
Dưới đây là hai dự án, stairs (repo) và transcendental (repo), tôi xây dựng bằng phương pháp lập trình vibe. Chủ yếu được tạo từ prompt, công việc thủ công giới hạn ở việc cung cấp ngữ cảnh, gỡ lỗi và triển khai lên GitHub Pages. Chúng là những thí nghiệm trang tĩnh vui nhộn thể hiện những gì có thể khi bạn kết hợp ý tưởng sáng tạo với mã thông qua lập trình vibe. Cả hai đều được lưu trữ trên GitHub.