Back to blog

Nền Tảng Phần Mềm Quan Trọng Hơn Bao Giờ Hết

aisoftware-engineeringopinionproductivityarchitecture
Nền Tảng Phần Mềm Quan Trọng Hơn Bao Giờ Hết

Có một pattern cứ lặp đi lặp lại trong các cuộc trò chuyện về AI coding tools.

Ai đó đưa cho AI một spec mơ hồ. AI generate ra thứ gì đó. Không đúng ý. Điều chỉnh prompt. AI generate lại. Giờ còn tệ hơn. Điều chỉnh tiếp. Đến lúc này cả đống code trông như được viết bởi ba người khác nhau chưa bao giờ gặp mặt.

Matt Pocock — TypeScript educator và một trong những giọng nói tỉnh táo nhất về AI-assisted development — có một talk tại AI Engineer Europe 2026 tên là "It Ain't Broke: Why Software Fundamentals Matter More Than Ever." Luận điểm của anh ấy: AI coding tools vừa bị thổi phồng quá mức, vừa thực sự mạnh mẽ. Sự khác biệt giữa hai trải nghiệm đó không phải ở công cụ — mà ở quy trình.


Vòng Lặp "Specs to Code" Là Cái Bẫy

Pocock chỉ ra cái mà anh gọi là "vòng lặp specs to code" nguy hiểm: khi không có sự hiểu biết chung rõ ràng về problem, AI chỉ tiếp tục regenerate. Mỗi iteration lại trật khỏi những gì bạn thực sự muốn, vì cả bạn lẫn AI chưa thiết lập được ngôn ngữ chung để định nghĩa "đúng" là gì.

Anh break down thành năm failure mode cụ thể:

1. AI không làm đúng ý bạn — Không có shared design vocabulary. AI interpret hướng dẫn mơ hồ theo kiểu mơ hồ và cho ra output mơ hồ sai.

2. AI quá verbose — Code do AI generate thiên về comprehensive hơn là clarity, tạo ra communication gap giữa developer intent và những gì thực sự được viết ra.

3. Code không chạy — Hậu quả trực tiếp của hai cái trên. Không có feedback loop (static types, automated tests), không ai bắt được sự drift cho đến khi nó thành đống hỗn độn.

4. AI làm quá nhiều — Khi được yêu cầu giải một problem, AI sẽ sáng tạo ra complexity. Solution đơn giản không được generate ra vì prompt không constrain search space.

5. AI không hiểu codebase của bạn — Shallow modules, tangled interfaces, không có clear separation of concerns. AI không navigate được architecture của bạn, nên nó tự sáng tác ra cái của nó chồng lên trên.

Không cái nào trong số này là lỗi của model. Đây là những vấn đề về quy trình, và chúng có giải pháp quy trình.


Ba Kỹ Thuật Thực Sự Hiệu Quả

1. Xây Dựng Ngôn Ngữ Chung Trước

Pocock dẫn từ Domain-Driven Design của Eric Evans: khi có một ubiquitous language — shared vocabulary giữa developers và được thể hiện trong code — model dùng trong conversation và model trong codebase là một. AI có thể navigate được cái đó.

Trong thực tế, điều này nghĩa là dùng các command như /grill-me để AI đặt câu hỏi làm rõ trước khi viết bất cứ thứ gì. Hoặc /write-a-prd và /write-issues để đẩy AI vào planning mode trước implementation mode. Mục tiêu là như nhau: shared understanding trước khi delegate, không phải sau.

Đây không phải là bureaucracy. Đây là sự khác biệt giữa brief một junior developer năm phút và ném cho họ một ticket rồi hy vọng.

2. Deep Modules — Interface Đơn Giản, Nội Tảng Phức Tạp

Pocock mượn khái niệm "deep modules" của John Ousterhout: module tốt nhất là module cung cấp nhiều chức năng qua một interface đơn giản, ẩn complexity bên trong.

Điều này quan trọng với AI vì một lý do cụ thể: AI tương tác với codebase của bạn thông qua các interface của nó. Nếu interface của bạn tangled — nếu muốn hiểu một function làm gì bạn phải đọc cả call stack — thì AI không thể reason about nó hiệu quả. Nó hoặc sẽ làm sai, hoặc produce ra thứ gì đó phức tạp không cần thiết.

Deep modules cũng buộc code phải testable. Và code dễ test, theo Pocock, về cơ bản là code tốt. Không phải vì test tự nó có giá trị, mà vì testability là proxy cho clarity of interface, separation of concerns, và predictable behavior — tất cả những thứ làm cho codebase navigable được bởi cả người lẫn AI.

3. Test-Driven Development

TDD buộc bạn và AI phải di chuyển theo từng bước nhỏ, có chủ đích. Bạn define expected behavior trước. AI implement theo nó. Bạn biết ngay lập tức liệu có hoạt động không.

Cách Pocock diễn đạt: "The rate of feedback is your speed limit."

Không có test, feedback loop là deploy-and-see, hoặc tệ hơn, user-reported. Với test, feedback loop là vài giây. Speed limit đó không chỉ về việc bắt bug — mà còn về việc ngăn AI-assisted development trôi dạt vào mớ hỗn độn qua nhiều iteration.


Code Xấu Giờ Đắt Hơn Bao Giờ Hết

Đây là claim sắc bén nhất của Pocock, và đáng để ngồi suy nghĩ.

Assumption phổ biến là AI làm cho code xấu rẻ hơn — bạn có thể generate slop nhanh hơn, iterate nhanh hơn, bỏ đi nhanh hơn. Nhưng Pocock đảo ngược điều này: code xấu giờ đắt nhất từ trước đến nay, vì nó là thứ ngăn bạn khai thác lợi ích của AI.

Codebase lộn xộn không chỉ làm chậm human developers. Nó còn actively degrade AI output. AI không thể reason về những gì nó không navigate được. Nó không thể build on các pattern mà nó không nhìn thấy. Nó bù đắp bằng cách generate thêm complexity, khiến codebase tệ hơn, khiến AI interaction tiếp theo tệ hơn.

Các công ty đầu tư vào clean architecture và senior engineers để enforce nó sẽ khai thác được compounding value từ AI. Các công ty coi code như sản phẩm phụ có thể vứt bỏ sẽ thấy đầu tư AI cho diminishing returns — và họ sẽ đổ lỗi cho model.


Takeaway Thực Tế

Những developer đang thắng với AI không phải là người tìm ra prompt tốt hơn. Họ là người nhận ra rằng tất cả những thứ khiến software development khó trước khi có AI — framing problem rõ ràng, architecture tốt, feedback loop nhanh — giờ quan trọng hơn, không phải ít hơn.

AI lo phần tactical implementation. Engineer lo phần strategic architecture. Sự phân chia đó chỉ hoạt động nếu architecture xứng đáng để bàn giao.


Tóm Tắt và Điểm Mấu Chốt

✅ Vòng lặp "specs to code" là bẫy — prompt mơ hồ cho ra output ngày càng tệ hơn
✅ Shared language (ubiquitous language, PRD, clear issues) là nền tảng của việc delegate AI hiệu quả
✅ Deep modules với simple interface giúp AI navigate và reason về codebase của bạn
✅ TDD tạo ra fast feedback loops — rate of feedback là speed limit của bạn
✅ Code xấu giờ đắt hơn bao giờ hết — nó ngăn bạn khai thác compounding value từ AI
✅ Công ty đầu tư vào codebase quality và senior engineers sẽ bứt phá; những công ty coi code là disposable thì không


Suy Nghĩ Cuối

Nếu AI agent của bạn cứ cho ra rác sau nhiều iteration, lời khuyên của Pocock nghe có vẻ counterintuitive: đừng nhìn vào prompt trước. Nhìn vào codebase.

AI không tệ đi. Nó đang vật lộn với những gì được đưa cho nó làm việc.

Fix không phải là prompt tốt hơn. Là foundation tốt hơn.

📬 Đăng ký nhận bản tin

Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.

💬 Comments

Đăng nhập để bình luận

Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.