Giải Mã Niềm Vui Lập Trình Trong Thế Giới AI: Hướng Dẫn Thực Chiến Từ Một Lập Trình Viên

Trong bối cảnh trí tuệ nhân tạo (AI) ngày càng trở nên tinh vi và có khả năng tự động hóa nhiều tác vụ, đặc biệt là viết mã, không ít lập trình viên đang đối mặt với những câu hỏi lớn về tương lai nghề nghiệp và cả niềm vui trong công việc. Liệu AI có đang lấy đi cơ hội học hỏi và thể hiện sự sáng tạo của chúng ta? Hay nó đang mở ra một kỷ nguyên mới, nơi lập trình không chỉ là viết mã mà còn là một hình thức cộng tác độc đáo?

Bài viết này sẽ đưa bạn qua một hành trình khám phá, từ những mối lo ngại ban đầu đến việc tái định nghĩa niềm vui lập trình, thông qua kinh nghiệm thực chiến của một lập trình viên đã tìm thấy con đường riêng để tận hưởng công việc trong thế giới AI.

AI Và Tương Lai Lập Trình: Mối Lo Ngại Hay Cơ Hội?

Không thể phủ nhận rằng AI đang thay đổi đáng kể bức tranh của ngành lập trình. Chúng ta thường nghe về những lo ngại sau:

  • Giảm cơ hội cho người mới: Khi AI có thể tạo ra phần lớn mã nguồn, những người mới bắt đầu gặp khó khăn trong việc tích lũy các kỹ năng cơ bản để trở thành lập trình viên chuyên nghiệp.
  • Mai một kỹ năng của người có kinh nghiệm: Nhiều lập trình viên lão làng than phiền rằng AI đang dần làm họ mất đi những kỹ năng mà họ đã mất rất nhiều thời gian và công sức để trau dồi.

Lập trình, vốn dĩ, là một lĩnh vực độc đáo nằm giữa khoa học và nghệ thuật. Với tư cách là khoa học, nó liên quan đến việc thu thập và tổ chức kiến thức. Với tư cách là nghệ thuật, đó là sự ứng dụng sáng tạo để giải quyết vấn đề. Niềm vui – sự hài lòng sâu sắc hoặc cảm giác hưng phấn – có thể đến từ một hoặc cả hai khía cạnh này. Tuy nhiên, nhận thức chung hiện nay là AI đang tước đi cơ hội của chúng ta, cả để học hỏi và để sáng tạo.

Thách Thức Khi AI “Đọc Vị” Mã Nguồn Hiện Đại

Mã nguồn do con người viết thường tiết lộ rất nhiều về người tạo ra nó. Từ kiến thức sâu rộng về ngôn ngữ lập trình, cách đặt tên biến và hàm một cách sáng tạo, cho đến cách trình bày trực quan của một đoạn mã. Bạn thường có thể nhận ra ngay lập tức liệu người viết có thực sự quan tâm đến mã họ tạo ra hay đó chỉ là một phương tiện để đạt được mục đích – hoàn thành công việc để nhận lương.

Khi AI ngày càng hoàn thiện, nó mắc ít lỗi hơn, nhưng đồng thời cũng tạo ra những đoạn mã ngày càng khó đọc và khó hiểu đối với con người. Vì vai trò của con người trong chu trình lập trình ngày càng chuyển từ viết mã sang xác thực mã, đây đang trở thành một vấn đề lớn. Hơn nữa:

  • Ngôn ngữ phức tạp: Các ngôn ngữ hiện đại như JavaScript (JS) hoặc Python quá phức tạp, chứa đựng nhiều sự không nhất quán mà AI khó có thể nhận diện.
  • Tài liệu lỗi thời và phiên bản mới: Tài liệu thường không được cập nhật kịp thời, và các phiên bản ngôn ngữ mới có thể làm hỏng mã cũ.
  • Các “rào chắn” không cần thiết: Nhiều tính năng trong các ngôn ngữ này được thiết kế như những “rào chắn” để ngăn con người mắc lỗi tiêu tốn bộ nhớ hoặc gây ra sự cố trong tương lai. Vì AI không mắc phải những lỗi giống con người, nó không cần các “rào chắn” này; ngược lại, chúng còn làm công việc của AI trở nên khó khăn hơn.

Hành Trình Bất Ngờ Với AI Hướng Tác Nhân (Agentic AI)

Kinh nghiệm thực tế bắt đầu với việc sử dụng AI hướng tác nhân (agentic AI) trong khoảng một năm. Ban đầu là với Copilot trong VS Code, sau đó gần đây hơn là với Claude Code qua dòng lệnh. Lúc đầu, Copilot mắc khá nhiều lỗi và tạo ra mã khá lặp lại, cấu trúc kém. Tuy nhiên, nhìn lại, phần lớn vấn đề có lẽ là do sự thiếu hiểu biết của bản thân về cách kiểm soát quy trình.

Vấn đề lớn nhất là trong việc xác thực mã JS hoặc Python. Có quá nhiều mã, thường sử dụng các tính năng của cả hai ngôn ngữ mà tôi chưa bao giờ nắm vững hoàn toàn. Tôi chưa bao giờ là một lập trình viên xuất sắc, và hầu hết mã của tôi đều thuần túy “vanilla” (đơn giản, không dùng framework phức tạp). Dự án đang thực hiện là AllSpeak, dựa trên một ngôn ngữ kịch bản gần giống tiếng Anh mà tôi đã viết từ nhiều năm trước để giúp tôi tạo ra sản phẩm mà không cần phải là một chuyên gia lập trình. AI đã cho tôi cơ hội để cập nhật nó. Nhưng chính khi Copilot bắt đầu đề xuất các đoạn AllScript – một cách không mời – tôi đã có một suy nghĩ hoàn toàn khác.

Sức Mạnh Của Ngôn Ngữ Đơn Giản: Khi AI Học Nói “Tiếng Người”

Giả định thông thường là mã phải được viết bằng một ngôn ngữ cấp cao, hiện đại như JS hoặc Python. Điều này hoàn toàn hợp lệ khi con người đang viết mã, nhưng lại trở nên kém hiệu quả đối với AI. Như đã đề cập, các ngôn ngữ này quá phức tạp và gặp phải những sự không nhất quán mà AI khó phát hiện. Vậy tại sao không để AI viết bằng một ngôn ngữ đơn giản hơn?

Một con đường rõ ràng đã tự mở ra: Nếu tác nhân AI đang cố gắng viết mã bằng AllSpeak, tại sao không để nó hoàn thành công việc? Tôi đã xây dựng một tệp AGENT.md hướng dẫn tác nhân mã hóa bằng ngôn ngữ của tôi bất cứ khi nào có thể, và cung cấp các liên kết đến kho lưu trữ và tài liệu để giúp nó thực hiện điều này mà không mắc lỗi.

Lợi ích là ngay lập tức. Thay vì phải vật lộn với hàng đống mã JS và Python khổng lồ, giờ đây tôi có thể thấy ứng dụng đang được xây dựng bằng một thứ gì đó gần gũi với tiếng Anh hơn rất nhiều. Hơn thế nữa, nó còn giúp:

  • Dễ đọc, dễ hiểu: Mã nguồn trở nên minh bạch hơn, trực quan hơn đối với con người.
  • Giảm sự phức tạp cho AI: AI có thể tập trung vào logic nghiệp vụ thay vì phải xử lý các chi tiết cú pháp phức tạp của ngôn ngữ cao cấp.
  • Đẩy nhanh quá trình phát triển: Việc xác thực và sửa lỗi trở nên nhanh chóng hơn.

So Sánh Cú Pháp: AllSpeak vs. JavaScript/Python (Ví dụ minh họa)

Để hình dung rõ hơn, hãy xem xét một tác vụ đơn giản:

Ví dụ với AllSpeak:


// Mở trình duyệt và truy cập một trang web, sau đó nhấn vào một nút
Mở trình duyệt tới "https://allspeak.ai"
Tìm nút có ID "dang_ky_ngay"
Nhấn vào nút đó

Ví dụ với JavaScript (sử dụng thư viện Puppeteer):


<pre><code class="language-javascript">
const puppeteer = require('puppeteer');

async function thucHienDangKy() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    try {
        await page.goto('https://allspeak.ai', { waitUntil: 'networkidle2' });
        
        // Chờ nút xuất hiện và click
        await page.waitForSelector('#dang_ky_ngay', { timeout: 5000 });
        await page.click('#dang_ky_ngay');
        
        console.log('Đã nhấn nút đăng ký thành công!');
        
    } catch (error) {
        console.error('Đã xảy ra lỗi trong quá trình đăng ký:', error);
    } finally {
        await browser.close();
    }
}

thucHienDangKy();

Rõ ràng, phiên bản AllSpeak đơn giản hơn nhiều, trực quan hơn và dễ hiểu hơn cho một người không chuyên lập trình hoặc cho chính AI khi cần tạo ra mã.

Cộng Tác Với AI: “Giáo Viên” Và “Học Trò” Cùng Phát Triển Ngôn Ngữ

Không chỉ dừng lại ở việc tạo mã, quá trình này còn đi xa hơn. Thỉnh thoảng, tác nhân AI sẽ “đoán” một cấu trúc không hợp lệ, dựa trên kiến thức của nó về các ngôn ngữ lập trình khác. Điều này thường là do những hạn chế trong tài liệu có sẵn. Nhưng tôi nhận ra rằng nếu tác nhân muốn sử dụng một cấu trúc như vậy, miễn là nó hợp lệ về mặt cú pháp và nhất quán với phần còn lại của ngôn ngữ, thì có lẽ nó nên được thêm vào.

Vì vậy, tôi đã thiết lập một phiên làm việc thứ hai vĩnh viễn để xử lý các bổ sung và thay đổi cho AllSpeak, cùng với một quy tắc: nếu tác nhân có thể đề xuất một cải tiến, nó nên làm như vậy. Điều này biến AI thành một đối tác trong việc phát triển chính ngôn ngữ lập trình.

Vì AllSpeak đang phát triển theo cách này, nó có thể được coi là một trở ngại đối với việc viết mã, xét rằng ban đầu nó được thiết kế để làm cho việc lập trình đơn giản hơn. Nhưng điều này thay đổi khi AI thực hiện việc mã hóa. Công việc của con người không phải là viết mã mà là đọc nó, và vì ngôn ngữ gần với tiếng Anh, ý nghĩa của cú pháp mới có thể được làm rõ ràng. Tôi có thể thêm một loạt cú pháp mới giúp giảm bớt các đoạn mã lặp đi lặp lại thành vài từ. Tôi không còn phải ghi nhớ tất cả cú pháp, mà chỉ cần nhận diện nó. Đây là một sự khác biệt lớn.

Tối Ưu Chi Phí Và Niềm Vui Bất Ngờ Khi Hợp Tác Với Các Mô Hình AI Khác Nhau

Phần cuối cùng của câu chuyện cho đến nay (có thể còn nhiều điều nữa sẽ đến) là vấn đề về ngân sách cá nhân. Claude Code thực hiện một công việc tuyệt vời, nhưng nó có thể trở nên đắt đỏ. Giá cả không tuyến tính; chi tiêu nhiều hơn mang lại số lượng token nhiều hơn theo cấp số nhân, nhưng tôi lại không sử dụng hết mức cho phép của mình. Giảm chi phí đồng nghĩa với việc tôi vượt quá giới hạn và phải nạp thêm tiền.

Sau đó, tôi thấy một thông tin rằng DeepSeek có chi phí thấp hơn khoảng 50 lần (đúng vậy, chỉ 2%) so với Claude Code, vì vậy tôi phải thử nó. Và điều đó là đúng; sau vài tuần làm việc hàng ngày nhưng không quá chuyên sâu, nó chỉ tốn của tôi 0.46 đô la. Tuy nhiên, nó không tốt trong việc mã hóa bằng Claude. Nó nhanh, nhưng mắc nhiều lỗi hơn, và từ những đầu ra dài dòng mà nó phát ra khi làm việc, có vẻ như nó gặp khó khăn đôi khi. Rất khó để nói bao nhiêu trong số này là do tài liệu của tôi vẫn chưa hoàn hảo, nhưng tôi chắc chắn phải can thiệp thường xuyên hơn. Tôi hiểu rằng deepseek-v4-flash được tối ưu hóa nhiều hơn cho việc quản lý các tập dữ liệu lớn hơn là cho việc mã hóa, điều này có thể là lời giải thích.

Nhưng hạn chế này lại mang lại một lợi ích bất ngờ. Khi làm việc với Claude Code, tôi thường cảm thấy mình chỉ là một người phụ việc. Tôi đưa ra yêu cầu, nhưng sau đó ít có vai trò trong cách mọi thứ được thực hiện vì lỗi rất ít và hiếm khi xảy ra. Với DeepSeek, tôi cảm thấy mình bình đẳng hơn. Chúng tôi có những vai trò khác nhau; DeepSeek thực hiện việc mã hóa và tôi xem xét nó. Và bởi vì nó được viết bằng thứ gì đó gần với tiếng Anh, tôi có thể theo dõi nó dễ dàng hơn nhiều so với việc nó là JS hoặc Python. Tôi có thể phát hiện những điều không đúng và đề xuất cải tiến. Tôi bắt đầu cảm thấy mình lại là một lập trình viên, rằng tôi thực sự có vai trò trong quá trình mã hóa. Và đó chính là nơi niềm vui đã trở lại.

Bài Học Rút Ra: Tái Định Nghĩa Vai Trò Lập Trình Viên Trong Kỷ Nguyên AI

Vậy điều bắt đầu như một chuỗi những sự tình cờ may mắn theo sau là một thử nghiệm tiết kiệm chi phí đã trở thành một mối quan hệ đối tác bình đẳng, khôi phục niềm vui của tôi trong quá trình mã hóa. Một kết luận tôi rút ra từ điều này là có lẽ thay vì luôn cho rằng mô hình mới nhất là tốt nhất, hãy xem xét liệu nó có để lại cho bạn một vai trò thực sự trong quá trình đó hay không, hoặc liệu bạn có nhận được nhiều niềm vui hơn khi đảm nhận vai trò của một giáo viên và giúp một mô hình kém hơn thực hiện công việc của nó, đồng thời tiết kiệm tiền.

Các lập trình viên trong kỷ nguyên AI có thể không còn là người viết từng dòng code, mà là kiến trúc sư hệ thống, nhà tư vấn ngôn ngữ, người kiểm duyệt, và thậm chí là “giáo viên” hướng dẫn AI cách làm việc hiệu quả nhất. Niềm vui không nằm ở việc tạo ra mã hoàn hảo từ đầu, mà ở việc cộng tác, giải quyết vấn đề và phát triển cùng với công nghệ.

Đừng quên, những người hạnh phúc sẽ tạo ra kết quả tốt hơn.

Hãy để cuộc chơi bắt đầu!

Chỉ mục