76 điểm bởi xguru 2025-01-13 | 11 bình luận | Chia sẻ qua WhatsApp
  • GenAI (LLM) đang nâng cao năng suất của các lập trình viên nhờ khả năng tự động sinh và hỗ trợ viết mã
  • Trước đây cũng từng có các công cụ “không cần lập trình”, nhưng rốt cuộc trong quy trình kỹ thuật phần mềm thực tế vẫn luôn tồn tại độ phức tạp riêng không thể loại bỏ
  • Sau khi ChatGPT ra mắt, tốc độ phát triển nhanh của các công cụ AI trở nên rất rõ rệt, nhưng thay vì thay đổi mang tính cách mạng toàn bộ quy trình, chúng chủ yếu đóng vai trò rút ngắn mạnh một số bước trong từng bài toán cụ thể

Cách các lập trình viên thực sự sử dụng đang chia thành hai nhánh

  • Bootstrappers
    • Dùng các công cụ như Bolt, v0, Screenshot-to-code để nhanh chóng hiện thực hóa dự án mới hoặc MVP
    • AI tạo ra một codebase ban đầu hoàn chỉnh từ thiết kế (như Figma) hoặc từ một ý tưởng thô
    • Tạo ra nguyên mẫu hoạt động được chỉ trong vài ngày hoặc vài giờ
    • Dù chưa hoàn thiện ở mức production, nó rất mạnh trong việc kiểm chứng ý tưởng
    • Ưu tiên xác thực nhanh và lặp lại liên tục
  • Iterators
    • Sử dụng Cursor, Cline, Copilot, WindSurf... trong quy trình phát triển hằng ngày
    • Dùng AI cho tự động hoàn thành mã, refactor phức tạp, tạo test và tài liệu
    • Giao cho AI các việc như test phức tạp, tài liệu hóa, refactor, nhưng vẫn liên tục kiểm tra kết quả
    • Sử dụng như một “lập trình viên pair” cùng giải quyết vấn đề
    • Lặp đi lặp lại việc chọn, chỉnh sửa và bổ sung các đề xuất của AI để tiến hóa thành đoạn mã tối ưu

Vấn đề 70%: độ khó của “30% cuối cùng” - nghịch lý đường cong học tập của AI

  • AI có thể tạo mã rất nhanh đến khoảng 70%, nhưng 30% cuối cùng lại là điểm nghẽn lớn
  • Xuất hiện vòng luẩn quẩn kiểu sửa một lỗi nhỏ thì lại làm hỏng một phần khác
  • Đặc biệt, người không học chuyên ngành hoặc junior rất dễ chấp nhận toàn bộ mã do AI đề xuất và gây ra chuỗi vấn đề liên tiếp
    • Họ khó xác định vì sao các chỉnh sửa AI đề xuất lại gây ra vấn đề
  • Lập trình viên senior giàu kinh nghiệm có thể nhanh chóng suy luận nguyên nhân lỗi, tái cấu trúc mã, đồng thời bổ sung các yếu tố bảo mật và hiệu năng mà AI bỏ sót
    • Dù tích cực tận dụng AI, họ vẫn không ngừng review và refactor để biến nó thành “mã có thể bảo trì”
  • Nếu junior hoặc người không phải lập trình viên vô thức chấp nhận mã do AI sinh ra, sẽ có nguy cơ tạo nên “mã nhà bài” dễ sụp đổ trong môi trường vận hành thực tế
  • Nghịch lý tri thức
    • Senior có thể cùng AI triển khai nhanh những vấn đề mà họ vốn đã hiểu
    • Junior cần học thông qua AI, nhưng nếu thiếu kiến thức nền tảng thì sẽ gặp khó lớn trong khâu debug và xác minh

Các mẫu sử dụng hiệu quả

  • AI phác thảo trước rồi tinh chỉnh
    • Khi AI thực hiện phần triển khai ban đầu, con người sẽ trực tiếp review, refactor và test nó
    • Thêm thủ công xử lý lỗi và các trường hợp ngoại lệ, đồng thời tăng cường test tự động và quy trình review để nâng độ tin cậy
    • Tăng cường tính mô-đun, xử lý lỗi, định nghĩa kiểu và thiết kế kiến trúc để bảo đảm khả năng bảo trì
  • Duy trì hội thoại theo từng đơn vị công việc
    • Thay vì đưa toàn bộ ngữ cảnh lớn cùng một lúc, hãy dùng prompt độc lập cho từng vấn đề nhỏ để nhận câu trả lời tập trung hơn
    • Review và commit thay đổi thường xuyên, phản ánh phản hồi theo các chu kỳ ngắn
  • Cách tiếp cận “tin nhưng phải kiểm chứng”
    • Để AI tạo bản nháp, nhưng các logic quan trọng, xử lý lỗi và vấn đề bảo mật thì con người phải tự lo
    • Luôn viết test case và kiểm tra kỹ hiệu năng, bảo mật, tính hợp lý về cấu trúc

Hàm ý dành cho lập trình viên

  • Bắt đầu từ nhỏ
    • Hãy thử dùng AI với các tác vụ nhỏ được định nghĩa rõ và các bài toán có phạm vi rõ ràng, rồi kiểm tra cẩn thận mã được sinh ra
    • Trước khi chuyển sang tính năng quy mô lớn, cần chuẩn bị kỹ test và tài liệu, sau đó mở rộng phạm vi từng bước
  • Duy trì tính mô-đun
    • Tách codebase hợp lý để phần mã do AI tạo ra không bị lẫn lộn về mặt cấu trúc
    • Chia file và tính năng thành các đơn vị nhỏ, định nghĩa rõ giao diện và luồng phụ thuộc
  • Tin vào kinh nghiệm
    • Hãy dùng AI như trợ thủ, nhưng lấy kinh nghiệm của bản thân làm tiêu chuẩn cho phán đoán cuối cùng
    • Nên nghi ngờ những đoạn mã hay thiết kế đáng ngờ và tuân thủ các tiêu chuẩn kỹ thuật

Sự trỗi dậy của kỹ thuật phần mềm agentic

  • Nếu trước đây các công cụ AI chỉ dừng ở mức tạo mã để đáp lại lệnh, thì sắp tới chúng sẽ tiến hóa theo khái niệm agentic
    • AI dạng agent có thể tự lập kế hoạch, thực thi và xác minh mục tiêu, vận hành tự chủ hơn
  • Claude (Anthropic), Cline... đã vượt qua mức tự động hoàn thành đơn thuần, có thể tự mở trình duyệt và chạy test
  • Quy trình debug cũng sẽ thay đổi
    • Agent có thể tự tìm vấn đề tiềm ẩn, chạy bộ test và thậm chí kiểm tra trạng thái UI để đề xuất bản sửa
  • Các công cụ tương lai sẽ không chỉ xử lý mã
    • Chúng có thể hiểu và tích hợp nhiều kênh đầu vào như ảnh chụp UI, sơ đồ, hội thoại bằng giọng nói
  • Trong dòng chảy này, việc nhà phát triển cần làm là
    • Để AI sáng tạo trong quá trình làm việc, nhưng vẫn bảo đảm nó nhận được hướng dẫn từ con người và hoạt động trong một kiến trúc lành mạnh
    • Xây dựng vòng phản hồi mạnh mẽ giữa con người và AI
  • Dự kiến sẽ xuất hiện mô hình hợp tác trong đó con người đặt ra khung lớn và mục tiêu, còn agent xử lý các công việc chi tiết
  • Giống như câu “ngôn ngữ lập trình quan trọng nhất là tiếng Anh”, năng lực diễn đạt yêu cầu bằng ngôn ngữ tự nhiên một cách rõ ràng và chính xác sẽ ngày càng quan trọng

Tinh thần thủ công của kỹ nghệ phần mềm sẽ quay trở lại?

  • Nhờ AI, nguyên mẫu và bản demo có thể được tạo ra rất nhanh
  • Tuy nhiên, khi người dùng thực bắt đầu sử dụng phần mềm trong nhiều môi trường và edge case khác nhau, vấn đề sẽ xuất hiện
    • Thông báo lỗi mà người dùng không thể hiểu nổi
    • Các môi trường đặc biệt gây ra xung đột (edge case)
    • Thiết kế hoàn toàn không cân nhắc đến khả năng tiếp cận (Accessibility)
    • Vấn đề hiệu năng trên thiết bị chậm
    • Những chi tiết như UI/UX quyết định chất lượng
  • Từ góc nhìn người dùng, để trở thành một sản phẩm được “polish” tốt thì cần sự tỉ mỉ và quan tâm mang tính con người
  • Nếu AI giảm bớt các công việc lặp lại, lập trình viên có thể tập trung hơn vào chất lượng hoàn thiện ở những chi tiết như vậy
    • Có thể dành nhiều thời gian hơn cho trải nghiệm người dùng, edge case, xử lý lỗi có ý nghĩa và các lĩnh vực vừa mang tính con người vừa đòi hỏi chuyên môn

Một số suy nghĩ bổ sung

  • Quy trình kỹ thuật phần mềm gồm nhiều lĩnh vực như lập kế hoạch, thiết kế, triển khai, xác minh, giám sát, bảo trì..., và hiện tại AI chủ yếu giúp tăng hiệu quả rất lớn ở phần “viết mã”
  • Trước đây cũng đã có nhiều nỗ lực như COBOL, Visual Basic, nền tảng No-code... với lời hứa “người không phải lập trình viên cũng có thể dễ dàng tạo phần mềm”, nhưng khi độ phức tạp tăng lên thì cuối cùng vẫn cần các lập trình viên lành nghề
  • Công cụ LLM càng làm lượng mã tăng bùng nổ, các dự án phức tạp càng có khả năng cần nhiều kỹ sư senior hơn
  • Các lập trình viên giàu kinh nghiệm biết cách dùng AI có thể nâng giá trị của bản thân hơn nữa
  • Tóm lại, thay vì thay thế hoàn toàn lập trình viên, các công cụ AI nhiều khả năng sẽ tiến hóa theo hướng làm cho những lập trình viên có insight và kinh nghiệm trở nên mạnh hơn

Một số suy nghĩ bổ sung (bao gồm bình luận của Gergely)

  • Trong kỹ thuật phần mềm, bản thân việc coding từ trước đến nay vốn không chiếm tỷ trọng lớn đến thế
  • Trước đây, Fred Brooks từng ước tính thời gian làm phần mềm được phân loại примерно như sau
    • ⅓ lập kế hoạch
    • ⅙ coding
    • ¼ test thành phần và hệ thống
    • ¼ test hệ thống (toàn bộ thành phần bằng tay)
  • Theo góc nhìn hiện tại, thời gian coding (bao gồm test) đã tăng lên, nhưng lập kế hoạch, code review, giám sát, rollout... vẫn chiếm tỷ trọng quan trọng
    • 20% lập kế hoạch
    • 40% coding (mã + test)
    • 20% code review (mã của người khác)
    • 20% chuẩn bị production + rollout + các chỉnh sửa nhỏ trong giai đoạn này + giám sát + cảnh báo
  • Quy trình tạo ra phần mềm tốt
    • 1. What: quyết định sẽ làm gì
      • Bao gồm brainstorming, thiết kế, kiểm thử người dùng, hợp tác với product manager và các bên liên quan trong kinh doanh
      • Với startup, giai đoạn này có thể rất ngắn (“cứ làm thử rồi xem phản ứng”)
      • Với công ty đã ổn định, có thể cần nhiều thời gian hơn để quyết định làm gì nhằm tránh gây rối cho khách hàng hiện tại
    • 2. How: lên kế hoạch làm như thế nào
      • Thiết kế cụ thể cách triển khai sản phẩm/tính năng/dịch vụ
      • Cân nhắc ảnh hưởng đến kiến trúc, phụ thuộc và chiến lược test
      • Startup có thể bỏ qua bước này để vào làm ngay, nhưng ở tổ chức lớn, bỏ qua thiết kế trước có thể dẫn đến vấn đề lớn về sau
      • Phần lớn các nhóm vẫn đi qua một mức độ lập kế hoạch nhất định bằng Design doc, RFC, ADR...
    • 3. Build: triển khai tính năng thực tế
      • Viết mã cho tính năng/sản phẩm mong muốn và xác nhận nó hoạt động đúng
    • 4. Verify: xác minh
      • Trước khi triển khai lên production, kiểm tra kỹ xem nó có hoạt động như dự kiến không
      • Đặc biệt với các dịch vụ tài chính, nơi lỗi vận hành có thể gây hậu quả nghiêm trọng, quy trình QA sẽ được thực hiện rất chặt chẽ
    • 5. Ship it: phát hành
      • Merge thay đổi và phát hành cho khách hàng
      • Có nhiều cách khác nhau để triển khai lên production
    • 6. Monitoring and oncall: giám sát và trực on-call
      • Khi sản phẩm có vấn đề, phải phát hiện và xử lý ngay
      • Đồng thời cũng thực hiện các biện pháp hậu kiểm để cùng một sự cố không tái diễn
    • 7. Maintain: bảo trì
      • Thu thập phàn nàn và phản hồi từ người dùng, quyết định lỗi nào cần sửa và cải tiến tính năng nào cần ưu tiên
      • Cũng bao gồm quá trình lọc bỏ những phản hồi có thể bỏ qua
    • 8. Migrate: di trú
      • Khi bản thân sản phẩm thay đổi lớn hoặc tech stack thay đổi, có thể cần một đợt migration quy mô lớn
    • Công cụ AI hiện hỗ trợ rất nhiều cho giai đoạn “Build”, nhưng cũng cần suy nghĩ xem chúng sẽ hữu ích đến đâu ở 7 phần còn lại nêu trên
  • Từ những năm 1960 đến nay, giấc mơ “người không phải lập trình viên cũng có thể tạo phần mềm mà không cần lập trình viên” vẫn liên tục quay lại
    • COBOL, Visual Basic, No-code là những ví dụ tiêu biểu
    • Với website đơn giản, thậm chí có thể làm mà không cần coding, nhưng với sản phẩm phức tạp thì công việc kỹ thuật vẫn cần thiết
  • Khi khả năng biểu đạt tăng lên, độ phức tạp cũng tăng theo vì phải chỉ dẫn cho AI rất chi tiết về “nó phải hoạt động như thế nào”
  • AI càng tạo ra nhiều mã, nhu cầu về kỹ sư chuyên môn có thể bảo trì nó và xử lý kiến trúc nhiều khả năng càng tăng chứ không giảm
  • Những lập trình viên senior ngày nay biết cách làm việc với LLM càng có năng suất cao và càng tạo ra giá trị lớn hơn cho doanh nghiệp

AI agent: một lời hứa lớn nhưng trong năm 2025 vẫn là “vùng chưa biết”

  • Sau 2 năm kể từ khi LLM ra mắt, nhiều lập trình viên đã học được cách tận dụng LLM cho coding và kỹ thuật phần mềm
  • LLM đóng góp lớn trong các công việc như làm nguyên mẫu, chuyển sang ngôn ngữ lạ, xác minh độ chính xác của kết quả và phát hiện các câu trả lời sai (hallucination)
  • Tuy nhiên, AI agent vẫn đang ở giai đoạn đầu
    • Hiện tại agent có thể dùng phổ biến gần như chỉ có Devin, với chi phí 500 USD/tháng và đánh giá còn trái chiều
  • Khi dòng vốn đầu tư mạo hiểm đổ vào, dự kiến sẽ xuất hiện thêm nhiều công cụ AI coding agent hơn
    • Giá cả cũng nhiều khả năng sẽ dần giảm
    • GitHub Copilot có vẻ sẽ cung cấp rộng rãi Copilot Workspace dựa trên agent trong năm 2025
    • /dev/agents do cựu CTO của Stripe thành lập cũng dự kiến ra mắt
  • AI agent theo đuổi độ chính xác cao hơn bằng cách chấp nhận phản hồi chậm hơn (quy trình “suy nghĩ”) và chi phí cao hơn
    • Trên thực tế, cách tiếp cận này cải thiện độ chính xác đến mức nào và sẽ mang lại bước nhảy năng suất lớn trong những trường hợp kỹ thuật nào thì vẫn còn là ẩn số

Khả năng nhu cầu với kỹ sư phần mềm lành nghề sẽ tăng lên

  • Các kỹ sư phần mềm lành nghề (senior trở lên) có thể sẽ còn cần thiết hơn hiện nay
    • Họ có thể xử lý công cụ AI hiệu quả hơn, biết “kết quả xuất sắc” trông như thế nào và có thể “ra lệnh” chính xác
    • Khi phát hiện việc sinh mã sai, họ có thể phán đoán điểm cần dừng quá trình sinh và trực tiếp sửa source code
  • Với sự trợ giúp của công cụ AI, lượng mã được viết ra sẽ lớn hơn rất nhiều, và ngày càng nhiều cá nhân/doanh nghiệp có thể tự xây dựng giải pháp của riêng mình
    • Nhưng độ phức tạp càng tăng thì càng cần các kỹ sư lành nghề có thể kiểm soát nó
    • Các công ty công nghệ hiện hữu cũng có khả năng cần thêm nhân lực để xử lý độ phức tạp gia tăng do AI mang lại
  • Nếu kỹ sư phần mềm phát triển được năng lực làm việc cùng AI, họ có thể trở thành những kỹ sư năng suất hơn và có giá trị hơn
    • Vì cần thời gian để thực sự “thuần hóa” công cụ, điều quan trọng là phải tích cực thử nghiệm và học hỏi trong một môi trường công cụ thay đổi rất nhanh

11 bình luận

 
logone72 2025-01-20

Đúng là một bài viết có nội dung rất hay.

 
youngmuk 2025-01-20

Tôi rất đồng cảm với đoạn cuối, "khả năng nhu cầu đối với các kỹ sư phần mềm lành nghề sẽ tăng". Ý là biết đến đâu thì dùng tốt đến đó, đúng không? ^^

 
wkang586 2025-01-20

Giống như Expo 52, ở những lĩnh vực gần đây đã xảy ra thay đổi lớn thì ngay cả Claude thông minh cũng không giúp được nhiều.
Tôi từng có trải nghiệm nó cứ liên tục đề xuất những đoạn mã cũ kỹ đã biến mất, thành ra còn gây cản trở hơn.
Có lẽ AI vẫn chỉ có thể được sử dụng đúng cách khi người dùng đã được rèn luyện "con mắt nhìn".

 
scari 2025-01-13

Chuyện nhỏ thôi nhưng theo tôi biết thì /dev/agents không phải là một coding agent. Dù vẫn chưa ra mắt, họ đang tự giới thiệu mình là "OS dành cho các AI agent".

 
ethanhur 2025-01-13

Cá nhân tôi nghĩ và đang đặt cược rằng trong tương lai (hoặc theo quan điểm nào đó là trong trung hạn), vai trò coder sẽ thu hẹp lại trong công việc của mọi kỹ sư, còn vai trò TPM sẽ được mở rộng.

Vì Cursor viết code tốt hơn, nên chúng ta sẽ giao việc đó cho nó, còn con người có lẽ sẽ đảm nhiệm phần lớn công việc ở lớp trừu tượng hóa phía trên.

 
spilist2 2025-01-13

Cảm ơn bạn đã chia sẻ. Gần đây tôi cũng có viết một bài liên quan, và thấy có vài điểm khá tương đồng. https://www.stdy.blog/can-junior-beat-coding-agent/

 
bemong1 2025-01-13

Tóm tắt: Tương lai của lập trình viên trong kỷ nguyên AI (phiên bản lạc quan)

 
cwforum0340 2025-01-14

?? : giờ thì khỏi cần lập trình viên nữa rồi (phiên bản công ty quèn)

 
tsboard 2025-01-17

Trời ơi hahahaha

 
kaykim 2025-01-14

1+ haha

 
roxie 2025-01-13

haha 100 điểm