Tạm biệt những phần khó nhằn chưa từng thực sự quan trọng
Sự xuất hiện của các AI agent lập trình đang khiến nhiều kỹ sư phần mềm lo lắng về tương lai nghề nghiệp. Nhưng liệu chúng ta đang chứng kiến sự kết thúc của nghề kỹ sư phần mềm, hay chỉ là sự tái sinh của nó khi những công việc khó nhằn nhưng không tạo ra giá trị thực sự dần được tự động hóa?
Tạm biệt những phần khó nhằn chưa từng thực sự quan trọng
Bài viết của Dave Kiss về "lời điếu" cho nghề kỹ sư phần mềm khiến tôi cứ mãi trăn trở một câu hỏi: Chính xác thì chúng ta đang nói lời tạm biệt với điều gì?
Có phải là những đoạn regex khó nhằn? Việc phải viết thêm một trình phân tích dữ liệu tồi tệ nữa? Việc ghi nhớ những cú pháp kỳ quặc chẳng vì lý do rõ ràng nào? Hay việc đánh mất cả buổi chiều chỉ để mò ra đúng câu thần chú mà hệ thống build yêu cầu trước khi chịu làm điều mà bạn đã hiểu rõ từ lâu?
Nếu đó là những gì đã "chết", tôi không chắc nó cần một đám tang.
Cái giá phải trả chưa bao giờ là đích đến
Kỹ thuật phần mềm từ trước đến nay luôn chứa đựng rất nhiều công việc chỉ liên quan lỏng lẻo đến vấn đề cần giải quyết.
Bạn cần chuyển một đống dữ liệu lộn xộn từ hệ thống này sang hệ thống khác, nên bạn mất nửa ngày để học các trường hợp biên của một trình phân tích CSV. Bạn biết chính xác một dịch vụ nên làm gì, nhưng trước tiên phải nhớ lại cú pháp của một framework mà bạn đã không đụng tới suốt sáu tháng. Bạn hiểu rõ lỗi, nhưng bản sửa nằm sâu sau một cấu trúc thư mục xa lạ, ba lớp gián tiếp, và một lệnh kiểm thử mà chẳng ai ghi lại.
Chúng ta giỏi những việc này vì buộc phải giỏi. Một số còn khá thú vị. Có một cảm giác thỏa mãn thực sự khi cuối cùng cũng "hạ" được đoạn regex, hay tìm ra dòng duy nhất khiến cả hệ thống hành xử kỳ lạ.
Nhưng khó khăn không đồng nghĩa với giá trị.
Phần lớn những việc đó chỉ là cái giá phải trả giữa lúc hiểu vấn đề và lúc thay đổi hệ thống. Đó chưa bao giờ là đích đến. Nếu một AI agent có thể đảm nhận nhiều hơn phần "phiên dịch" đó, tôi không trở nên ít kỹ sư hơn. Tôi có thêm thời gian cho phần công việc vốn dĩ cần đến một kỹ sư ngay từ đầu.
Công việc đã dịch chuyển
Tôi dùng các coding agent mỗi ngày. Chúng có thể di chuyển trong một codebase nhanh hơn tôi, tạo ra một trình phân tích trong vài giây, và thường nhớ sẵn lời gọi thư viện mà lẽ ra tôi phải tra cứu.
Chúng cũng đưa ra những giả định sai, hiểu nhầm quy ước cục bộ, tự tin dùng một API không tồn tại, và tuyên bố thắng lợi trước khi kiểm thử thứ mình vừa thay đổi.
Việc gõ phím trở nên dễ dàng hơn. Nhưng kỹ thuật thì không biến mất.
Tôi vẫn phải hiểu hệ thống đủ sâu để biết cần tìm ở đâu. Tôi phải nhận ra khi một câu trả lời nghe có vẻ hợp lý lại sai. Tôi phải quyết định xem một thay đổi thuộc về ứng dụng, một plugin, một kho vận hành, hay chẳng thuộc về đâu cả. Tôi phải tái hiện lỗi, chọn đánh đổi, kiểm thử kết quả, và chịu trách nhiệm cho những gì đi vào môi trường production.
Agent có thể viết trình phân tích. Nhưng vẫn phải có người giải thích về đống dữ liệu tồi tệ đó, nhận ra khi một dòng dữ liệu âm thầm biến mất, và quyết định điều gì nên xảy ra khi thực tế vi phạm định dạng.
Đó chính là kỹ thuật phần mềm.
Tôi đang học nhiều hơn, không phải ít hơn
Một nỗi lo tôi hiểu được là việc loại bỏ con đường khó khăn cũng loại bỏ luôn cơ hội học hỏi. Nếu máy viết code, làm sao ai đó phát triển được bản năng để biết code đúng hay sai?
Rủi ro đó là có thật. Bạn có thể chấp nhận bất cứ thứ gì xuất hiện trong diff, không chạy thử gì cả, không học được gì, và tung ra rác với tốc độ mà trước đây là bất khả thi.
Nhưng bạn cũng có thể dùng chính những công cụ đó để bước vào những lĩnh vực của ngành máy tính mà trước kia quá tốn kém để khám phá.
Tôi đã dùng agent để viết lại một chương trình TypeScript sang Rust, truy vết hạ tầng production xuyên nhiều kho mã, hiểu về hành vi cơ sở dữ liệu xa lạ, xây dựng công cụ terminal, và kiểm thử những ý tưởng mà lẽ ra không đáng để bỏ ra một ngày cuối tuần. Tôi không hề biết ít Rust, ít Linux, hay ít về các hệ thống liên quan hơn sau những dự án đó.
Vòng lặp học tập trở nên chặt chẽ hơn. Đặt câu hỏi. Kiểm tra câu trả lời. Chạy code. Phá vỡ nó. Đọc phần triển khai. Sửa lại giả định. Thử lại.
Đó không phải là sự thay thế cho việc hiểu biết. Đó là một cách cực kỳ nhanh để tìm ra rìa của hiểu biết.
Bức tranh trở nên rộng lớn hơn
Điều tôi thấy hào hứng nhất không phải là cùng một ticket giờ tốn ít giờ hơn. Mà là những dự án hoàn toàn khác giờ đây có thể nằm gọn trong một đời người.
Phần mềm từ trước đến nay luôn có chi phí rất cao giữa một ý tưởng và hình hài hoạt động đầu tiên của nó. Ngay cả một ý tưởng nhỏ cũng có thể đòi hỏi một ngôn ngữ mới, một framework, một hệ thống xác thực, triển khai, kiểm thử, và một đống keo dính trước khi bạn biết được ý tưởng đó có tốt hay không.
Chi phí đó đã giết chết rất nhiều ý tưởng trước khi chúng kịp thành code.
Giờ tôi có thể theo đuổi nhiều hơn những suy nghĩ "nếu như" kỳ quặc làm nên niềm vui của lập trình. Nếu phần mềm diễn đàn là một game engine thì sao? Nếu một trình nghe sách nói trên terminal hoạt động đúng như trình nghe nhạc của tôi thì sao? Nếu tôi xây lại một công cụ bằng ngôn ngữ khác chỉ để hiểu nó hoạt động thế nào thì sao?
Đó không phải là những ví dụ giả định. Tôi đã xây chúng. Chúng dạy tôi về trạng thái thời gian thực, về container đa phương tiện, về giao diện terminal, về lập trình hệ thống, và về ranh giới của những công cụ đang hỗ trợ tôi.
Vẫn còn những lý do để lo ngại
Không điều nào ở trên có nghĩa là mọi hệ quả sẽ đều tốt đẹp.
Các công ty sẽ lấy câu chuyện năng suất làm bình phong để cắt giảm nhân sự. Code do máy tạo ra sẽ gây ra những thất bại ở quy mô mà chúng ta chưa sẵn sàng đối phó. Con đường truyền thống từ kỹ sư junior lên kỹ sư giàu kinh nghiệm sẽ thay đổi, và tôi không nghĩ hiện tại ai thực sự biết điều gì sẽ thay thế nó. Quyền tiếp cận cũng quan trọng. Một nghề không thể tự nhận là mới mở ra nếu những công cụ tốt nhất đòi hỏi hàng trăm đô-la mỗi tháng.
Đó là những vấn đề nghiêm túc. Chúng xứng đáng được bàn thảo nghiêm túc hơn một khẩu hiệu "AI chỉ là công cụ" hay một dự đoán rằng mọi người sẽ trở nên năng suất gấp mười lần.
Nhưng đó là những câu hỏi về ai được hưởng lợi từ công nghệ, cách chúng ta dạy học, và cách chúng ta tổ chức công việc. Chúng không phải là bằng chứng rằng kỹ thuật phần mềm đã không còn tồn tại.
Nếu có gì, việc tạo code nhanh hơn khiến kỷ luật kỹ thuật trở nên quan trọng hơn. Khi việc viết code còn chậm, những quyết định tồi cũng tích tụ chậm theo. Giờ đây một giả định sai có thể trở thành ba nghìn dòng code trước bữa trưa. Yêu cầu rõ ràng, kiểm thử, review, khả năng quan sát, và gu thẩm mỹ không hề kém quan trọng hơn trong thế giới đó. Chúng là những thứ duy nhất giữ cho sản lượng tăng thêm vẫn hữu ích.
Không có đám tang nào cả
Tôi hiểu nỗi mất mát trong bài viết của Dave. Một cách làm việc mà nhiều người trong chúng ta xây dựng bản sắc quanh nó đang thay đổi rất nhanh. Có những phần tôi cũng sẽ nhớ. Giải quyết một việc theo cách khó có thể mang lại cảm giác tuyệt vời, đặc biệt khi cách khó chính là cách bạn học được rằng mình có khả năng giải quyết nó.
Nhưng tôi không muốn nhầm lẫn giữa chướng ngại vật và tay nghề.
Tay nghề chưa bao giờ là việc ghi nhớ mọi chữ ký phương thức. Chưa bao giờ là tự tay gõ từng dòng hay tự mình vật lộn với từng tài liệu lỗi định dạng để đưa nó vào đúng chỗ. Đó chỉ là những cơ chế sẵn có với chúng ta vào thời điểm đó.
Tay nghề là hiểu một vấn đề đủ sâu để thay đổi nó. Là đưa ra đánh đổi với thông tin không đầy đủ. Là nhận ra nốt nhạc sai trong một hệ thống về mặt kỹ thuật vẫn đang hoạt động. Là chịu trách nhiệm cho kết quả.
Chúng ta vẫn cần tất cả những điều đó. Giờ đây chúng ta được áp dụng chúng cho nhiều vấn đề hơn, trong nhiều lĩnh vực hơn, với một bộ công cụ lớn hơn nhiều.
Vậy nên tôi chưa sẵn sàng chôn cất nghề kỹ sư phần mềm.
Chúng ta đang học một cách làm việc mới. Chúng ta đang xây dựng một tầng công nghệ mới trong khi học cách sử dụng, quản trị và truyền dạy nó. Chúng ta đang loại bỏ một số độ phức tạp ngoài ý muốn và khám phá ra những loại độ phức tạp mới bên dưới. Chúng ta có thể thử những điều mà một năm trước còn bất khả thi, và chúng ta chỉ mới bắt đầu hiểu điều đó có nghĩa gì.
Đây không phải là một lời điếu.
Kỹ sư phần mềm chỉ vừa mới bắt đầu.

