Năng lực của lập trình viên kỳ cựu trong thời đại AI: Tận dụng kinh nghiệm để đạt kết quả tốt hơn
(manuel.kiessling.net)- Trong vài tháng gần đây, tác giả đã thử nghiệm sử dụng các công cụ lập trình dựa trên AI cả trong dự án cá nhân lẫn công việc
- Kết quả rất tích cực, với cả rút ngắn thời gian phát triển lẫn cải thiện chất lượng đầu ra
- Mặt khác, một số lập trình viên cũng chia sẻ phản hồi tiêu cực rằng các công cụ AI không hoạt động hiệu quả
- Qua trải nghiệm này, tác giả tin rằng phát triển phần mềm với AI có tiềm năng tạo ra bước nhảy vọt tiếp theo về năng suất
- Tuy nhiên, điều cần thiết không phải là chấp nhận một cách thiếu phản biện mà là góc nhìn đúng đắn và cách tiếp cận cân bằng
- Thông qua bài viết này, tác giả chia sẻ các best practice rút ra từ trải nghiệm thực tế nhằm phần nào thúc đẩy việc đưa công cụ AI vào sử dụng một cách khôn ngoan trong cộng đồng phát triển rộng lớn hơn
Tình hình sử dụng hiện tại của các công cụ lập trình AI
- Theo những gì quan sát được trên Twitter, các công cụ lập trình AI đang rất được ưa chuộng trong nhóm lập trình viên không chuyên
- Họ dùng AI để thử sức với các dự án mới và học lập trình một cách hứng thú
- Đây là một xu hướng tích cực, góp phần hạ thấp rào cản tiếp cận công nghệ cho nhóm người dùng mới
- Tuy nhiên, đó chỉ là một khía cạnh cho thấy tiềm năng của công cụ AI
- Trong những bối cảnh chuyên môn như với các lập trình viên kỳ cựu, AI cũng có thể mang lại giá trị rất lớn
Điểm mạnh của lập trình viên kỳ cựu
- Dù vẫn đang ở giai đoạn phát triển ban đầu, kết luận cho đến lúc này là:
- Lập trình viên kỳ cựu đang ở vị trí có thể tận dụng công cụ AI hiệu quả nhất
- Không chỉ ở mức nhận hỗ trợ, mà còn có thể tối ưu hóa cách sử dụng
- Cốt lõi nằm ở điều sau:
Chính kinh nghiệm phát triển và know-how vận hành dự án, dù có vẻ hơi cũ kỹ trong thời đại AI, lại là nền tảng giúp khai thác những công cụ này tốt nhất
- Nếu ví các agent lập trình dựa trên LLM,
- thì chúng giống một lập trình viên kỳ cựu có kiến thức lập trình rất phong phú nhưng trong ngữ cảnh hiện tại lại là một junior thiếu hiểu biết về thiết kế
- Vì vậy, để giao cho chúng công việc thực tế,
- khâu chuẩn bị và hướng dẫn mang tính chiến lược là bắt buộc
- Và người phù hợp nhất để đảm nhiệm vai trò này chính là lập trình viên kỳ cựu
- Tóm lại, ngay cả công cụ AI tiên tiến nhất cũng được khai thác hiệu quả nhất khi dựa trên các thực hành phát triển truyền thống và kinh nghiệm tích lũy
Ba yếu tố cốt lõi cho một phiên lập trình AI thành công
- Để hợp tác với AI và đạt kết quả tốt, ba yếu tố sau đây là rất quan trọng:
- Tài liệu hóa yêu cầu chặt chẽ (Well-structured Requirements)
- Guardrail chất lượng dựa trên công cụ (Tool-based Guard Rails)
- Kỹ thuật keyframing dựa trên tệp (File-based Keyframing)
- Trước khi đi vào giải thích chi tiết, tác giả giới thiệu các ví dụ dự án thực chiến có sử dụng AI
- Dự án Green-field: dự án được xây mới hoàn toàn từ đầu
- Dự án Brown-field: dự án bổ sung tính năng mới trên một codebase hiện có
- Trong cả hai trường hợp, trọng tâm là những ví dụ mà AI đảm nhiệm gần như toàn bộ phần triển khai
- Không chỉ là AI đóng vai trò hỗ trợ autocomplete hay trợ lý hội thoại, mà tập trung vào cách AI thực sự thực hiện công việc trong agent mode
- Công cụ được sử dụng là Cursor,
- dựa trên mô hình Claude Sonnet 3.7 của Anthropic
- cung cấp khả năng trực tiếp chỉnh sửa toàn bộ tệp trong dự án và chạy cả các lệnh liên quan
Ví dụ 1: Platform Problem Monitoring (dự án Green-field)
- Tác giả đã dùng Cursor và Claude để triển khai một ứng dụng mới là Platform Problem Monitoring
- Mã nguồn: liên kết GitHub
- Ứng dụng này kết nối đến máy chủ Elasticsearch của ELK mỗi giờ để thu thập thông báo lỗi, rồi gửi email report có cấu trúc tóm tắt tình trạng sự cố hiện tại của nền tảng web
- Toàn bộ phần triển khai do AI thực hiện, không có dòng mã nào được tác giả tự viết
- Tác giả không quen thuộc với ngôn ngữ Python,
- nhưng nhờ hiểu biết rộng về kiến trúc, vận hành và best practice nên vẫn có thể triển khai thuận lợi
- Đây là cơ hội để thử nghiệm AI có thể hỗ trợ đến mức nào trên một stack công nghệ không quen thuộc
Lưu ý: vấn đề chất lượng mã
Trong phần thảo luận trên HackerNews, đã có ý kiến chỉ ra các vấn đề về chất lượng mã như cấu hình logging, parsing cấu hình tùy chỉnh, race condition, v.v. Dự án này đặt mục tiêu tạo prototype nhanh hơn là viết mã production, và tập trung vào triển khai chức năng hơn là khả năng bảo trì dài hạn hay quy ước ngôn ngữ
Ví dụ 2: Process Management UI Integration (dự án Brown-field)
- Đây là trường hợp tích hợp UI cho một chức năng backend legacy hiện có dựa trên PHP/Symfony
- Backend được vận hành bằng các lệnh CLI dựa trên cron và không có UI
- Tác giả muốn tích hợp chức năng này vào một ứng dụng Symfony hiện đại
- tận dụng cấu trúc thân thiện với UI với codebase hiện đại, hệ thống test và style guide sẵn có
- Nội dung công việc chính:
- Giao tiếp với hệ thống legacy qua HTTP API
- Triển khai truyền dữ liệu giữa các hệ thống
- Xây dựng giao diện phù hợp với design system của UI
- Triển khai API client trong Symfony bundle dùng chung
- Ngoại trừ các tệp keyframe, toàn bộ phần triển khai đều được AI tự động thực hiện
Những insight cốt lõi rút ra từ hai dự án
- Dự án Green-field: Ngay cả với stack công nghệ không quen thuộc, vẫn có thể xây dựng một ứng dụng hoạt động được nhờ sự hỗ trợ của AI
- Dự án Brown-field: Dù việc triển khai UI không phải sở trường, nhờ AI mà vẫn có thể hoàn thiện tính năng rất nhanh
- Qua hai ví dụ này, tác giả cảm nhận rõ rằng công cụ AI có thể tạo ra thay đổi thực chất cho năng suất cá nhân và workflow của cả đội ngũ
- Tuy nhiên, để AI thực sự giúp tiết kiệm nhiều thời gian, cần có đầu tư thiết lập ban đầu và cách tiếp cận mang tính chiến lược
- Cần vận hành theo cách tương tự như khi dẫn dắt một junior giỏi để đạt được kết quả tốt nhất
Tầm quan trọng của việc viết yêu cầu một cách chặt chẽ
- Trọng tâm của một phiên lập trình AI thành công là tài liệu yêu cầu có cấu trúc và bao quát
- Trong dự án thực tế Platform Problem Monitoring, trước khi bắt đầu phiên làm việc, tác giả đã viết tài liệu REQUIREMENTS.md
- Tài liệu này gồm tổng cộng 371 dòng và tuân theo cấu trúc phân cấp như sau
- Mức cao nhất: tóm tắt yêu cầu cốt lõi trong một dòng
- Mức cao: use case và động cơ phát triển
- Mức trung: quy trình và cách vận hành
- Mức trung: kiến trúc, stack công nghệ và các ràng buộc
- Mức thấp: mô tả chi tiết từng bước công việc theo đầu vào/đầu ra/tác dụng phụ
- Một tài liệu được cấu trúc như vậy cũng cung cấp cho AI một framework rõ ràng để dẫn đến kết quả chính xác hơn
- Việc viết tài liệu tốn thời gian và công sức, nhưng là khoản đầu tư thiết yếu để triển khai thành công
- Có một câu châm ngôn trong phát triển phần mềm:
“6 tuần triển khai giúp tiết kiệm 2 giờ lập kế hoạch”
- Đây là cách nói châm biếm, nhưng hàm chứa sự thật rằng những kém hiệu quả ở giai đoạn triển khai thường bắt nguồn từ việc lập kế hoạch thiếu đầy đủ
- Vì thế, dự án luôn phải bắt đầu từ bảng trắng chứ không phải bàn phím, và nguyên tắc này cũng áp dụng y hệt khi cộng tác với AI
- Trong thực tế, tác giả bắt đầu một phiên Cursor theo các bước sau:
- Yêu cầu AI tự tóm tắt lại yêu cầu
- Yêu cầu tạo kế hoạch thực hiện
- Khuyến khích AI đặt câu hỏi về những phần chưa rõ
- Chỉ sau giai đoạn xác minh này, AI mới được chuyển sang chế độ “Agent” để bắt đầu triển khai
Thiết lập guardrail chất lượng dựa trên công cụ
- Nếu tài liệu yêu cầu định nghĩa đích đến, thì guardrail chất lượng sẽ giúp giữ lộ trình ngắn nhất tới đích đó
- Cũng giống như tầm quan trọng của hệ thống phản hồi thời gian thực trong quá trình phát triển, các công cụ phân tích tĩnh cũng rất hữu ích với AI
- Ví dụ, phát hiện thiếu kiểm tra null ngay trong giai đoạn phát triển sẽ hiệu quả hơn nhiều so với việc chỉ nhận ra sau khi ra mắt thông qua câu hỏi từ khách hàng
- Vì vậy, trước khi bắt đầu một phiên lập trình AI, tác giả luôn thiết lập sẵn các công cụ đảm bảo chất lượng như sau
- Dựa trên ví dụ Makefile:
black,isort: format mãruff: lintmypy: kiểm tra kiểubandit: phân tích bảo mật- Toàn bộ test suite
- Dựa trên ví dụ Makefile:
- Các AI agent dựa trên Claude có thể nhận diện và sử dụng các công cụ này
- Ví dụ: nếu kiểm tra kiểu thất bại, AI sẽ tự sửa mã để vượt qua
- Để xác minh chức năng, tác giả cũng cung cấp các lệnh
curlđể gửi request test API- Việc AI tự gọi endpoint, kiểm tra response và cải thiện mã là điều rất ấn tượng
- Những guardrail dựa trên công cụ như vậy là thành phần thiết yếu giúp AI tạo ra kết quả đáng tin cậy
Kỹ thuật keyframing dựa trên tệp
- AI mạnh ở khâu triển khai sáng tạo, nhưng có thể thiếu định hướng về cấu trúc mã hay cách tổ chức tệp
- Để bù đắp điều này, tác giả dùng chiến lược file-based keyframing
- Kỹ thuật này lấy cảm hứng từ phương pháp keyframe trong sản xuất hoạt hình:
- Một animator giàu kinh nghiệm sẽ tạo ra các cảnh quan trọng (keyframe) trước, còn phần còn lại sẽ do nhân lực hỗ trợ điền vào
- Nhờ đó có thể nâng cao hiệu quả làm việc mà vẫn giữ được chất lượng
- Trong các dự án lập trình AI thực tế, trước khi triển khai, tác giả tạo sẵn các tệp khung rỗng (stub files)
- Ví dụ: API endpoint, API client, lớp controller, template Twig, v.v.
- Những tệp keyframe này cung cấp cho AI thông tin ngữ cảnh quan trọng như:
- Cách tổ chức tệp của dự án
- Cấu trúc namespace
- Quy ước đặt tên
- Mẫu mã nhất quán
- Thay vì giải thích toàn bộ cấu trúc trong prompt, việc đưa gợi ý trực tiếp vào codebase giúp tăng độ chính xác trong suy luận của AI
- Cách tiếp cận này cũng nhấn mạnh nguyên tắc “đặt tên” vẫn rất quan trọng ngay cả trong thời đại AI
- Vì AI hoạt động dựa trên ngôn ngữ, văn bản chứa đựng ý định và ý nghĩa sẽ dẫn tới kết quả tốt hơn
Ứng dụng tích hợp qua ví dụ thực tế: triển khai UI dashboard hợp đồng thuê bao
- Tác giả giới thiệu một ví dụ thực chiến áp dụng tích hợp ba nguyên tắc cốt lõi đã nêu ở trên trong cùng một dự án:
- Tài liệu hóa yêu cầu chặt chẽ
- Guardrail chất lượng dựa trên công cụ
- Kỹ thuật keyframing dựa trên tệp
-
Tổng quan dự án
- Mục tiêu: triển khai dashboard web UI chỉ đọc để trực quan hóa thông tin hợp đồng thuê bao dưới dạng bảng trong nền tảng
- Đối tượng: môi trường đa codebase (monorepo)
backend-app: ứng dụng Symfony 5, lưu trữ dữ liệujanus-christophorus: ứng dụng Symfony 7, cung cấp UIjanus-shared-bundle: bao gồm triển khai API clientjanus-webui-bundle: bao gồm style guide, cấu hình Tailwind và template Twig
-
Cấu trúc yêu cầu
- Đọc dữ liệu backend qua API và hiển thị trên UI frontend
- Hỗ trợ demo mode ngoài endpoint API thực tế (cung cấp dữ liệu giả để test)
- UI được triển khai nhất quán với style guide
- Mỗi tầng được triển khai bằng các thành phần sau:
- API endpoint
- API client
- Lớp service ở tầng presentation
- Controller và template Twig
-
Chuẩn bị trước cho phiên AI
- Tạo sẵn các tệp rỗng trong mọi codebase theo cách file-based keyframing
- Cung cấp style guide hiện có, navigation service và các tính năng tương tự làm tài liệu tham chiếu cho AI
- Có thể chạy các công cụ chất lượng (như PHPStan) trong từng codebase
- Ví dụ: dùng script
.dxcli/dxcli.sh quality
- Ví dụ: dùng script
-
Cách sử dụng kết hợp các nguyên tắc
- Sắp xếp yêu cầu: mô tả chi tiết yêu cầu và cấu trúc hệ thống trong prompt
- Cung cấp guardrail: kèm hướng dẫn sử dụng các công cụ kiểm tra mã
- Cung cấp keyframe: tạo sẵn các tệp cần triển khai để AI có thể viết mã đúng vị trí và đúng ngữ cảnh
-
Mục tiêu chính
- Nhanh chóng cung cấp UI giúp nắm bắt tổng thể thông tin hợp đồng
- Cung cấp cấu trúc và gợi ý rõ ràng để AI có thể đặt câu hỏi và lập kế hoạch trong quá trình triển khai thực tế
- Ví dụ này cho thấy rất rõ mức độ cộng hưởng mạnh mẽ có thể đạt được khi công cụ AI và kinh nghiệm con người cùng hợp tác
Kết luận: Công cụ AI + kinh nghiệm con người = tổ hợp tốt nhất
- Bằng cách cung cấp yêu cầu chặt chẽ, guardrail dựa trên công cụ và keyframe dựa trên tệp, có thể tận dụng sức mạnh của AI mà vẫn duy trì được chất lượng mã và tính nhất quán kiến trúc
- Những thực hành phát triển truyền thống này vẫn còn nguyên giá trị trong thời đại AI, và thậm chí còn phát huy hiệu quả lớn hơn thông qua kinh nghiệm và insight của lập trình viên kỳ cựu
- Cuối cùng, AI chỉ là công cụ, và đây là thời đại mà kinh nghiệm và kỹ năng của con người biết cách sử dụng công cụ đó đúng đắn trở nên quan trọng hơn bao giờ hết
1 bình luận
Ý kiến trên Hacker News
Một lập trình viên Python giàu kinh nghiệm sau khi xem xét một tệp cụ thể đã chỉ ra rằng nó đầy những lỗi điển hình của kỹ sư phần mềm mới vào nghề
load_json: kiểm tra xem tệp có tồn tại hay không rồi sau đó lại tiếp tục như thể tệp chắc chắn tồn tạiMột coder nghiệp dư có 25 năm kinh nghiệm cảm thấy LLM và vibecoding đang làm giảm tính sáng tạo
Một lập trình viên chưa đến 40 tuổi cảm thấy AI hữu ích như một công cụ giúp giảm bớt gánh nặng công việc
Một người dùng cảm thấy việc tạo mã bằng AI là không hiệu quả
Có ý kiến cho rằng AI hữu ích với dự án mới (greenfield) nhưng kém hiệu quả với dự án hiện có (brownfield)
Một lập trình viên lập kế hoạch bằng tệp Markdown khi bắt đầu dự án
Một người dùng cho rằng kinh nghiệm kỹ nghệ phần mềm rất quan trọng trong thời đại AI
Một người dùng muốn áp dụng khái niệm "bất ngờ" trong lý thuyết thông tin vào LLM
Một người dùng muốn dùng phát triển hướng kiểm thử (TDD) để dẫn dắt mã do AI tạo ra
Một người dùng lo rằng hình thái hiện tại của AI không phù hợp với hướng đi tương lai của phần mềm
Một người dùng cảm thấy AI đang phát triển quá nhanh nên có thể gây choáng ngợp