- Addy Osmani, lãnh đạo kỹ thuật đã làm việc 13 năm tại nhóm Google Chrome, giới thiệu phương pháp phát triển dựa trên AI dành cho kỹ sư phần mềm chuyên nghiệp
- Vibe coding hữu ích cho việc tạo prototype nhanh, nhưng để phát triển phần mềm đạt chất lượng production thì các nguyên tắc kỹ thuật và sự giám sát của con người là không thể thiếu
- Khi sử dụng công cụ AI, cần bảo đảm chất lượng thông qua phát triển theo đặc tả, viết test, hiểu mã nguồn, đồng thời phải xem xét quá trình suy luận của mô hình để nắm hoàn toàn đoạn mã được tạo ra
- LLM có thể nhanh chóng tạo ra tới khoảng 70% ứng dụng, nhưng để bảo đảm độ hoàn thiện, bảo mật và khả năng bảo trì cho 30% còn lại thì chuyên môn của kỹ sư senior lại càng quan trọng hơn
- Các workflow phát triển mới như agent nền chạy bất đồng bộ, coding song song đang xuất hiện, và kỹ sư cần trở thành người học suốt đời biết tận dụng AI trong khi vẫn duy trì tư duy phản biện và năng lực hiểu mã
Sự khác biệt giữa Vibe Coding và kỹ thuật có AI hỗ trợ
- Vibe coding là cách làm đắm mình hoàn toàn vào luồng sáng tạo với AI, tập trung vào prompt ở mức cao và gần như quên đi chính mã nguồn
- Chấp nhận đề xuất của AI mà không xem xét sâu, tập trung vào thử nghiệm lặp nhanh
- Hữu ích cho prototype, MVP và mục đích học tập, ưu tiên tốc độ và khám phá hơn độ chính xác và khả năng bảo trì
- Kỹ thuật có AI hỗ trợ là cách tiếp cận sử dụng AI như một cộng tác viên mạnh mẽ nhưng không thay thế các nguyên tắc kỹ thuật
- AI đóng vai trò force multiplier trong toàn bộ vòng đời phát triển phần mềm, hỗ trợ boilerplate, debug, triển khai...
- Kỹ sư con người vẫn chịu trách nhiệm về thiết kế kiến trúc, rà soát mô hình và hiểu mọi đoạn mã được sinh ra
- Việc bảo đảm bảo mật, khả năng mở rộng và khả năng bảo trì của sản phẩm cuối cùng vẫn là trách nhiệm của kỹ sư
- Trình độ chuyên môn kỹ thuật phần mềm càng cao thì chất lượng đầu ra khi dùng LLM càng tốt
- Để lập trình đạt chất lượng production, chỉ nên commit vào repository những đoạn mã có thể giải thích đầy đủ cho người khác
Cách Addy sử dụng công cụ AI
- Cách tiếp cận xoay quanh phát triển theo đặc tả (Spec-driven development)
- Cốt lõi là lập kế hoạch rõ ràng cho thứ sẽ xây dựng
- Vibe coding được dùng cho công cụ cá nhân, dự án dùng một lần hoặc trực quan hóa ý tưởng
- Sau khi làm rõ tầm nhìn bằng prototype, cần tài liệu hóa yêu cầu thực tế để dẫn dắt đầu ra chất lượng cao từ LLM
- Viết test để giảm rủi ro
- Ngay cả các model mới nhất đôi khi vẫn có thể sinh ra mã phức tạp hoặc sai
- Test giúp chứng minh mã hoạt động và xác định rõ khi có vấn đề
- Sử dụng Chrome DevTools MCP
- Cung cấp cho LLM “thị giác” về trình duyệt để phát hiện rendering, lỗi console, cảnh báo...
- Đưa trình duyệt vào trong vòng lặp để cải thiện feedback loop
- Thử nghiệm liên tục với model, công cụ và nền tảng mới, đồng thời chia sẻ insight trong nhóm
- Xây dựng văn hóa học cùng nhau bằng cách tạo ra sự an toàn tâm lý
Quan sát và bài học về công cụ AI tại Google
- Các nguyên tắc kỹ thuật phần mềm đã được kiểm chứng của Google vẫn còn nguyên giá trị trong kỷ nguyên AI
- Sự quan tâm đến chất lượng và thẩm định kỹ lưỡng (due diligence) vẫn rất quan trọng
- Tầm quan trọng của prompt engineering và context engineering
- Xây dựng đúng “câu thần chú (incantations)” để nhận kết quả tốt nhất từ LLM
- Tối ưu context window giúp tăng xác suất có đầu ra chất lượng cao
- Bao gồm các nội dung không có trong dữ liệu huấn luyện của LLM như mô tả theo dự án, chi tiết, file, ví dụ...
- Thúc đẩy chuyển đổi sang AI native engineer
- Rèn tư duy để cho AI thử trước khi tự mình giải quyết vấn đề
- Xây dựng năng lực chuyên môn về AI như benchmark đánh giá, RAG vs. fine-tuning...
- Tầm quan trọng của giám sát con người
- Nếu AI vừa viết code vừa review code thì sẽ không chắc chắn rốt cuộc thứ gì đang được triển khai
- Tốc độ PR tăng lên khiến human review trở thành điểm nghẽn
- Best practice cho code review vẫn đang tiếp tục tiến hóa
Những công cụ Addy ưa dùng
- Chủ yếu sử dụng Klein in VS Code
- Cursor và GitHub Copilot cũng cung cấp nhiều tính năng
- Rà soát quá trình suy nghĩ (thinking log) mà công cụ hiển thị
- Kiểm tra quyết định của model và mã được tạo ra trong quá trình xây dựng lời giải
- Xem lại mã trước PR để bảo đảm khả năng bảo trì về sau
- Duy trì năng lực tự debug khi LLM không giải được vấn đề
- Nếu không hiểu cách mã hoạt động, bạn sẽ có cảm giác như bị ném vào rừng rậm
- Khác biệt giữa kỹ sư chuyên nghiệp và người dùng phổ thông
- Ai cũng có thể chỉ nhập prompt
- Hiểu nguyên lý hoạt động của mã, khả năng sửa khi model thất bại và giải thích rõ ràng trong cuộc họp mới là yếu tố tạo khác biệt
Bản chất của bài toán 70%
- LLM có thể tạo ra khoảng 70% của một ứng dụng chạy được với tốc độ rất nhanh, nhưng gặp khó ở 30% còn lại
- Những thành phần của 30% cuối cùng
- Mẫu hình “Two steps back”: một prompt có thể khiến UI hoặc tính năng bị viết lại hoàn toàn theo hướng sai
- Chi phí bảo trì ẩn: nếu giao trách nhiệm cho LLM với đặc tả không rõ ràng, lợi nhuận có thể sụt giảm
- Lỗ hổng bảo mật: lộ API key, vấn đề XSS... do thiếu tư duy tổng thể
- PoC được làm bằng vibe coding cần được viết lại trước khi triển khai production
- Với codebase phục vụ người dùng thực, bảo mật và chất lượng là điều bắt buộc
- Kỹ sư giàu kinh nghiệm hoàn thành 30% cuối dễ hơn nhiều
- Kỹ sư junior thường không biết bước tiếp theo ngoài việc tiếp tục re-prompt cho LLM
- Điều này làm nổi bật tầm quan trọng của tư duy phản biện và mindset giải quyết vấn đề
- Sự cần mẫn trong việc đọc code, hiểu hệ thống và nắm được mọi phần kết nối với nhau như thế nào vẫn là điều thiết yếu
Chiến thuật để sử dụng LLM hiệu quả
- Áp dụng mindset của project manager
- Chia nhỏ công việc thành các đơn vị nhỏ và có thể kiểm chứng
- Ném toàn bộ yêu cầu vào một lần không phải cách hiệu quả
- Cần đặt kỳ vọng rõ ràng và chuẩn bị cho quy trình lặp với AI
- Viết mã mang tính mô-đun và có thể test được
- Các best practice kỹ thuật phần mềm như code review vẫn có hiệu lực trong thời đại AI
- Xem xét ràng buộc đầu vào/đầu ra và cung cấp đủ context
- Đây là thói quen mới nhưng có thể mang lại kết quả tốt
- Giữ sự cẩn trọng để luôn đưa con người vào trong vòng lặp là chìa khóa thành công
- Càng đẩy trách nhiệm cho LLM thì rủi ro phát sinh sự cố càng tăng
Agent tự chủ và các workflow mới
- Sự xuất hiện của agent coding nền chạy bất đồng bộ
- Các công cụ như Jewels, Devin, Codex và các thử nghiệm từ GitHub
- Ý tưởng là giao một phần backlog và để nó được hiện thực hóa theo kiểu bất đồng bộ
- Tình trạng hiện tại
- Đã hiệu quả với viết/cập nhật test, migration phiên bản thư viện...
- Phù hợp để giao các thay đổi nhỏ như thêm dark mode
- Bài toán quản lý
- Cần giao diện phù hợp để quản lý toàn bộ công việc như một nhạc trưởng điều khiển dàn nhạc
- Phải cân nhắc số lượng tác vụ thực tế có thể quản lý đồng thời
- Sự chú ý của con người là hữu hạn, nên để review code kỹ lưỡng thì chỉ có thể xử lý song song vài việc
- Sự tiến hóa của vibe designing
- MCP của Figma giúp tăng cường cộng tác giữa designer và developer
- Designer có thể chuyển tầm nhìn thành prototype có chức năng và tiến gần đến mã có thể production hóa
Sự thay đổi trong vai trò của EM và PM
- Vai trò PM
- Dành nhiều thời gian hơn cho việc định khung vấn đề, metric và chính sách cho agent
- Vai trò EM
- Tập trung vào evals, rà soát an toàn và hỗ trợ nhóm sử dụng AI một cách tự tin
- Trách nhiệm đối với kết quả không thay đổi
- Tầm quan trọng của taste trong product engineering
- Ai cũng có thể tạo tính năng tương tự bằng prompt, nên yếu tố tạo khác biệt là taste
- Junior vs. senior
- AI nâng mặt bằng tối thiểu nhưng trần năng lực cũng tăng lên
- Junior có thể bắt đầu nhanh hơn
- Senior có năng lực viết đặc tả, chia nhỏ công việc, hiểu kiến trúc hệ thống, review hiệu quả sẽ càng có giá trị
- 30% cuối không phải việc vặt mà là đòn bẩy
Vai trò mới và thay đổi trong đào tạo lập trình viên
- Các vai trò mới như forward deployed engineers đang nổi lên
- Hợp tác chặt hơn với khách hàng, nhanh chóng xây tính năng bằng AI và nhận phản hồi về yêu cầu
- Ranh giới giữa vai trò developer, PM và designer có thể trở nên mờ hơn
- Đào tạo AI engineering
- Cần dạy best practice về prompt và context engineering ở cấp phổ thông và đại học
- Đồng thời tìm cách duy trì tư duy thiết kế hệ thống và kỹ thuật
- Trio programming
- Junior, senior và AI cùng làm việc
- Senior có thể yêu cầu AI giải thích mã được sinh ra hoặc cách nó kết nối với các phần khác của hệ thống
Tầm quan trọng của tư duy phản biện khi làm việc với AI
- Nguy cơ suy giảm tư duy phản biện do quá dễ chấp nhận khi dùng công cụ AI
- Có xu hướng nhấn Tab/Accept để chấp nhận mọi thứ trong các tác vụ không quá quan trọng
- Khi niềm tin tăng lên thì mức độ rà soát phản biện giảm xuống
- Điểm nghẽn code review
- Tốc độ mã do AI sinh ra tăng khiến review của con người trở thành bottleneck
- Có nguy cơ lạm dụng LGTM (Looks Good To Me)
- Chiến lược ứng phó
- Cố ý làm việc không có AI trong một số tính năng hoặc ngày nhất định để giữ năng lực tư duy phản biện
- Cân nhắc xem sẽ làm gì nếu tất cả nhà cung cấp LLM lớn đều ngừng hoạt động
- Viết code vs. đọc code
- Khi tự gõ code, bạn sẽ tự review trong quá trình làm, và người khác cũng biết ai là tác giả để review
- Trong thời đại AI, đọc và review chiếm tỷ trọng lớn hơn
- Dùng AI cho code review
- Sự “phê duyệt” của AI chỉ là một tín hiệu
- Cũng như CI/CD pass hay test thành công, vẫn cần góc nhìn cá nhân về chất lượng
- Vẫn nên thực hiện 20-30% công việc không dùng AI để tiếp tục vận động bộ não
LLM như một công cụ học tập
- Là công cụ mạnh để hiểu một codebase mới
- Nhiệm vụ đầu tiên không nên là prompt để thêm tính năng mới nhằm tạo giá trị, mà phải là học cách codebase vận hành
- Hữu ích để hiểu khái niệm lập trình, framework, mẫu kiến trúc
- Thiết yếu khi chuyển tính năng giữa các codebase viết bằng ngôn ngữ khác nhau
- Xây dựng văn hóa nhóm
- Phổ biến nhận thức rằng dùng AI làm công cụ học tập là điều hoàn toàn ổn
- Thường xuyên khuyến khích thử nghiệm và chia sẻ best practice
- Onboarding nhanh cho nhân sự mới
- Công cụ AI có thể đóng vai trò mentor đáng tin cậy 24/7
- Có thể học một cách thoải mái hơn thay vì hỏi kỹ sư senior cả ngày
- Learning mode của Claude Code
- Cung cấp chế độ giải thích và chế độ học
- Có thể tạm dừng và yêu cầu người dùng tự làm một phần cụ thể
Sự tiến hóa của công cụ AI và cách đặt kỳ vọng
- Lịch sử tiến hóa của công cụ
- Tải template → CLI và scaffolding → bootstrapping dựa trên AI
- Mỗi giai đoạn đều cải thiện trải nghiệm lập trình viên thêm một chút
- Nhận thức giới hạn của dữ liệu huấn luyện
- Dựa trên mã có giấy phép permissive trên GitHub hoặc các pattern từ web mở
- Có thể phản ánh các pattern ở mẫu số chung thấp nhất (lowest common denominator)
- Không bảo đảm mức cao nhất về bảo mật, hiệu năng hay khả năng truy cập
- Tương đồng với việc copy-paste từ Stack Overflow
- Trước đây: copy những thứ như regex xác thực email từ Stack Overflow
- Hiện tại: LLM tạo pattern tương tự nhưng vẫn có thể có edge case hoặc vấn đề bảo mật
- Thư viện bên thứ ba vs. tự triển khai
- Có thể tự viết một phiên bản nhỏ bằng LLM nhưng sẽ gánh trách nhiệm bảo trì
- Thư viện cho phép vá tập trung đối với các vấn đề như bảo mật
- Cần cân nhắc trade-off của từng lựa chọn
- Chìa khóa là giữ kỳ vọng thấp và quyền kiểm soát cao
Sự thay đổi trong định nghĩa một kỹ sư phần mềm giỏi
- Tầm quan trọng của người học suốt đời (Lifelong learner) là không đổi
- Dù framework, công cụ hay ngành công nghiệp thay đổi, sự cởi mở với việc học điều mới vẫn là thiết yếu
- Growth mindset
- Sẵn sàng thử các model, công cụ và nền tảng mới
- Học từ thất bại và hiểu rõ các ràng buộc
- Vai trò của lãnh đạo
- Khi lãnh đạo cho thấy sự cởi mở với việc học, điều đó tạo ra sự an toàn tâm lý cho cả nhóm
- Addy viết bản tin nội bộ cho nhóm vào mỗi thứ Hai hằng tuần
- Chia sẻ dự án cá nhân, bài viết và suy nghĩ
- Chọn lọc các cập nhật quan trọng về AI và AI engineering
- Các lãnh đạo khác cũng thấy rất hữu ích
- Sự tuyển chọn thông tin trong thời đại quá tải
- Có cảm giác như trên mạng xã hội cứ mỗi giờ lại có một thay đổi mang tính nền tảng
- Lãnh đạo cần chọn lọc điều thực sự quan trọng để định hướng cho nhóm
- Duy trì năng lực kỹ thuật
- Liên tục đọc và xem paper, whitepaper, blog, video, bài giảng...
- Hướng dẫn nhóm nên đầu tư thời gian vào đâu
- Liên hệ với phát triển sản phẩm
- Công việc cải thiện workflow lập trình cũng góp phần nâng cao trải nghiệm khách hàng của sản phẩm
Công cụ yêu thích và gợi ý
- Ngôn ngữ lập trình yêu thích: JavaScript
- Không chỉ vì sở thích cá nhân mà vì tính mở, nơi bất kỳ ai cũng có thể build và deploy trên web
- Mang lại cảm giác tự do không cần gatekeeper
- Công cụ yêu thích hiện tại: Bolt
- Công cụ scaffolding cho vibe coding
- Gần đây đã thêm hỗ trợ custom agent (có thể dùng Claude Code, v.v.)
- Cho đầu ra chất lượng cao và thiết kế rất tốt
- Có khả năng tự động hóa tích hợp với Supabase, nhà cung cấp xác thực...
- Tập trung vào việc loại bỏ ma sát trong khâu thiết lập
- Sách được khuyến nghị
- "The Software Engineer's Guidebook"
- "AI Engineering" by Chip Huyen - cuốn sách để học các khía cạnh nền tảng của AI engineering
Chưa có bình luận nào.