- "Vibe Engineering" là tên gọi mới cho một phương thức phát triển chuyên nghiệp sử dụng công cụ lập trình AI; khác với "vibe coding" nhanh, tùy hứng và thiếu trách nhiệm, nó chỉ cách tiếp cận mà kỹ sư giàu kinh nghiệm tận dụng LLM nhưng vẫn duy trì chất lượng mã và trách nhiệm
- Sự xuất hiện của các tác tử lập trình như Claude Code, OpenAI Codex CLI và Gemini CLI đã khiến việc dùng LLM trong các dự án thực tế tăng mạnh; một số kỹ sư còn chạy nhiều tác tử cùng lúc để xử lý song song
- Để tận dụng LLM hiệu quả, vẫn cần những thực hành kỹ nghệ phần mềm đỉnh cao đã được xác lập như kiểm thử tự động, lập kế hoạch trước, tài liệu hóa toàn diện, quản lý phiên bản và văn hóa review code
- Công cụ AI có đặc tính khuếch đại chuyên môn sẵn có; kỹ sư càng nhiều kỹ năng và kinh nghiệm thì càng có thể đạt kết quả nhanh hơn và tốt hơn khi dùng LLM
- Thuật ngữ này nhấn mạnh đây là cách dùng AI khó hơn và tinh vi hơn cho phát triển phần mềm production, được phân biệt rõ với "vibe coding"; sự kết hợp tưởng như mâu thuẫn giữa engineering và vibe lại tạo lợi thế dễ nhớ hơn (nhấn mạnh sự thay đổi của quy trình phát triển cùng tầm quan trọng của chuyên môn khi công cụ AI tiến hóa)
Phân biệt giữa vibe coding và vibe engineering
- Vibe coding là cách phát triển phần mềm bằng AI theo kiểu nhanh, lỏng lẻo và thiếu trách nhiệm; hoàn toàn do prompt dẫn dắt và không chú ý đến cách mã thực sự hoạt động
- Ở đầu kia của phổ là cách những chuyên gia lành nghề tăng tốc công việc bằng LLM nhưng vẫn tự hào, tự tin và chịu trách nhiệm về phần mềm mình tạo ra, và điều đó được gọi là vibe engineering
- Một sự thật ít được nói đến là làm việc hiệu quả với LLM trong các dự án thực tế, chứ không phải project đồ chơi, với vai trò kỹ sư phần mềm là việc khó, đòi hỏi hiểu biết sâu về cách dùng công cụ và có rất nhiều cạm bẫy cần tránh
Sự xuất hiện và tác động của các tác tử lập trình
- Các công cụ tác tử lập trình như Claude Code phát hành vào tháng 2/2025, Codex CLI của OpenAI phát hành vào tháng 4, và Gemini CLI phát hành vào tháng 6 đã xuất hiện, làm tăng mạnh tính hữu dụng của LLM đối với các bài toán lập trình thực tế
- Những công cụ này liên tục sửa mã và chủ động kiểm thử để tiếp tục làm việc cho đến khi đạt được mục tiêu đã chỉ định
- Những kỹ sư phần mềm giàu kinh nghiệm và đáng tin cậy đang chạy nhiều tác tử cùng lúc để xử lý nhiều vấn đề song song và mở rộng phạm vi công việc
- Tác giả ban đầu hoài nghi, nhưng sau khi trực tiếp chạy các tác tử lập trình song song thì xác nhận rằng cách này mệt về mặt tinh thần nhưng hiệu quả đáng ngạc nhiên
- Phần lớn bộ sưu tập tools.simonwillison.net được xây dựng theo kiểu vibe coding cổ điển, nhưng việc lặp đi lặp lại cùng các tác tử lập trình để tạo ra mã đạt chất lượng production có thể bảo trì trong tương lai lại cho cảm giác là một quy trình hoàn toàn khác
Những thực hành kỹ nghệ phần mềm hiện có được LLM tăng cường
- Kiểm thử tự động: nếu có một bộ test mạnh, toàn diện và ổn định thì công cụ lập trình tác tử có thể hoạt động rất nhanh; nếu không có test, tác tử có thể khẳng định là mọi thứ chạy dù thực ra chưa test, hoặc thay đổi mới có thể làm hỏng các tính năng không liên quan
- Phát triển ưu tiên kiểm thử đặc biệt hiệu quả với các tác tử có thể lặp trong loop
- Lập kế hoạch trước: khi bắt đầu ghép nhanh một thứ gì đó, nếu xuất phát từ một kế hoạch cấp cao thì mọi thứ sẽ diễn ra tốt hơn nhiều, và điều này còn quan trọng hơn khi làm việc với tác tử
- Có thể lặp trước trên kế hoạch rồi mới giao cho tác tử viết mã
- Tài liệu hóa toàn diện: giống như lập trình viên con người, LLM cũng chỉ có thể giữ một phần codebase trong ngữ cảnh tại một thời điểm; nếu cung cấp tài liệu liên quan, nó có thể dùng API ở vùng khác mà không cần đọc mã trước
- Nếu viết tài liệu tốt từ trước, mô hình có thể dựng nên phần triển khai khớp với đầu vào đó
- Thói quen quản lý phiên bản tốt: khi tác tử lập trình có thể đã thay đổi gì đó, việc hoàn tác sai sót và hiểu được cái gì thay đổi khi nào, bằng cách nào càng trở nên quan trọng hơn
- LLM rất giỏi với Git, có thể tự dò lịch sử để truy vết nguồn gốc bug và thường dùng
git bisect tốt hơn đa số lập trình viên
- Tự động hóa hiệu quả: tích hợp liên tục, format và lint tự động, triển khai liên tục lên môi trường preview đều giúp ích cho công cụ lập trình tác tử
- LLM giúp viết nhanh các script tự động hóa, để lần sau có thể lặp lại công việc một cách chính xác và nhất quán
- Văn hóa review code: nếu bạn review code nhanh và hiệu quả thì trải nghiệm làm việc với LLM sẽ tốt hơn nhiều
- Nếu bạn chỉ muốn tự viết mã hơn là ngồi review thứ do người khác (hoặc thứ gì đó) viết ra, thì sẽ thấy khó khăn
- Một dạng kỹ thuật quản lý rất kỳ lạ: để có kết quả tốt từ tác tử lập trình, cách làm lại giống với việc đạt kết quả tốt từ cộng tác viên con người đến mức hơi khó chịu
- Cần đưa ra chỉ dẫn rõ ràng, đảm bảo đủ ngữ cảnh cần thiết và cung cấp phản hồi có thể hành động được về sản phẩm đầu ra
- Điểm dễ hơn nhiều so với làm việc với người thật là không cần lo xúc phạm hay làm họ nản chí, nhưng kinh nghiệm quản lý sẵn có vẫn hữu ích một cách đáng ngạc nhiên
- QA thủ công thật sự tốt: ngoài kiểm thử tự động, còn phải rất giỏi trong việc kiểm thử phần mềm thủ công, bao gồm dự đoán và đào sâu vào các edge case
- Kỹ năng nghiên cứu mạnh: luôn có hàng chục cách để giải một bài toán lập trình cụ thể; việc xác định lựa chọn tốt nhất và chứng minh cách tiếp cận đó luôn quan trọng, và vẫn là rào cản trước khi thả tác tử đi viết mã thật
- Khả năng triển khai lên môi trường preview: khi tác tử xây xong tính năng, nếu có cách xem trước tính năng đó một cách an toàn mà không deploy thẳng lên production, quá trình review sẽ hiệu quả hơn nhiều và rủi ro phát hành thứ bị lỗi sẽ giảm mạnh
- Bản năng về thứ có thể outsource cho AI và thứ phải xử lý thủ công: điều này tiếp tục tiến hóa khi mô hình và công cụ ngày càng hiệu quả hơn
- Một phần lớn của việc làm việc hiệu quả với LLM là duy trì trực giác mạnh về lúc nào nên áp dụng nó hiệu quả nhất
- Cảm quan ước lượng được cập nhật: ước lượng dự án sẽ mất bao lâu luôn là một trong những phần khó nhất nhưng quan trọng nhất của kỹ sư senior, đặc biệt trong các tổ chức nơi quyết định ngân sách và chiến lược dựa trên những ước lượng đó
- Lập trình có hỗ trợ AI khiến việc này còn khó hơn; những thứ từng mất rất lâu nay có thể nhanh hơn nhiều, nhưng việc ước lượng giờ lại phụ thuộc vào những yếu tố mới mà tất cả chúng ta vẫn đang cố hiểu
Bản chất và ý nghĩa của vibe engineering
- Để thực sự khai thác được khả năng của các công cụ mới này, cần vận hành ở đẳng cấp cao nhất của cuộc chơi, bao gồm
- không chỉ chịu trách nhiệm viết mã, mà còn
- nghiên cứu cách tiếp cận,
- quyết định kiến trúc cấp cao,
- viết đặc tả,
- định nghĩa tiêu chí thành công,
- thiết kế loop tác tử,
- lập kế hoạch QA,
- quản lý một đội quân ngày càng đông những thực tập sinh số kỳ quặc luôn tìm cách lách nếu có cơ hội,
- và dành rất nhiều thời gian cho review code
- Gần như tất cả những điều này vốn đã là đặc trưng của một kỹ sư phần mềm senior
- Công cụ AI khuếch đại chuyên môn sẵn có; với tư cách kỹ sư phần mềm, bạn càng có nhiều kỹ năng và kinh nghiệm thì càng có thể đạt kết quả nhanh hơn và tốt hơn khi làm việc với LLM và tác tử lập trình
“Vibe engineering”, thật vậy sao? : Suy ngẫm về việc chọn thuật ngữ
- Về việc cái tên "vibe engineering" có ngớ ngẩn không: có lẽ là có; khái niệm "vibe" trong AI ở thời điểm này có phần đã bị dùng đến mệt mỏi, và bản thân "vibe coding" đang bị nhiều lập trình viên dùng theo nghĩa miệt thị
- Nhưng tôi sẵn sàng giành lại chữ vibe cho một điều gì đó mang tính xây dựng hơn
- Tôi chưa bao giờ thích sự phân biệt gượng ép giữa "coder" và "engineer" vì nó luôn giống một dạng rào cản gia nhập, nhưng trong trường hợp này thì một chút rào cản gia nhập lại chính xác là điều cần thiết
- Vibe engineering thiết lập sự phân biệt rõ ràng với vibe coding, và báo hiệu rằng đây là một cách khác, khó hơn và tinh vi hơn để làm việc với công cụ AI nhằm xây dựng phần mềm production
- Tôi thích khả năng nó sẽ bị xem là ngạo mạn và gây tranh cãi; toàn bộ không gian này vẫn còn phi lý theo rất nhiều cách
- Trong lúc tìm ra cách hiệu quả nhất để áp dụng những công cụ mới này, chúng ta không nên quá nghiêm trọng hóa bản thân
- Trước đây tôi từng cố gắng phổ biến những thuật ngữ như lập trình có hỗ trợ AI nhưng gần như không thành công, nên lần này thử cọ xát với chữ vibe xem chuyện gì xảy ra cũng không phải ý tệ
- Tôi thực sự thích sự lệch pha rõ ràng giữa "vibe" và "engineering", vì nó làm cho cụm từ kết hợp này trở nên vừa vui nhộn vừa (hy vọng là) dễ nhớ theo một cách tự mâu thuẫn
4 bình luận
Tôi nhớ là trước đây cũng từng đặt tên kiểu “coding gì đó?” rồi thất bại, nên có vẻ
AI pair programminglà cách diễn đạt phù hợp nhất.Đặt tên chỉ để khẳng định “cái tên đó là do tôi придумал”.
Đã từng có người gọi đó là "Augmented Coding", nhưng rồi cụm này nhanh chóng biến mất.
Ý kiến trên Hacker News
/yolocho claude để cứ thế chạy mà không cần hướng dẫn gì đặc biệt.Tạo ra những cách gọi vô nghĩa;