Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung)
Điểm AI 58/100

Quan điểm

Một tháng 'cai' AI: Khi lập trình viên nhận ra mình đang mất kiểm soát

(giờ Việt Nam)

Tóm tắt AI

Sau khi nhận thấy sự phụ thuộc quá mức vào AI khiến bản thân không hiểu code mình viết, một lập trình viên đã quyết định ngừng dùng AI trong một tháng. Kết quả cho thấy hiệu suất không hề giảm sút, đồng thời cảnh báo về những rủi ro khi quá tin tưởng vào các AI agent.

Chính văn · Bản dịch AI

Vài tháng trước, tôi quyết định rằng các đóng góp từ AI sẽ không còn được chào đón trong một dự án FOSS mà tôi đang xây dựng và duy trì - LibreWeddingPlanner. Không phải vì dự án nhận được nhiều đóng góp từ AI — thực tế tất cả những gì tôi nhận được chỉ là các bản dịch và yêu cầu tính năng — mà vì tôi muốn tránh những rắc rối trong tương lai và giữ vững lập trường phản đối AI.

Tuy nhiên, mặc dù tôi không sử dụng AI cho các đóng góp FOSS của mình, tôi vẫn tiếp tục dùng nó tại nơi làm việc. Ở công ty tôi, cũng như ở nhiều bạn bè làm lập trình viên, việc sử dụng AI để làm việc đã trở nên rất, rất phổ biến. Không phải không có chút xấu hổ nào, hãy để tôi kể cho bạn nghe về trải nghiệm này, và việc nó đã khiến tôi trở nên kém cỏi, lười biếng và là một lập trình viên tồi tệ hơn như thế nào.

Khởi đầu ngọt ngào

Một người bạn bảo tôi rằng này, cậu nên thử đi, cậu sẽ cảm thấy mình rất quyền năng. Một khi đã bắt đầu dùng, cậu sẽ không thể dừng lại. Những tác vụ từng ngốn của cậu cả ngày trời, giờ chỉ mất vài giờ. Không, chúng ta không nói về cocaine, mặc dù ở một mức độ nào đó, tôi coi việc sử dụng AI là một sự nghiện ngập. Tôi bắt đầu bật tính năng tự động hoàn thiện nâng cao trong vscode (hoặc có lẽ nó tự bật?), và việc tải xuống cũng như sử dụng các mô hình tạo mã khác cứ thế tiếp diễn. Khi còn nhỏ, tôi nhớ cha mẹ mình thường dặn phải cẩn thận với những kẻ xấu mời kẹo ở cổng trường, đó không phải là kẹo, đó là ma túy. Khi ở độ tuổi đôi mươi, tôi từng đùa rằng ừ, giờ chúng nó phát miễn phí ma túy luôn nhỉ? Chà, ở độ tuổi ba mươi, tôi nghĩ có lẽ chúng thực sự làm thế đấy.

Một khi bạn bắt đầu sử dụng các tác nhân lập trình AI, mọi thứ sẽ vượt khỏi tầm kiểm soát rất nhanh chóng. Ban đầu, bạn yêu cầu AI triển khai một hàm cho mình, hoặc viết các bài kiểm thử cho một đoạn mã nhất định. Nếu bạn là một người theo đuổi TDD lâu năm, bạn sẽ có xu hướng yêu cầu nó viết các bài kiểm thử trước, để rồi sau đó bạn tự viết mã. Chỉ có điều là bạn không còn viết mã nữa, bạn chỉ yêu cầu AI làm điều đó, và một nửa mục đích của TDD (không làm chệch hướng các bài kiểm thử dựa trên cách bạn đã triển khai mã) đã biến mất. Nhưng bạn cảm thấy mình làm việc quá nhanh đến mức bắt đầu chẳng còn quan tâm nữa.

Một ngày nọ, tôi thấy tác nhân này tự động đồng ký (co-signing) vào các commit mà tôi thực hiện, và tôi đã vội vàng tắt cài đặt đó. Kiểu như, tôi muốn giả vờ rằng đoạn mã đó là của chính mình. Trời ạ.

Mất kiểm soát

Mọi chuyện sẽ không quá tệ nếu chỉ dừng lại ở đó, nhưng bộ não con người không hoạt động theo cách đó. Nếu bạn thích thứ gì đó và có thể nhận được gấp đôi, bạn sẽ lấy nó. Tôi bắt đầu sao chép toàn bộ mô tả Jira của một ticket và để AI triển khai nó cho tôi. Tuyệt thật!! Thật quyền năng!! Làm việc trên một codebase tương đối mới với tôi, tôi bắt đầu mất kiểm soát về việc những thay đổi nào thực sự cần thiết để hoàn thành tác vụ. Tôi nghĩ nếu AI, thứ đã đọc từng dòng mã trong dự án, nói rằng nó cần thiết, thì cứ thế đi. Kiểm soát chỉ là ảo tưởng. Những người khác mà tôi thảo luận cùng cũng đồng ý rằng họ không biết 100% những gì đoạn mã họ đẩy lên production thực sự làm. Tôi cá là chúng ta thậm chí còn không biết đến 20%. Đáng sợ chết đi được.

Nhưng mọi chuyện cũng không dừng lại ở đó. Khi có một tác vụ nhỏ, tôi giao nó cho AI, và trong khoảng 30 phút, tôi đã có một PR. Tôi đã làm gì trong 30 phút đó? Chuyển đổi sự tập trung. Chẳng bao lâu sau, tôi nhận ra mình có thể không chỉ có một, mà nhiều tác nhân cùng làm việc trên các tác vụ khác nhau, trong nhiều git worktree. Quyền năng tối thượng! Tokenmaxxing! Tôi kết nối các tác nhân với Jira thông qua ACLI (giao diện dòng lệnh) và chỉ cần yêu cầu chúng “làm việc trên ticket jira này trong một worktree riêng biệt”. Và nó sẽ bắt đầu làm việc. Tôi cảm thấy vô cùng phấn khích.

Khi tác vụ không quá nhỏ, bạn sẽ nghĩ tôi tự làm đúng không? Không đời nào. Tất nhiên là tôi sẽ yêu cầu AI chia nhỏ nó thành các tác vụ nhỏ hơn và thực hiện chúng. Sau đó, AI sẽ đưa cho tôi một PR cực kỳ thuyết phục với hàng loạt thay đổi mà tôi không thực sự hiểu rõ. Làm sao tôi có thể yêu cầu review mã cho những thay đổi đó được? Đồng nghiệp của tôi sẽ nói gì? Tôi sẽ nói gì khi họ (những người có kinh nghiệm hơn, đặc biệt là với codebase đó) hỏi tại sao tôi làm thế này hay thế kia? Làm sao tôi có thể thừa nhận rằng tất cả đều là do AI, và tôi chẳng là gì ngoài một kẻ chăn dắt AI? Vì vậy, tôi tự ép mình phải hiểu đoạn mã đó. Không phải vì tôi muốn hiểu kiến trúc của codebase, mà vì tôi muốn tránh sự nhục nhã khi không biết mình đang làm cái quái gì.

Đến một lúc nào đó, tôi có quá nhiều tác nhân AI đang hoạt động đến mức việc chuyển đổi sự tập trung trở nên quá sức với tôi. Có những tác vụ tôi có thể dễ dàng hoàn thành trong 20 phút, nhưng lại mất 5 phút để tác nhân AI làm, rồi mất 2 ngày để tôi review. Bởi vì có quá nhiều thứ khác nữa. Và có lẽ AI cùng máy tính giỏi trong việc chuyển đổi ngữ cảnh, nhưng tôi thì không. Tôi kiệt sức. Vì nếu chỉ là phê duyệt các PR được viết hoàn hảo thì tốt quá. Nhưng với mỗi PR, tôi phải xem mã, các bài kiểm thử, phong cách, đưa ra phản hồi, chuyển sang việc khác, quay lại, đẩy mã, xem liệu có bình luận PR nào không, liệu CI có vượt qua không, khoan đã, giờ thì linter lại phàn nàn. Và bạn mất 2 ngày để bàn giao thứ lẽ ra chỉ mất 1 giờ tập trung duy nhất. Theo kinh nghiệm cá nhân của tôi, hiệu suất nhân lên từ AI chỉ là ảo tưởng. Tuy nhiên, sự thất vọng và kiệt sức nhân lên là điều chắc chắn.

Tôi nghĩ không có một tác vụ nào tôi giao cho AI mà tôi có thể merge ngay lập tức. Tất nhiên, tôi không tự viết các commit hay mô tả PR (đây là năm 2024 rồi đấy à??), AI đã làm thay tôi, và nó đảm bảo có một mô tả dài 7 đoạn trong PR, giải thích những gì nó đã làm. Tôi ngừng đọc những mô tả đó, kiểu như, tôi đã bảo nó làm gì, tôi cho rằng nó đã làm đúng những gì tôi nói. Mô tả đó là dành cho người khác. Vì phải có mô tả mà, đúng không? AI giỏi làm cho mọi thứ nghe có vẻ chuyên nghiệp đến mức chết tiệt, khiến bạn thư giãn và cứ để mặc nó. Không phải tôi thực sự nghĩ đoạn mã đó tốt, nhưng theo thời gian bạn bị thuyết phục, bạn trở nên lười biếng, bạn trở nên tự mãn. Bạn ngừng đặt câu hỏi và bắt đầu chấp nhận là tốt cho một đoạn mã mà bạn sẽ không bao giờ chấp nhận, chỉ vì bạn không thể nói tại sao nó tệ. Bạn đã mất kiểm soát. Hầu hết các lập trình viên AI sẽ phủ nhận điều đó, nhưng sâu thẳm bên trong, họ biết đó là sự thật. Chỉ là họ không muốn đối mặt với nó.

Nhiều tháng trôi qua, và một ngày nọ tôi nhận ra mình đã không tự viết một dòng mã nào trong vài tháng. Tôi thậm chí còn không tự commit. Vô số lần tôi đã viết trong khung chat của tác nhân AI là “commit và push”. Cái. Quái. Gì. Thế. Nếu đó không phải là sự lười biếng, thì tôi không biết nó là gì nữa. AI cũng không thể giải quyết tất cả các tác vụ mà tôi giao cho nó. Thậm chí không được một nửa. Hết lần này đến lần khác, tôi phải trông chừng tác nhân AI, bảo rằng “giờ thì áp dụng mẫu này đi” hoặc “trong phần specs, hãy tách phần thiết lập kiểm thử vào một khối before, và thêm các khẳng định vào một khối khác”. Giống như tôi đang hướng dẫn một nhân viên tập sự vậy. Đừng hiểu lầm, tôi thích việc hướng dẫn, tôi đã làm điều đó nhiều năm rồi, và tôi nghĩ nó tốt cho cả người hướng dẫn và người được hướng dẫn. Nhưng tôi sẽ không đời nào trông chừng một cái máy đâu, xin lỗi nhé.

Nhiều lần, tôi nhận thấy chất lượng mã nguồn do AI viết đã giảm sút đáng kể. Không phải là nó xuất sắc ngay từ đầu, nhưng tôi có cảm giác kiểu: “Này, mày đã từng làm việc này rồi mà, sao giờ lại không làm được nữa?”. Thế là tôi phải nhắc lại để nó giải thích cách thực hiện. Hoặc gửi kèm một tệp chứa các tùy chọn ưu tiên của tôi. Được rồi, tôi hiểu ý bạn rồi, xin lỗi vì sự nhầm lẫn. Để tôi làm lại cho bạn. Và rồi nó lại tạo ra một mớ hỗn độn chẳng liên quan gì đến yêu cầu của tôi. Điều này làm tôi nhớ đến chiến lược của Google khi họ hạ thấp chất lượng kết quả tìm kiếm, buộc người dùng phải tìm kiếm nhiều lần và xem quảng cáo nhiều gấp bội. Và nếu điều đó hiệu quả với Google, tại sao nó lại không hiệu quả với AI? Đặc biệt là trong thời điểm tài chính bất ổn mà các công ty AI đang trải qua, bạn thực sự nghĩ họ sẽ không làm vậy sao? Thôi nào. Họ sẽ làm thế và còn hơn thế nữa.

Những ngày khác, tôi thấy một tác nhân (agent) bị treo suốt 30 phút mà không đưa ra câu trả lời. Phải làm gì đây? Bạn nghĩ tôi sẽ nhận nhiệm vụ đó và tự làm à? Tuyệt đối không. Tôi cầm "chiếc roi ngôn từ" lên và với giọng điệu đầy uy quyền, tôi yêu cầu nó đưa ra mã nguồn thực sự! Tác nhân AI rối rít xin lỗi và chỉ trong 20 giây, nó đã đưa ra thứ mà trước đó 30 phút nó không làm được. Tôi nhìn vào chi phí token, nó đã tiêu tốn 30 đô la cho những thứ hoàn toàn vô nghĩa. Nếu tôi là người trả hóa đơn, tôi sẽ cảm thấy vô cùng tức giận.

Giành lại quyền kiểm soát

Một tháng trước, trong phần đánh giá mã nguồn (code review) cho một PR của tôi, một đồng nghiệp đã nói đại loại như: “Đoạn test mà bạn viết này thực tế không kiểm tra kịch bản mà bạn đang thay đổi trong mã nguồn ứng dụng”. Tôi đã xem xét lại và anh ấy nói đúng. Nhưng… nó thuyết phục đến mức tôi cảm thấy xấu hổ. Bởi vì với tôi, một lập trình viên đã sử dụng TDD hơn 10 năm, việc thất bại ở một thứ cơ bản như vậy thật là một sự sỉ nhục. Tôi nhận ra mình đã mất quyền kiểm soát và mọi thứ sẽ chẳng khá hơn được. Tôi nghĩ việc cố gắng hơn nữa hay khắt khe hơn với AI là vô ích, hãy đòi hỏi chất lượng mà bạn đang phải trả tiền! Bởi vì bất chấp nỗ lực của bạn, AI cuối cùng vẫn thuyết phục được bạn và khiến bạn trở nên tự mãn một lần nữa.

Vì vậy, tôi quyết định ngừng sử dụng AI. Ngay cả khi điều đó khiến tôi mất việc.

Khi bạn lấy một bản nháp PR do AI viết và phải tự mình chỉnh sửa, bạn mới nhận ra mình đã không biết nó đang làm gì đến mức nào. Bạn bắt đầu tự hỏi liệu mình có cần cái này hay cái kia không, và cuối cùng là vứt bỏ tất cả để làm lại từ đầu. Tôi cảm thấy mình bị "cùn" đi, như thể đã lâu lắm rồi tôi không tự viết code. May mắn thay, tôi vẫn lập trình đây đó trong các dự án cá nhân, nên nỗ lực bỏ ra tuy đáng kể nhưng không đến nỗi quá tệ.

Tôi quay lại với TDD, quay lại với những PR chỉ thay đổi 5 tệp. Quay lại với những mô tả PR dài 2 dòng đi thẳng vào vấn đề. Tôi quay lại với việc hiểu rõ những gì mình đang làm, triển khai với sự tự tin, sẵn sàng cho một buổi đánh giá mã nguồn chi tiết, bởi vì tôi biết các thay đổi đó làm gì và tôi có thể giải trình từng dòng code. Tôi quay lại với việc tận hưởng các buổi đánh giá mã nguồn giữa con người với nhau (không phải với AI, tôi vẫn ghét điều đó. Thậm chí còn ghét hơn những người dán kết quả đánh giá của AI vào rồi giả vờ đó là của mình), và học hỏi từ chúng. Tôi bắt đầu đặt câu hỏi về các quyết định kiến trúc, tại sao mọi thứ lại như vậy. Tôi có thể hỏi AI, nhưng tôi thích hỏi đồng nghiệp của mình hơn.

Tôi đã tìm lại được niềm vui lập trình. Và tôi không nhìn lại phía sau nữa. Tôi sẽ không giả vờ rằng số lượng dòng code hay số lượng PR là một thước đo hợp lệ, đặc biệt là khi AI có thể viết dài dòng tùy ý để giành chiến thắng trên mọi chỉ số. Nhưng tôi có thể nói rằng tôi đang đưa ra những thay đổi quan trọng mỗi ngày, các PR được hợp nhất, và cuối ngày, công việc được hoàn thành. Và vì lý do đó, tôi không sợ bị sa thải. Thêm vào đó, tôi đang giữ cho các chức năng não bộ của mình được nguyên vẹn.

Một lời khuyên

Hãy nói không với ma túy. Một kiểu ẩn dụ, nhưng cũng không hẳn là ẩn dụ. Bước đầu tiên là nhận ra bạn đang phụ thuộc vào AI đến mức nào. Một công nghệ mà bạn không kiểm soát, và nó tiêu tốn của chủ lao động (nếu không phải của bạn) một gia tài. Bạn sẽ nói rằng quản lý của tôi mong đợi hiệu suất cao từ tôi, làm sao tôi có thể giảm hiệu suất bây giờ? Tôi không thể nói thay cho bạn, nhưng điều đó đã không xảy ra với tôi. Tôi không nghĩ mình làm việc kém hiệu quả hơn so với 2 tháng trước. Nếu có thì giờ đây tôi nhận thức rõ hơn về những gì mình đang làm, có khả năng phản ứng tốt hơn với sự cố nếu có (bởi vì này, chính tôi là người viết ra đoạn code gây lỗi đó), và càng làm việc (theo nghĩa đen, chính tôi) trên cơ sở mã nguồn, tôi càng trở thành một lập trình viên giỏi hơn. Đó là điều mà quản lý của bạn nên mong đợi ở bạn.

Và bạn sẽ tiết kiệm cho họ một khoản tiền khi các đợt cắt giảm ngân sách AI bắt đầu - vì chắc chắn chúng sẽ xảy ra, nếu chưa bắt đầu.

Nếu bạn là một lập trình viên giống tôi, chính kinh nghiệm của bạn mới là thứ mang lại công việc đó cho bạn. Nếu bạn đã có vài năm trong nghề, bạn biết rằng mình giỏi đến đâu phụ thuộc vào độ khó của các vấn đề mà bạn phải đối mặt trong sự nghiệp. Nếu bạn tắt não và thư giãn bằng việc "trông trẻ" cho AI, bạn sẽ không giỏi lên được. Bạn đang mất dần giá trị, bởi vì những gì bạn có thể mang lại, giá trị thực sự của bạn với tư cách là một kỹ sư (chứ không phải là người chăn dắt AI) sẽ giảm đi khi não bộ của bạn trở nên tự mãn và nhường quyền kiểm soát cho AI.

Hãy tỉnh dậy. Hãy dũng cảm. Hãy giành lại quyền kiểm soát.

lập trìnhAInăng suấtphát triển phần mềmkinh nghiệm

Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.

Một tháng 'cai' AI: Khi lập trình viên nhận ra mình đang mất kiểm soát | AIHOT.vn