Có bao giờ bạn nhờ AI viết một function, và nó trả về một đống code chạy được nhưng... nhìn muốn "đập máy"? Biến đặt tên lung tung, logic lồng nhau (nested) 5 cấp, và hoàn toàn phớt lờ cấu trúc dự án hiện tại của bạn?
Đừng vội trách Claude. Trong thế giới của Generative AI, Input rác = Output rác.
Khác với ChatGPT (nơi bạn phải copy-paste code vào), Claude Code CLI có quyền truy cập vào file hệ thống. Điều này thay đổi hoàn toàn cuộc chơi Prompting. Bạn không cần mô tả code, bạn cần chỉ định ngữ cảnh.
Dưới đây là tư duy và công thức để khiến Claude viết code "sạch" (Clean Code) ngay từ lần đầu tiên.

1. Tư duy "Context Injection": Đừng kể lể, hãy chỉ trỏ
Sai lầm lớn nhất của Dev khi dùng AI là cố gắng giải thích lại những gì đã có trong code.
Prompt sai:
"Viết cho tôi một component Button màu xanh, có bo tròn, dùng Tailwind, giống với cái style tôi đang dùng trong dự án..."
Prompt "God-Tier" với Claude CLI:
"Tạo componentPrimaryButton. Đọc filesrc/theme/tokens.tsđể lấy mã màu vàsrc/components/ui/Card.tsxđể học cách tổ chức file. Đảm bảo style đồng nhất với các component đó."
Tại sao nó hiệu quả? Thay vì mô tả bằng lời (dễ gây hiểu nhầm), bạn ra lệnh cho Claude "Đọc" (Read) và "Bắt chước" (Mimic). Claude Code CLI sẽ quét các file bạn chỉ định, phân tích pattern (cách đặt tên, cách export, cách dùng type) và tạo ra code mới hòa nhập hoàn hảo vào dự án.
2. Công thức R.C.C.O cho một Prompt hoàn hảo
Để đảm bảo Clean Code (SOLID, DRY), hãy áp dụng công thức R.C.C.O:
- R - Role (Vai trò): Định vị tư duy.
- C - Context (Ngữ cảnh): Nhiệm vụ và Tài nguyên.
- C - Constraints (Ràng buộc): Những gì KHÔNG được làm.
- O - Output (Đầu ra): Định dạng mong muốn.
Ví dụ thực chiến:
Giả sử bạn muốn viết một hàm xử lý thanh toán.
Lệnh gõ vào Terminal:
Bash
claude "
[Role]: Bạn là Senior Backend Developer chuyên về Node.js và Clean Architecture.
[Context]: Tôi cần tạo một Service xử lý Payment. Hãy đọc `src/interfaces/payment.ts` để hiểu data structure.
[Constraints]:
- Tuyệt đối tuân thủ nguyên tắc Single Responsibility (SOLID).
- Không được hardcode bất kỳ string nào, hãy tách ra file constants.
- Sử dụng Try/Catch và ném ra Custom Error đã định nghĩa trong `src/utils/AppError.ts`.
- Không dùng `any`, phải strictly typed.
[Output]: Chỉ tạo file `src/services/PaymentService.ts`. Không cần giải thích dài dòng.
"
Khi bạn đưa ra ràng buộc rõ ràng như "Không dùng any" hay "Tuân thủ SOLID", Claude sẽ tự động kích hoạt các lớp kiểm duyệt nội bộ để refactor code trước khi trả về cho bạn.

3. Kỹ thuật "Negative Prompting" cho Code
Đôi khi, nói cho AI biết những gì bạn ghét hiệu quả hơn là những gì bạn thích. Lập trình viên thường có những "nỗi đau" riêng, hãy đưa nó vào prompt.
Một số câu "thần chú" Negative Prompt nên thêm vào cuối mỗi lệnh:
- "No spaghetti code, keep functions under 20 lines." (Không code mì tôm, hàm dưới 20 dòng).
- "No magic numbers." (Không dùng số cứng).
- "Do not remove existing comments." (Không xóa comment cũ - rất quan trọng khi refactor).
- "Do not change the import order." (Không đổi thứ tự import).
4. Tận dụng khả năng "Tự sửa lỗi" (Self-Correction)
Claude Code CLI có khả năng chạy lệnh terminal. Hãy biến nó thành lợi thế trong Prompt.
Thay vì chỉ bảo nó viết code, hãy bảo nó viết xong và tự kiểm tra.
Prompt:
"Refactor fileutils/date.tschuyển sang dùng thư việndate-fns. Sau khi sửa xong, hãy chạynpm run test. Nếu test fail, hãy tự đọc log lỗi, sửa lại code cho đến khi test pass thì mới báo cáo xong."
Đây là đỉnh cao của tự động hóa. Bạn buộc AI phải chịu trách nhiệm với code nó viết ra, thay vì ném cho bạn một đống lỗi cú pháp.

Kết luận
Prompt Engineering không phải là học thuộc lòng các câu lệnh. Đó là học cách tư duy mạch lạc.
Khi làm việc với Claude Code CLI:
- Đừng lười chỉ định file nguồn (Context).
- Đừng ngại đưa ra các yêu cầu khắt khe về chất lượng (Constraints).
- Hãy để nó tự kiểm tra sản phẩm của mình (Execution).
Code sạch không tự nhiên sinh ra, nó sinh ra từ những yêu cầu rõ ràng và kỷ luật thép. Và bây giờ, bạn đã có "người thực thi" kỷ luật đó là Claude.
Thử thách hôm nay: Hãy thử refactor một file code "bẩn" nhất trong dự án của bạn bằng công thức R.C.C.O và chia sẻ kết quả nhé!
Discussion