•9 min read

Cách tôi thực sự sử dụng ChatGPT, Claude và Gemini cho công việc phát triển

Cách tôi thực sự sử dụng ChatGPT, Claude và Gemini cho công việc phát triển

Cứ vài tháng lại có người hỏi tôi công cụ AI nào là "tốt nhất". Câu trả lời hoàn toàn phụ thuộc vào việc bạn đang làm gì. Tôi dùng cả ba, cho những việc khác nhau, và không cái nào thay thế được việc tư duy.

Đây là đánh giá chân thực của tôi sau một năm sử dụng chúng hàng ngày cho công việc phát triển.

Audio Briefing
0:00 / 0:00

Mỗi công cụ giỏi về cái gì

ChatGPT: Tốt nhất cho các tác vụ lập trình mở, khi tôi cần một đoạn script nhanh hoặc boilerplate. Khả năng tạo mã của GPT-5 rất ổn định cho việc tạo một lần: "viết cho tôi một script Python làm X." Tôi dùng nó khi tôi biết chính xác mình muốn gì và chỉ cần nó được gõ ra.

Claude: Tốt hơn trong việc suy luận qua các vấn đề phức tạp. Khi tôi có một ý tưởng chưa hoàn chỉnh và cần thảo luận về thiết kế trước khi viết mã, cửa sổ ngữ cảnh dài hơn của Claude cho phép tôi dán các tệp liên quan vào và nhận được phân tích mạch lạc. Tôi dùng nó cho các cuộc thảo luận kiến trúc, đánh giá mã và tái cấu trúc.

Gemini: Tích hợp hệ sinh thái Google thực sự hữu ích. Tôi dùng nó khi tôi cần lấy thông tin thời gian thực: tra cứu tài liệu, kiểm tra tham chiếu API, giá cả hiện tại. Nó đọc các trang web một cách tự nhiên mà các công cụ khác vẫn còn gặp khó khăn.

Quy trình làm việc mặc định của tôi

Tạo mã nhanh → ChatGPT. Thiết kế/tái cấu trúc → Claude. Tài liệu API và tra cứu web → Gemini. Mỗi công cụ lấp đầy một khoảng trống mà các công cụ khác không có.

Advertisement

Những điểm yếu chung của tất cả

Những hạn chế giống nhau ở cả ba:

  • Chúng bịa đặt API. Mọi mô hình đều tự tin bịa ra các chữ ký hàm. Tôi đã từng thấy ChatGPT viết mã Stripe cho tôi bằng các phương thức không tồn tại. Luôn kiểm tra tài liệu.
  • Chúng làm phẳng tư duy của bạn. Nếu bạn yêu cầu một giải pháp, bạn sẽ nhận được câu trả lời phổ biến nhất về mặt thống kê, chứ không phải câu trả lời tốt nhất cho tình huống cụ thể của bạn. Bạn phải yêu cầu các lựa chọn thay thế một cách rõ ràng.
  • Ngữ cảnh vẫn quá ngắn cho các codebase thực sự. Ngay cả với 200K token, bạn cũng không thể đưa vào một dự án có ý nghĩa. Bạn luôn phải chọn lọc các tệp để đưa vào, điều đó có nghĩa là AI đang bỏ lỡ một nửa bức tranh.

Làm thế nào để thực sự có được kết quả tốt

Kỹ năng quan trọng nhất là viết một prompt tốt. Không phải "kỹ thuật prompt" theo nghĩa nghi lễ: chỉ cần cụ thể.

Thay vì: "Viết một form đăng nhập" Hãy thử: "Viết một form đăng nhập React với các trường email và mật khẩu, sử dụng react-hook-form để xác thực, các thành phần shadcn/ui và POST đến /api/auth/login. Xử lý các trạng thái loading, error và success."

Sự khác biệt là một trời một vực. Prompt đầu tiên cho bạn một form chung chung. Prompt thứ hai cho bạn thứ gì đó bạn có thể sử dụng.

Kỹ năng thực sự

Học cách prompt tốt không phải là ghi nhớ các mẫu. Đó là học cách chỉ định. Bạn càng đưa ra nhiều ràng buộc, kết quả càng tốt. Điều này áp dụng cho mọi mô hình như nhau.

Những việc tôi không dùng AI

  • Gỡ lỗi race condition. Các mô hình không có mô hình tinh thần về thời gian hoặc thực thi bất đồng bộ. Chúng đoán, và chúng thường sai.
  • Mã nhạy cảm về bảo mật. Tôi đã thấy AI đề xuất các mẫu eval()-adjacent quá nhiều lần.
  • Các vấn đề mới lạ. Nếu tôi đang làm điều gì đó mà tôi chưa từng thấy trước đây, dữ liệu đào tạo của AI sẽ không giúp ích gì. Nó sẽ cho tôi những câu trả lời sai nghe có vẻ tự tin.

Chọn công cụ phù hợp với tác vụ, giữ kỳ vọng thực tế và luôn xác minh kết quả. Giống như làm việc với một lập trình viên cấp dưới, ngoại trừ người này không bao giờ mệt mỏi với việc đánh giá mã.

Advertisement

Bạn cũng có thể thích

Tìm hiểu sâu: Cơ chế cốt lõi

Khi chúng ta nhìn sâu hơn, các cơ chế cơ bản cho thấy sự tương tác phức tạp của các hệ thống. Trong phát triển hiện đại, việc hiểu các cơ chế này là điều phân biệt một người mới với một chuyên gia.

Hãy xem xét ví dụ thực tế này:

// A comprehensive example demonstrating advanced patterns
class ServiceManager {
  constructor() {
    this.services = new Map();
    this.initialized = false;
  }

  register(name, service) {
    if (this.services.has(name)) {
      throw new Error(`Service ${name} already registered`);
    }
    this.services.set(name, service);
  }

  async initializeAll() {
    this.initialized = true;
    for (const [name, service] of this.services) {
      if (typeof service.init === 'function') {
        await service.init();
      }
    }
  }

  get(name) {
    if (!this.initialized) {
      console.warn('Accessing services before initialization');
    }
    return this.services.get(name);
  }
}

Mô hình này đảm bảo rằng kiến trúc của chúng ta vẫn có thể mở rộng và mạnh mẽ ngay cả khi các yêu cầu kinh doanh thay đổi. Đây là một cách tiếp cận cơ bản mang lại lợi ích trong các ứng dụng quy mô lớn.

Ứng dụng thực tế và mở rộng quy mô

Việc triển khai điều này trong môi trường sản xuất đặt ra một loạt thách thức mới. Chúng ta phải tính đến tính đồng thời, quản lý trạng thái và rò rỉ bộ nhớ.

Ví dụ, khi xử lý các hệ thống có thông lượng cao, mọi tối ưu hóa nhỏ đều có giá trị. Chúng ta thường dựa vào các công cụ phân tích hiệu suất để xác định các nút thắt cổ chai không rõ ràng trong quá trình phát triển cục bộ.

Sơ đồ trên minh họa một chiến lược triển khai điển hình, nơi ứng dụng của chúng ta mở rộng theo chiều ngang.

Kiểm tra sự hiểu biết của bạn

Các câu hỏi thường gặp

Claude 3.7 Sonnet và Claude 3.5 Sonnet thể hiện hiệu suất vượt trội trong việc tái cấu trúc nhiều tệp, hiểu các phụ thuộc kiến trúc và tránh các lệnh gọi API đã lỗi thời. Các mô hình OpenAI xuất sắc trong các script tự động một lần, trong khi Google Gemini 2.0 Flash/Pro dẫn đầu trong việc nhập tệp đa phương thức lớn và trích xuất tài liệu.
Ghim rõ ràng phiên bản chính của thư viện trong prompt của bạn (ví dụ: 'Sử dụng Next.js 15 App Router và React 19 APIs'), cung cấp các chữ ký giao diện TypeScript trong prompt của bạn hoặc kết nối mô hình với tài liệu trực tiếp bằng cách sử dụng Giao thức Ngữ cảnh Mô hình (MCP) hoặc các công cụ tìm kiếm.
Tránh đổ các thư mục nguyên khối lớn vào cửa sổ ngữ cảnh, điều này làm loãng sự chú ý. Thay vào đó, hãy sử dụng các tệp quy tắc tập trung (.cursorrules hoặc CLAUDE.md), chỉ cung cấp các giao diện phụ thuộc có liên quan và cô lập các tác vụ tái cấu trúc thành các gia số một mô-đun.
Gỡ lỗi race condition bất đồng bộ, lỗi thời gian đa luồng, mật mã hoặc xử lý token nhạy cảm, và tích hợp framework zero-day. LLM ngoại suy từ các mẫu lịch sử hiện có và thường chẩn đoán sai các vấn đề đồng thời tạm thời.
Tập trung vào thời gian hoàn thành pull request, thời gian chu kỳ, độ sâu bao phủ bộ kiểm thử và thời gian đến nguyên mẫu đầu tiên thay vì số dòng mã được tạo ra. Lợi ích thực sự đến từ việc viết kiểm thử nhanh hơn, tạo khung và loại bỏ boilerplate.
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement