Danh mục:
1 - Hình thái Vibe Coding đầu tiên: Vibe tabbing (Gợi ý mã nguồn theo "vibe")
Tôi rất yêu Neovim, nhưng tính năng tự động hoàn thiện mã (auto tabbing) của Cursor hiện tại là không đối thủ. Không phải lúc nào nó cũng làm đúng, nhưng tỉ lệ chính xác đủ cao để tạo nên sự khác biệt lớn cho năng suất làm việc của tôi.
Đúng như DHH (David Heinemeier Hansson) đã nói, những đoạn mã được tạo ra theo cách này thường là các đoạn mã lặp lại (boilerplate) mà lẽ ra nên được loại bỏ thay vì làm cho chúng dễ "tuôn" ra codebase hơn. Nhưng không phải lúc nào cũng vậy. Đôi khi, đó chỉ là một cách triển khai chuẩn mực, đã được kiểm chứng cho một vấn đề nào đó mà nếu tự viết, tôi sẽ phải tốn kha khá "chất xám" để suy nghĩ.
Việc lướt qua đoạn mã được gợi ý rồi quyết định xem nó có phù hợp với mục đích hay không, và có thể điều chỉnh nhẹ một chút, tốn ít công sức hơn nhiều. Điều đó giúp tôi tiết kiệm thời gian và quan trọng hơn là không gian não bộ cho những vấn đề thú vị hơn là việc phải nhớ chính xác tên các thuộc tính cần thiết để thực hiện một tác vụ nhỏ—như lấy danh sách các "Whatevers" và sắp xếp chúng theo "Thingamajigs".
Vibe tabbing không dạy chúng ta được nhiều, nhưng nó giúp tiết kiệm thời gian nếu chúng ta biết mình đang làm gì. Tuy nhiên, nếu bạn không thể đánh giá đoạn mã nó tạo ra một cách nhanh chóng và chuẩn xác, lời khuyên của tôi là hãy tắt nó đi và học cách tự viết mọi thứ. Nếu không, nó sẽ tạo ra số lượng lỗi tương đương với số lỗi mà nó sửa được, và những lỗi đó thường rất tinh vi vì nhìn qua thì chúng có vẻ hoàn toàn hợp lý.

2 - Hình thái Vibe Coding thứ hai: Vibe Fixing (Sửa mã theo "vibe")
Nhiều IDE và trình soạn thảo văn bản hiện nay, bao gồm cả Neovim và Cursor, đều đã có chức năng cho phép bạn bôi đen một đoạn mã đang hoạt động không như ý muốn và yêu cầu nó sửa lại.

Khoảng 90% trường hợp tôi thấy tính năng này cực kỳ hữu ích là để tìm ra cú pháp Tailwind nhằm căn giữa một phần tử trong thẻ
div. Cứ kiện tôi đi nếu muốn. Việc này cũng giúp ích rất nhiều trong việc tránh lãng phí hàng phút đồng hồ chỉ để tìm kiếm một thứ đơn giản mà AI có thể truy xuất ngay lập tức; hoặc nếu tôi đã hỏi cách làm trên cửa sổ ChatGPT, tôi cũng không phải mất công tự tìm cách áp dụng lời khuyên đó vào mã nguồn của mình.Một lần nữa, đây là một công cụ giúp tiết kiệm thời gian, và nó cũng đòi hỏi chúng ta phải có khả năng đánh giá nhanh kết quả đầu ra của AI, bởi đôi khi nó đi chệch hướng một cách kinh khủng. Nhưng phương pháp này không giúp chúng ta học hỏi được gì nhiều. Nó dựa dẫm vào trình độ hiện tại của chúng ta và không giúp chúng ta tiến bộ hơn.

3 - Hình thái Vibe Coding thứ ba: Vibe Prompting (Lập trình qua câu lệnh)
Đây là lúc chúng ta thực sự bước vào lãnh địa của "vibe coding". Thay vì viết mã, chúng ta mô tả những gì mình muốn bằng ngôn ngữ tự nhiên. Bạn có thể đưa cho nó một cấu trúc dữ liệu và nói: "Viết cho tôi một hàm để chuyển đổi dữ liệu này thành định dạng mà biểu đồ Chart.js có thể hiểu được."
Sức mạnh của phương thức này nằm ở chỗ nó cho phép bạn duy trì trạng thái tập trung (flow state) vào các bài toán logic cấp cao thay vì bị sa lầy vào cú pháp chi tiết. Nếu bạn biết rõ cấu trúc dữ liệu đầu vào và kết quả đầu ra mong muốn, việc yêu cầu AI thực hiện phần việc "tay chân" ở giữa là một bước nhảy vọt về hiệu suất.
Tuy nhiên, rủi ro ở đây là sự lười biếng trong tư duy. Khi chúng ta ngừng viết mã logic, chúng ta cũng dần mất đi khả năng hình dung ra các kiến trúc phức tạp trong đầu. Vibe prompting hoạt động tốt nhất khi bạn coi AI như một "junior" cực kỳ nhanh nhẹn nhưng cần được chỉ dẫn sát sao, thay vì phó mặc hoàn toàn cho nó quyền quyết định cấu trúc của hệ thống.

Dưới đây là bản dịch tiếp theo cho hình thái thứ tư:
4 - Hình thái Vibe Coding thứ tư: Vibe Pairing (Lập trình cặp cùng "vibe")
Tôi đã trình bày chi tiết về hình thái này trong một bài viết trước, nên tôi sẽ không đi quá sâu vào nó ở đây.
Cốt lõi của mô hình này là chúng ta triệu hồi AI (hiện tại tôi tin là chỉ có Claude Code làm được) để trở thành một người cố vấn (mentor) lập trình, giúp chúng ta thiết kế các ứng dụng tốt hơn. Giống như mọi người thầy khác, "ClauDHH" (hay bất kỳ hình mẫu nào bạn chọn để dạy mình cách code tốt hơn) vẫn có thể sai sót, vì vậy chúng ta không thể lúc nào cũng chấp nhận mọi gợi ý của nó một cách mù quáng. Tuy nhiên, với cách tiếp cận này, việc học hỏi sẽ được tăng tốc đáng kể.
Đối với tất cả các hình thái Vibe Coding (ngoại trừ hình thái cuối cùng), rào cản chính ngăn cản chúng ta tận dụng AI để tăng tốc chính là kinh nghiệm và kỹ năng của bản thân; nhưng những hình thái đó lại không giúp ích gì nhiều để cải thiện các kỹ năng này. Thậm chí, chúng có thể làm chậm quá trình phát triển của chúng ta bằng cách cung cấp những lối tắt dễ dàng, vốn đòi hỏi rất ít hoặc không cần tư duy trừ khi có lỗi xảy ra (và khi lỗi chắc chắn sẽ đến, chúng ta bị đẩy vào tình thế tiến thoái lưỡng nan, và hầu hết mọi người sẽ gục ngã ở đó).
Nhưng hình thái này thì khác—ít nhất là đối với cá nhân tôi. Lần đầu tiên sau nhiều năm, tôi đang học hỏi một cách nhanh chóng. Và ý tôi không phải là học thêm một framework hay một ngôn ngữ mới nào đó.
Sau ba thập kỷ lập trình, các ngôn ngữ và framework đối với tôi hầu như đều có thể thay thế cho nhau. Bảo tôi ngày mai phải lập trình một thứ gì đó bằng Rust, tôi sẽ dành vài giờ đọc về cú pháp Rust và có lẽ sẽ hoàn thành công việc ở mức chấp nhận được vào ngày hôm sau. Yêu cầu tôi làm một ứng dụng React dù tôi chưa bao giờ thực sự động vào, tôi có lẽ cũng sẽ ổn thôi sau vài tiếng tìm hiểu.
Thế nhưng, để giỏi hơn trong cái "nghề" kỹ thuật phần mềm (software engineering) lại là một chuyện hoàn toàn khác. Thông thường, điều này đến từ hai thứ: kinh nghiệm (vốn tích lũy rất chậm) và sự dẫn dắt (mentoring) (thứ mà tôi không có nhiều trong đời lập trình của mình, và là thứ mà nhiều nhà phát triển độc lập ngày nay có thể chẳng bao giờ gặp được).
Ngoại trừ việc giờ đây tất cả chúng ta đều có thể có một người cố vấn thực thụ, cho dù đó là "ClauDHH" hay một nhân vật truyền cảm hứng nào đó trong giới lập trình. Chỉ cần thiết lập AI để nó hành xử giống nhất có thể với hình mẫu huyền thoại đó, yêu cầu nó xem lại mã nguồn (review code), xem lại thông số kỹ thuật cũng như các yêu cầu của bạn, tôi gần như có thể đảm bảo rằng bạn sẽ bắt đầu tiến bộ cực kỳ nhanh chóng.
Điều này sau đó cũng sẽ cải thiện khả năng của bạn trong việc sử dụng ba hình thái Vibe Coding còn lại, và mở rộng mạnh mẽ năng lực của bạn với tư cách là một nhà phát triển.
Ồ, và còn về hình thái thứ năm nữa...

5 - Hình thái Vibe Coding thứ năm: Vibe Doing (Ủy thác theo "vibe")
Suy cho cùng, hầu hết các kiểu lập trình được nhắc đến trong bài viết này đều là những sự biến đổi nhất thời—một giai đoạn quá độ trong khi chờ đợi AI trở nên đủ giỏi để không cần đến bất kỳ hình thức "coding" nào nữa.
Hiện tại, ở dạng phức tạp, nó xuất hiện dưới hình thái các nền tảng như Lovable hay Replit—những nơi tuyên bố cho phép chúng ta đưa ứng dụng đến với công chúng, và chắc chắn có thể giúp khởi chạy các bản mẫu (prototype), nhưng có lẽ chưa phải là ý hay nếu dùng cho một ứng dụng thực tế (production) cần khả năng mở rộng. Ở dạng đơn giản hơn, nó giống như Claude Artifacts—những ứng dụng React nhỏ mà Claude xây dựng để giải quyết một vấn đề cụ thể.
Tương lai này đang đến rất nhanh, nhưng nó vẫn còn đang ở giai đoạn sơ khai. Cuối cùng, giao diện cho nó sẽ không phải là một ứng dụng kiểu Lovable nơi chúng ta phải yêu cầu AI xây dựng một app để làm việc này việc kia. Giao diện tối thượng của "Vibe Doing" chính là thứ mà các tỷ phú trên thế giới đang dùng để giải quyết công việc: một quản gia (hoặc nếu bạn muốn, là một trợ lý cá nhân hay chánh văn phòng).
Một tỷ phú muốn mua du thuyền sẽ không lập trình một cái app để lọc các trang web bán du thuyền và xếp hạng chúng. Họ yêu cầu quản gia làm việc đó. Người quản gia sẽ đặt một vài câu hỏi, tìm kiếm chuyên gia, thực hiện khảo sát và quay lại với vài lựa chọn cùng đề xuất, sau đó vị tỷ phú sẽ đưa ra quyết định.
Tương lai của sự tương tác giữa người và máy tính cũng tương tự như vậy. Trong một tương lai không xa, khi tôi muốn một ứng dụng để theo dõi những bản mix nào trên Mixcloud mình đã nghe và lưu tạm (cache) chúng về máy, tôi sẽ không cần phải "vibe-agent" (dùng agent) để tạo ra một cái app (thứ mà tôi đã phải làm cho trường hợp cụ thể này). Tôi chỉ đơn giản là yêu cầu trợ lý cá nhân của mình thực hiện. Và nếu nó thấy việc đó xứng đáng, nó sẽ tự nhào nặn ra một ứng dụng bằng bất kỳ ngôn ngữ nào nó muốn, viết code trong vài phút và cung cấp cho tôi một giao diện đơn giản thực hiện đúng yêu cầu, hoặc có lẽ giao diện đó chính là cuộc hội thoại với trợ lý của tôi. Việc ứng dụng đó được tạo ra như thế nào không quan trọng với tôi, quan trọng là nó làm được việc tôi muốn. Nếu AI đủ thông minh, nó sẽ làm chính xác điều đó.
Trong mô hình này, tất nhiên, việc học lập trình trở nên vô nghĩa. Nó sẽ không còn quan trọng nữa. Và hầu hết các giá trị kinh tế hiện nay cũng vậy.
Nhưng trong lúc chờ đợi điều đó đến... bạn sẽ triệu hồi vị "guru" lập trình nào để trở thành người cố vấn cho mình?
Chú thích từ tác giả:
- Tôi không thể tin được vẫn có người nghĩ rằng AI đang "chạm ngưỡng bão hòa" (plateauing)...
- Làm thế nào mà Tailwind lại có tận 9 cách để đặt một thứ vào trong thẻ div vậy?
place-self-center,place-items-center,place-content-center,self-center,items-center,content-center,justify-self-center,justify-items-center,justify-center??? - Và nếu dùng qua Cursor, nó sẽ ngấu nghiến hàng trăm đô la tiền token cho việc này... Bạn tốt thì không để bạn mình phải trả tiền mua thêm credit của Cursor. Hãy dùng gói Claude Max hoặc OpenAI Pro.
- Phòng trường hợp bạn cần, đây là câu lệnh (command) Claude Code mà tôi sử dụng.
- Được hỗ trợ bởi kinh nghiệm khá dày dặn với ngôn ngữ C từ thời thiếu niên của tôi.
- Khi chúng ta tự mình đâm sầm vào các chướng ngại vật và học hỏi theo cách khó khăn nhất.
- Khi một lập trình viên dày dạn kinh nghiệm chỉ cho chúng ta cách làm việc "thuận chiều" với ngôn ngữ và framework thay vì chống lại nó, và chúng ta cảm thấy sự nhẹ nhõm, tự do khi cuối cùng cũng tìm ra cách làm mọi thứ một cách thanh thoát và lịch lãm.
- Tôi nghĩ nó sẽ bắt đầu trở thành một hình thức tương tác chính của con người với web vào cuối năm sau, và bắt đầu "tàn sát" hàng ngũ các công ty phần mềm trong vòng ba năm tới.
Nguồn bài viết từ Tác giả Danieltenner