Loạt phỏng vấn AI 14: Sự khác biệt giữa vibe coding và spec coding?
Đây là vấn đề mà hầu hết lập trình viên đều phải đối mặt. Vibe Coding và Spec Coding là hai phương thức làm việc hoàn toàn khác biệt khi lập trình với sự hỗ trợ của mô hình ngôn ngữ lớn (LLM) hiện nay. Sự khác biệt cốt lõi nằm ở: "đầu vào" bạn cung cấp cho AI là cảm nhận mơ hồ hay đặc tả chính xác.
I. Lấy ví dụ nấu ăn để mô tả đơn giản sự khác biệt giữa vibe coding và spec coding
- Vibe Coding = Bạn nói với bạn bè "Tôi muốn ăn cay", người bạn đó nấu một món theo cảm tính, bạn nếm thử rồi nói "Mặn hơn một chút", anh ta lại thêm muối. Hương vị có thể xuất sắc, nhưng nếu đổi người bạn khác nấu thì sẽ hoàn toàn khác.
- Spec Coding = Bạn viết sẵn công thức: "Tương đậu Pixian 20g, thịt bò thái lát 150g, cần tây cắt khúc 50g, xào lửa lớn 2 phút, trước khi tắt bếp thêm 3g đường". Các đầu bếp khác nhau làm theo công thức, hương vị nhất quán cao.
II. Định nghĩa của cả hai
| Khía cạnh | Vibe Coding | Spec Coding |
|---|---|---|
| Tên khác | Lập trình cảm tính, gợi ý ngẫu hứng | Lập trình hướng đặc tả, tài liệu trước |
| Hình thức đầu vào | "Làm cho tôi một trang đăng nhập đẹp, có cảm giác công nghệ" | "Trang đăng nhập cần bao gồm ô nhập email/mật khẩu, hộp kiểm Ghi nhớ tôi, nút gửi; Frontend sử dụng React + Tailwind; Quy tắc kiểm tra biểu mẫu: định dạng email, độ dài mật khẩu ≥8; khi thất bại hiển thị thông báo màu đỏ..." |
| Cách sử dụng AI | Đối thoại, lặp: đưa ra hướng chung → xem kết quả → điều chỉnh | Kỹ thuật: viết PRD/đặc tả kỹ thuật chi tiết trước → AI tạo mã dựa trên đặc tả |
| Mức độ tham gia của con người | Thấp: phụ thuộc vào sự sáng tạo của AI, con người chỉ chịu trách nhiệm "cảm giác có đúng không" | Cao: con người hoàn thành thiết kế/kiến trúc trước, AI chủ yếu thực thi |
| Tình huống điển hình | Tạo mẫu nhanh, công cụ cá nhân nhỏ, khám phá UI, viết mã sáng tạo | Hệ thống cấp sản xuất, cộng tác nhóm, cần mã có thể bảo trì/kiểm thử |
III. So sánh luồng làm việc giữa cả hai
Quy trình Vibe Coding
- Ý tưởng mơ hồ: "Tôi muốn viết một trình thu thập dữ liệu, lấy bảng xếp hạng nóng từ Zhihu."
- Viết prompt đầu tiên: Trực tiếp yêu cầu AI tạo mã.
- Chạy → Báo lỗi → Dán lỗi lại → AI sửa.
- Thấy giao diện xấu → "Làm nút đó tròn hơn, đổi nền thành xanh dương gradient" → AI sửa.
- Thiếu chức năng → "Thêm chức năng lưu ra CSV" → AI thêm.
- Lặp lại bước 3-5 cho đến khi "cảm thấy ổn rồi".
Quy trình Spec Coding
- Viết tài liệu đặc tả: Xác định đầu vào/đầu ra, cấu trúc dữ liệu, xử lý lỗi, yêu cầu hiệu năng, yêu cầu phi chức năng (ví dụ: ghi log, giới hạn tốc độ).
- Chia đặc tả thành các nhiệm vụ: Ví dụ Nhiệm vụ 1: Triển khai hàm
fetch_hot_topics(), tuân thủ chữ ký API trong đặc tả. - Yêu cầu AI thực hiện từng nhiệm vụ: Prompt bao gồm chữ ký hàm, chú thích, kỳ vọng về ca kiểm thử.
- Xem xét và xác thực thủ công: Đảm bảo tuân thủ đặc tả, chạy kiểm thử đơn vị.
- Tích hợp và hồi quy.
IV. So sánh ưu nhược điểm
| Đặc điểm | Vibe Coding | Spec Coding |
|---|---|---|
| Tốc độ bắt đầu | Rất nhanh, vài phút ra bản mẫu | Chậm, cần viết tài liệu, chia nhiệm vụ |
| Chất lượng mã | Thấp (có thể dư thừa, không nhất quán, lỗi tiềm ẩn) | Cao (dễ đọc, dễ kiểm thử, phù hợp kiến trúc) |
| Khả năng bảo trì | Kém, người sau không hiểu "tại sao viết như vậy" | Tốt, đặc tả chính là tài liệu |
| Phụ thuộc vào LLM | Rất cao, đổi mô hình có thể đầu ra hoàn toàn khác | Trung bình, miễn đặc tả rõ ràng, các mô hình khác nhau cũng có thể tạo ra cấu trúc tương tự |
| Độ khó gỡ lỗi | Khó, không biết logic từ đâu ra | Dễ, kiểm tra từng điều khoản theo đặc tả |
| Phù hợp cộng tác nhóm | Gần như không thể | Có thể (đặc tả như hợp đồng giao tiếp) |
| Tính xác định của đầu ra | Thấp, mỗi lần đối thoại kết quả có thể trôi | Cao, cùng đặc tả tạo ra đầu ra ổn định |
V. Gợi ý sử dụng trong thực tế
"Trong công việc, vibe coding và spec coding không phải chọn một trong hai, mà là kết hợp sử dụng, chọn giải pháp phù hợp cho từng tình huống:
- Ở giai đoạn khám phá (khi chưa chắc chắn về lựa chọn công nghệ hoặc kiểu UI), dùng Vibe Coding để nhanh chóng xác thực các phương án khác nhau, ví dụ 'viết một component thẻ bằng Tailwind để xem hiệu quả'.
- Khi phương án đã được xác định, ngay lập tức chuyển sang Spec Coding: tổng hợp ngược bản mẫu thành công thành đặc tả rõ ràng (đầu vào/đầu ra, điều kiện biên, xử lý lỗi), sau đó yêu cầu AI hoặc con người viết lại mã cấp sản xuất một cách nghiêm ngặt theo đặc tả.
Chế độ thuần Vibe chỉ phù hợp với script dùng một lần hoặc công cụ nội bộ nhỏ; đối với hệ thống cần bảo trì lâu dài, nhiều người sử dụng, Spec Coding là yêu cầu bắt buộc."
评论
暂无已展示的评论。
发表评论(匿名)