Là một lập trình viên hiệu quả với công cụ code generation vẫn đòi hỏi bạn phải là một lập trình viên hiệu quả mà không có công cụ đó.
Khi Stack Overflow ra đời 15 năm trước, nó đã mang lại một bước tiến lớn cho nhiều lập trình viên. Đột nhiên, các lập trình viên có thể chia sẻ kiến thức về những lỗi lặt vặt, lỗi và các thực tiễn tốt nhất kèm theo mã nguồn có sẵn để copy và paste. Tôi biết nhiều kỹ sư ghé thăm trang này nhiều lần mỗi ngày. Nguồn tài nguyên mục tiêu này đã thay đổi cách lập trình viên làm việc.
Hiện tại đang có một thay đổi khác diễn ra. Trừ khi bạn đã sống trong trạng thái hôn mê suốt năm qua, bạn sẽ biết rằng AI tạo sinh đã làm mưa làm gió trong thế giới lập trình. Nhiều giao diện chat và plugin đang sinh mã và được đưa vào hệ thống sản xuất. GitHub Copilot, ChatGPT và nhiều công cụ khác đã mang lại cho các nhà phát triển sức mạnh của mã nguồn gần như tức thì.
Nhưng ai nghĩ rằng những công cụ này có thể biến họ thành lập trình viên siêu hạng trong một sớm một chiều sẽ nhận lấy một sự thức tỉnh khắc nghiệt. Là một lập trình viên hiệu quả với công cụ code generation vẫn đòi hỏi bạn phải là một lập trình viên hiệu quả mà không có công cụ đó. Các công cụ code generation chắc chắn sẽ mang lại nhiều người mới vào lĩnh vực phát triển phần mềm, nhưng họ vẫn cần làm việc để hiểu mã mà các giao diện chat sinh ra.
Trong bài viết này, chúng ta sẽ nói về những lợi ích thực sự mà các lập trình viên đang thấy ngày nay, đồng thời khám phá những cách mà ngay cả code generation cũng không thể giúp một nhóm không hiệu quả.
Cách code generation có thể cải thiện năng suất
Các công cụ code generation được huấn luyện trên mã hiện có. Rất nhiều mã hiện có. Chúng biết cách mã đã được viết và cách nó đã giải quyết các vấn đề trong quá khứ. Vì vậy, nếu bạn đang viết một thứ gì đó giải quyết các vấn đề phổ biến—định nghĩa kiểu (type definitions), kết nối đến cơ sở dữ liệu hoặc SDKs, định nghĩa API—code generation có thể làm điều đó dễ dàng.
Có một khái niệm trong một số ngôn ngữ gọi là scaffolding. Bạn xây dựng một mẫu mà các trình biên dịch hoặc các tính năng ngôn ngữ khác sau đó sử dụng để tạo mã thực tế. Các công cụ code generation rất giỏi trong việc scaffolding.
Thông thường, bạn sẽ tìm kiếm trên web thư viện kết nối cho ngôn ngữ bạn chọn, sau đó sao chép và dán mã ví dụ và sửa đổi nó. AI phục vụ như một công cụ sao chép và dán nâng cao hơn vì nó tùy chỉnh mã để dán cho vấn đề cụ thể của bạn. Không còn phải loay hoay với các biến và viết lại thủ công, điều mà thường xuyên dẫn đến lỗi khi chúng ta quên một dấu ngoặc đóng hoặc dấu chấm phẩy.
Trong một bài viết blog, hai nhân viên tại Figma nói về cách code generation giải quyết vấn đề trang trắng. Nó không mang lại sản phẩm hoàn thiện, nhưng nó giúp bạn tiến gần hơn—không phải từ 0 đến 1, mà từ 0 đến 0,5. Nếu bạn có một API mới truyền các blob JSON lớn đến mã TypeScript của bạn, bạn có thể nhờ AI thiết lập định nghĩa kiểu trong vài giây, thay vì gõ tay thủ công.
Nếu bạn biết mình muốn gì, code generation có thể là một lối tắt. Trong bài blog được liên kết ở trên, các nhà phát triển Figma nói rằng “code generation mang lại đòn bẩy lớn nhất khi bạn áp dụng nó theo cách cụ thể, cho đội ngũ, công ty và quy trình làm việc cụ thể của bạn.” Code generation đang làm công việc của tài liệu và mã ví dụ được scaffolded để xây dựng mã áp dụng cho tình huống cụ thể của bạn.
Nhưng mã hóa không phải là phần khó nhất đó là yêu cầu
Biết những gì bạn muốn từ phần mềm đủ cụ thể để code generation có thể tạo ra mã là một kỹ năng tự nó. Nếu bạn nhìn vào ví dụ của tôi ở trên, tôi không có ý rõ ràng về yêu cầu của mình, thậm chí ngôn ngữ nào sử dụng. Trong các cuộc trò chuyện với các kỹ sư bạn bè, họ nói rằng suy nghĩ qua các vấn đề đến mức có thể viết các prompt hiệu quả cho code generation giúp họ hiểu rõ hơn về yêu cầu và thiết kế cần thiết. Họ thậm chí có các script nội bộ giúp họ viết các prompt hiệu quả hơn trước khi tiêu tiền cho các chu kỳ LLM.
Các tổ chức kỹ thuật ngày nay muốn tạo ra phần mềm đáng tin cậy hơn bao giờ hết. Nhìn vào những nỗ lực để tạo ra nhiều và nhiều hơn các bài kiểm tra tự động, để triển khai kiểm thử hướng kiểm thử, hoặc để đưa phạm vi kiểm thử của bạn gần 100%. Nhiều công ty đang tiến thêm một bước xa hơn kiểm tra tự động—họ đang đưa AI vào hình ảnh để gợi ý các bài kiểm tra khi bạn viết mã. Code generation có thể viết các bài kiểm tra của bạn, nhưng bạn sẽ cần một ý rõ ràng về điều kiện thành công và thất bại.
Những AI này có thể làm nhiều hơn là chỉ tạo mã; chúng cũng có thể hiểu mã. Nếu bạn đang cố gắng nắm bắt nhanh chóng về một cơ sở mã, bạn có thể chuyển mã đó cho một chatbot AI và nhờ nó giải thích cách mã hoạt động. Nếu bạn không có tài liệu đáng tin cậy về mã nội bộ của mình, code generation là một lối tắt tốt. Khi bạn đã có câu trả lời, bạn có thể thêm chúng vào cơ sở kiến thức nội bộ của mình để những người khác có thể học hỏi từ nghiên cứu của bạn.
Nhưng các phản hồi của AI không hoàn toàn đáng tin cậy
Việc hoàn thành một dự án mã hóa nhanh hơn bằng cách sử dụng AI là tuyệt vời. Nhưng nó không giải quyết được một số vấn đề nhất định, và còn giới thiệu những vấn đề mới. Hiện tượng “ảo giác” (hallucinations) là một tác dụng phụ đã biết của các mô hình ngôn ngữ lớn (LLMs) và giao diện chatbot của chúng. Dù LLM có kiến thức hay chỉ là những con vẹt ngẫu nhiên vẫn còn đang tranh cãi. Mặc dù chúng có thể đưa ra các đoạn mã hoặc câu trả lời về lập trình rất uy quyền, nhưng chúng cũng có thể bịa đặt hoàn toàn.
Vì lý do đó, các nhà phát triển đã chậm tin tưởng chatbot AI. Trong Khảo sát Nhà Phát triển năm 2023 của chúng tôi, chỉ 3% số người được khảo sát tin tưởng cao vào đầu ra của các công cụ AI, với một phần tư không tin tưởng chúng. Một số người có thể nói rằng sự hoài nghi đối với bất kỳ mã nào bạn gặp phải là điều tốt (thậm chí với mã của chính bạn), nhưng thực tế là nhiều người sẽ tin vào lời của AI. Đó là một công thức cho các lỗ hổng bảo mật—nó đã xảy ra với một trong những đoạn mã phổ biến nhất trên Stack Overflow, và nó sẽ xảy ra với mã sinh ra cũng vậy.
Các nhà nghiên cứu từ Đại học Purdue phát hiện rằng ChatGPT thua kém so với các câu trả lời do con người tạo ra trên Stack Overflow. Họ phát hiện rằng, khi được hỏi một tập hợp 517 câu hỏi từ Stack Overflow, ChatGPT chỉ trả lời đúng chưa đến một nửa. Nghiên cứu cũng phát hiện rằng, ngoài việc thường xuyên sai, 77% câu trả lời quá dài dòng. Nhưng người dùng lại thích những câu trả lời đó khoảng 40% thời gian vì tính toàn diện và phong cách viết rõ ràng.
Đó là điều nguy hiểm cho bất kỳ ai không kiểm tra kỹ câu trả lời của họ. Các lỗi dễ dàng là lỗi cú pháp, và đó không phải là lỗi mà code generation tạo ra. Chúng không hiểu ngữ cảnh của câu hỏi, vì vậy chúng có thể mắc phải những sai lầm về khái niệm, tập trung vào phần sai của câu hỏi, hoặc sử dụng API, thư viện hoặc hàm sai hoặc không tồn tại.
Cuối cùng, người tham gia thường thích câu hỏi trên Stack Overflow vì tính súc tích và chính xác. Mặc dù hầu hết các LLM đã sử dụng Stack Overflow làm một phần dữ liệu huấn luyện của chúng, nhưng nghiên cứu cho thấy các bản gốc thường chính xác hơn đầu ra của AI.
Nếu bạn sử dụng mã do AI sinh ra, bạn sẽ cần làm việc nhiều hơn về tài liệu. Sự thành công lâu dài của một tổ chức có thể bị cản trở bởi nợ kỹ thuật, và một cơ sở mã viết kém hoặc không được hiểu rõ là một hình thức nợ kỹ thuật. Một kỹ sư mới vào nghề nộp dự án của mình sớm năm ngày nhưng không thể giải thích cách hoạt động của toàn bộ mã trong tài liệu thực tế đang đặt một quả bom hẹn giờ cho các tổn thất năng suất trong tương lai.
Các tính năng được thêm vào cơ sở mã của bạn với sự trợ giúp của một hệ thống AI cũng chứa các rủi ro pháp lý và quy định