27 điểm bởi GN⁺ 2024-12-07 | 12 bình luận | Chia sẻ qua WhatsApp
  • Có hai mô thức chính mà các lập trình viên sử dụng AI
    • Bootstrapper:
      • Sử dụng các công cụ như Bolt, v0, AI chuyển ảnh chụp màn hình thành mã để nhanh chóng tạo nguyên mẫu ban đầu.
      • Dùng AI từ điểm khởi đầu là thiết kế hoặc ý tưởng để tạo codebase ban đầu, rồi phát triển nguyên mẫu hoạt động được chỉ trong vài giờ hoặc vài ngày
    • Iterator:
      • Sử dụng các công cụ như Cursor, Cline, Copilot, WindSurf trong công việc phát triển hằng ngày để hoàn thành mã, refactor phức tạp, tạo test và tài liệu

Khác biệt trong cách dùng AI giữa lập trình viên giàu kinh nghiệm và người mới bắt đầu

  • Lập trình viên giàu kinh nghiệm: liên tục refactor mã do AI đề xuất, xử lý edge case, củng cố định nghĩa kiểu và rà soát các quyết định kiến trúc
  • Người mới bắt đầu: có xu hướng chấp nhận nguyên trạng đầu ra của AI, nên dễ tạo ra thứ mã kiểu 'ngôi nhà bằng bài' có thể gặp sự cố trong môi trường thực tế

Nghịch lý của công cụ AI: nghịch lý tri thức

  • Lập trình viên giàu kinh nghiệm: dùng AI để tăng tốc những việc họ đã biết
  • Người mới bắt đầu: cố dùng AI để học xem mình phải làm gì
  • Kết quả: hiệu quả sử dụng AI thay đổi rất lớn tùy theo mức độ thành thạo

Vấn đề 70% khi người không chuyên dùng công cụ lập trình AI

  • Tiến độ ban đầu: có thể nhanh chóng triển khai 70% tính năng mong muốn bằng công cụ AI
  • 30% còn lại: khi cố sửa các lỗi nhỏ thì lại phát sinh vấn đề mới, và trong lúc xử lý chúng có thể rơi vào vòng luẩn quẩn tạo thêm nhiều vấn đề hơn

Chiến lược để tận dụng công cụ AI hiệu quả

  • Mẫu AI tạo bản nháp: dùng AI tạo phần triển khai cơ bản rồi tự rà soát và refactor
  • Dùng AI như công cụ học tập: thông qua đối thoại liên tục để hiểu đoạn mã AI tạo ra, đồng thời học các khái niệm lập trình cơ bản và tích lũy kiến thức dần dần
  • Nhận thức giới hạn của AI: công cụ AI hữu ích cho phát triển nguyên mẫu, hỗ trợ học tập và kiểm chứng ý tưởng, nhưng để tạo ra phần mềm có thể bảo trì và sẵn sàng cho production thì vẫn cần kiến thức kỹ thuật thực sự

Sự trỗi dậy của kỹ thuật phần mềm mang tính tác tử

  • Hệ thống tác tử: đang phát triển vượt ra ngoài việc chỉ phản hồi lệnh, trở thành các hệ thống có thể lập kế hoạch, thực thi và lặp lại
  • Triển vọng tương lai: AI không thay thế lập trình viên mà đang tiến tới vai trò cộng tác viên ngày càng chủ động hơn, tôn trọng chỉ dẫn và chuyên môn của con người đồng thời chủ động giải quyết vấn đề
  • AI đặc biệt hữu ích trong việc triển khai các mẫu mà ta đã biết, tạo nguyên mẫu ý tưởng nhanh và khám phá nhiều cách tiếp cận khác nhau
  • Tự động hóa các công việc lập trình lặp đi lặp lại và thường nhật để có thể tập trung vào những vấn đề thú vị hơn

Những điểm cần lưu ý khi dùng công cụ AI

  • Tầm quan trọng của trải nghiệm người dùng: có thể dùng AI để nhanh chóng tạo bản demo, nhưng nếu không xử lý cẩn thận các thông báo lỗi, edge case, trạng thái UI có thể phát sinh khi người dùng thực tế sử dụng thì sẽ gây bất tiện cho họ
  • Sự trở lại của tinh thần thủ công:
    • AI đã giúp việc phát triển phần mềm nhanh hơn, nhưng có nguy cơ làm mất đi nghệ thuật tạo ra trải nghiệm đạt chất lượng tiêu dùng thực sự.
    • Công cụ AI có thể xử lý các công việc lập trình thường nhật để giúp lập trình viên tập trung vào những chi tiết quan trọng.

Kết luận

  • Vai trò của AI:
    • AI không phải để viết nhiều mã hơn thật nhanh, mà để giúp xây dựng phần mềm tốt hơn
    • AI không cải thiện chất lượng phần mềm một cách đột biến.
  • Phần khó của phát triển phần mềm vẫn cần đến phán đoán của con người.
  • AI cho phép khám phá nhanh để tìm giải pháp tốt hơn, nhưng không thể thay thế các thực hành phần mềm tốt.
  • Trách nhiệm của con người: việc dùng AI một cách khôn ngoan để giữ vững các nguyên tắc kỹ thuật và nâng cao chất lượng phần mềm vẫn là phần việc của con người

12 bình luận

 
dbs0829 2024-12-10

Việc tận dụng công nghệ là tốt, nhưng có quá nhiều người giao phó cả việc suy nghĩ cho nó, và điều đó càng thấy rõ hơn mỗi khi tham gia các hoạt động như giáo dục nên tôi khá lo ngại. Thành thật mà nói, tôi không muốn làm việc cùng những người như vậy.

 
kandk 2024-12-09

Có lẽ cũng tương tự như cuộc tranh luận rằng IDE làm hỏng lập trình viên..

 
savvykang 2024-12-07

Tôi mệt mỏi vì phải sửa mã AI do khách hàng tạo ra
Khi AI bắt đầu tự đưa ra phán đoán thì có vẻ như sẽ không còn lời giải nào nữa

 
iolothebard 2024-12-07

Có vẻ như khi đưa phản hồi cho AI thì nó sẽ dần tốt lên… nhưng đến một thời điểm nào đó lại hỏng. Cần có cách để bắt được đúng khoảnh khắc đó. Và khi khoảnh khắc ấy đến, phải chọn giữa việc bỏ AI hay làm lại từ đầu.

 
yadameda 2024-12-07

production-ready (trong ngữ cảnh bài viết là sẵn sàng đưa vào vận hành thực tế) thì nên dịch thế nào cho tự nhiên?

Mức độ sẵn sàng cho dịch vụ thực tế
Mức độ sản phẩm

 
kandk 2024-12-09

Sẵn sàng phát hành!

 
binaryeast 2024-12-08

Tôi thường dịch là có thể phát hành hoặc sẵn sàng phát hành.

 
jhj0517 2024-12-08

"Có vẻ như mức "có thể phát hành" là khá ổn!"

 
bus710 2024-12-08

"sẵn sàng để triển khai" (cho sử dụng thực tế hoặc cho khách hàng) thì thế nào?

 
savvykang 2024-12-07

Còn những thứ đã được kiểm chứng trong thực tế thì sao?

 
soomtong 2024-12-09

Có vẻ trong thực tế người ta thường diễn đạt việc đã được kiểm chứng thực chiến là battle tested.

 
GN⁺ 2024-12-07
Ý kiến trên Hacker News
  • AI, cũng như nhiều công cụ trước đây, đã cố gắng thay thế một phần của việc lập trình. Nhưng những công việc cốt lõi vẫn cần đến bộ não con người

    • AI không thể thực hiện các công việc bản chất như quản lý độ phức tạp
    • AI có thể giao tiếp bằng tiếng Anh nên linh hoạt hơn các nỗ lực trước đây, nhưng vẫn có giới hạn trong việc giải quyết vấn đề cốt lõi
  • AI giống như một lập trình viên junior đầy nhiệt huyết trong nhóm

    • Cả lập trình viên junior lẫn công cụ AI đều có xu hướng tạo ra nhiều bug và viết mã dài dòng
    • Vì AI không thể học từ phản hồi, nên vẫn phải liên tục rà soát các lỗi lặp đi lặp lại
  • Có thể dùng công cụ AI để nhanh chóng phát triển công cụ mới

    • Nhờ AI, những việc vốn mất vài ngày có thể hoàn thành chỉ trong vài giờ
    • Dù AI chỉ làm 70% hay 42,5% toàn bộ công việc, đó vẫn là một cải thiện lớn
  • Với lập trình viên junior, AI là con dao hai lưỡi

    • Nếu dùng AI như đường tắt cho việc học, bạn sẽ bỏ qua quá trình học hỏi
    • Nhưng nếu dùng AI như một người cố vấn, bạn có thể học sâu hơn
    • Nếu AI thay thế phần việc của lập trình viên junior, có thể sẽ phát sinh vấn đề tuyển dụng
  • Mô hình "tin tưởng nhưng phải kiểm chứng" là rất quan trọng

    • Nếu mã do AI viết có thể biên dịch và vượt qua test case, đó là một tín hiệu tích cực
    • Ví dụ, có một dự án binding csscolorparser của Rust sang Python
  • AI có thể viết mã rất nhanh, nhưng không làm quá trình học nhanh hơn

    • Với sự trợ giúp của AI, bạn có thể tiến bộ nhanh hơn, nhưng để viết được mã có cấu trúc tốt vẫn cần thời gian
  • Copilot thất bại trong các tác vụ phức tạp

    • AI đang cho thấy giới hạn về khả năng mở rộng
    • Trong tương lai có thể sẽ cần những công nghệ như điện toán lượng tử
  • GenAI có thể mang lại kết quả đủ chiều sâu với các giải pháp có yêu cầu đã được biết rõ

    • Với các vấn đề phức tạp, nó chỉ đạt hiệu quả khoảng 50%
    • Người ta đang dùng cách lập danh sách công việc chi tiết rồi giải quyết từng việc riêng lẻ
  • Việc kiểm chứng công việc của AI là rất quan trọng

    • Mã do AI đề xuất có thể chạy được, nhưng lại dùng thư viện có vấn đề bảo mật
    • Ngay cả khi mã của AI chạy được, vẫn cần phải kiểm chứng
  • Rất khó gặp được những người thực sự đã tăng mạnh năng suất nhờ AI

    • Công cụ AI tuy tiện lợi, nhưng chỉ hữu ích cho một phần của việc viết mã