Mình dùng AI hàng ngày trong công việc — không phải vì trend, mà vì nó thực sự tiết kiệm thời gian. Nhưng cũng có những lần AI tạo ra code nhìn đẹp mà chạy sai, hoặc generate cả đống boilerplate mà cuối cùng phải xóa hết viết lại.
Bài viết này không phải "AI thay thế developer" hay "AI là tương lai." Mình chia sẻ 10 cách dùng AI cụ thể mà mình thấy thực sự tăng năng suất — và cũng nói thẳng khi nào AI không giúp được gì, để bạn không mất thời gian thử những thứ không hiệu quả.
1. Viết boilerplate code — Tiết kiệm nhiều nhất ở đây
Đây là nơi AI mạnh nhất và cũng ít rủi ro nhất. Boilerplate là code có cấu trúc lặp đi lặp lại, logic đơn giản, chỉ khác nhau ở tên field — hoàn hảo cho AI.
Ví dụ: bạn có entity Invoice với 15 properties. Cần tạo DTO, mapping, validator, controller endpoint. Mỗi thứ mất 5-10 phút gõ thủ công. Bảo AI: "Tạo CreateInvoiceRequest DTO, FluentValidation validator, và AutoMapper profile cho entity Invoice này" — xong trong 30 giây, bạn review 2 phút, adjust vài chỗ. Tiết kiệm 20-30 phút.
Những thứ mình hay nhờ AI generate: CRUD endpoints cho entity mới, DTO và mapping profiles, FluentValidation rules dựa trên business requirement, EF Core configuration (HasIndex, HasMaxLength, relationship), unit test skeleton cho service methods.
Chìa khóa: cung cấp entity hoặc interface cho AI, nó sẽ generate chính xác hơn nhiều so với mô tả bằng lời. Copy-paste class definition vào prompt luôn tốt hơn viết "tạo DTO cho invoice."
Khi nào không hiệu quả: Business logic phức tạp. AI có thể tạo validator check Price > 0, nhưng rule kiểu "invoice chỉ được edit trong 24h đầu nếu status Draft, trừ khi user có role Admin hoặc invoice thuộc tenant có config AllowLateEdit" — bạn phải tự viết hoặc ít nhất phải mô tả rất chi tiết.
Stack trace dài 50 dòng, error message mơ hồ, bug chỉ xảy ra trên production. Trước khi có AI, mình Google error message, lướt 5-6 trang StackOverflow, đọc 3-4 answer, thử từng cái. Mất 30 phút đến 2 tiếng.
Giờ mình copy stack trace, paste vào AI, kèm context: "Đây là error khi gọi endpoint /api/invoices với EF Core + PostgreSQL. Entity Invoice có soft delete filter." AI phân tích stack trace, chỉ ra 2-3 nguyên nhân có thể, xếp theo khả năng xảy ra, và gợi ý cách fix từng cái.
Khoảng 70% trường hợp, nguyên nhân đầu tiên AI gợi ý là đúng. 20% là nguyên nhân thứ hai hoặc ba. 10% AI không tìm được — thường là bug liên quan đến config đặc thù của dự án mà AI không có context.
Pattern hiệu quả nhất: copy cả error message, đoạn code liên quan, và config (nếu relevant). Càng nhiều context, AI càng chính xác. Chỉ paste mỗi error message thì AI chỉ có thể đoán chung chung.
Tip: Khi AI gợi ý fix, đừng copy-paste ngay. Đọc giải thích tại sao fix đó hoạt động — vì lần sau gặp bug tương tự, bạn tự fix được nhanh hơn nhờ AI.
Đây là việc nhỏ nhưng cộng dồn lại rất nhiều thời gian. Mỗi ngày commit 5-10 lần, mỗi commit mất 2-3 phút nghĩ message cho đúng conventional format — cộng lại 20-30 phút/ngày chỉ cho commit message.
Mình dùng Claude Code — sau khi code xong, nó tự đọc diff, hiểu thay đổi gì, và generate commit message chuẩn conventional commit:
feat(invoice): add soft delete with global query filter
- Add IsDeleted and DeletedAt to BaseEntity
- Configure HasQueryFilter for all entities via reflection
- Override SaveChanges to convert Delete to Update
- Add filtered unique index for InvoiceNumber per tenant
PR description cũng tương tự: AI đọc tất cả commits trong branch, tổng hợp thay đổi, liệt kê files changed, và viết description rõ ràng cho reviewer.
Mình chỉ cần review 10 giây, chỉnh sửa nếu cần, approve. Tiết kiệm trung bình 15-20 phút mỗi ngày — nghe ít nhưng nhân lên 22 ngày/tháng là hơn 5 tiếng.
4. Đọc hiểu codebase mới — Onboarding nhanh gấp đôi
Join dự án mới, codebase 200 file, không có documentation, developer cũ đã nghỉ. Trước đây mình mất 1-2 tuần để hiểu kiến trúc tổng thể. Giờ mình dùng AI để đẩy nhanh quá trình này.
Copy một service file quan trọng, hỏi AI: "Giải thích flow của file này — nó làm gì, phụ thuộc vào những service nào, data flow ra sao." AI giải thích từng method, relationship giữa các dependency, và business logic đằng sau.
Với Claude Code, thậm chí không cần copy-paste — nó tự đọc cả project, giải thích kiến trúc, mối quan hệ giữa các module, naming convention team đang dùng.
Pattern mình hay dùng khi onboard dự án mới: hỏi AI giải thích folder structure và architecture pattern (Clean Architecture? Vertical Slice?), sau đó hỏi về flow của một feature quan trọng từ controller đến database, rồi hỏi về những convention và pattern đặc biệt trong dự án.
Giới hạn: AI giải thích code tốt, nhưng không giải thích được "tại sao" — tại sao team chọn pattern này, tại sao có exception handling lạ ở đoạn kia, tại sao có TODO comment để 2 năm chưa fix. Những thứ đó vẫn cần hỏi đồng nghiệp.
5. Viết test — Từ chán thành chấp nhận được
Thành thật: viết unit test là phần mình ít thích nhất. Không phải vì test không quan trọng — mà vì phần lớn test là arrange mock, setup data, rồi assert kết quả. Lặp đi lặp lại, tốn thời gian.
AI biến viết test từ "tốn 30 phút cho 5 test cases" thành "tốn 10 phút cho 5 test cases." Mình cung cấp service method, bảo AI: "Viết unit test cho method này. Cover happy path, null input, not found case, và validation failure. Dùng xUnit + Moq + FluentAssertions."
// Mình cung cấp method signature + logic
public async Task<InvoiceDto> CreateAsync(CreateInvoiceRequest request)
// AI generate test skeleton, mình review và adjust
[Fact]
public async Task CreateAsync_ValidRequest_ReturnsInvoiceWithGeneratedNumber()
{
// Arrange - AI setup mock đúng
// Act - AI gọi method đúng
// Assert - AI assert đúng properties
}
AI đặc biệt giỏi generate test cho edge cases mà bạn hay quên: null reference, empty collection, boundary values, concurrent access. Mình thường xuyên thấy AI suggest test case mà mình không nghĩ đến.
Cẩn thận: AI generate test pass — nhưng test có thể không test đúng thứ cần test. Ví dụ: AI assert result != null nhưng không assert result.InvoiceNumber có format đúng. Luôn review test logic, không chỉ check test pass.
6. Refactor code — AI như pair programmer
Refactor là nơi AI tỏa sáng khi bạn biết cách dùng. Không phải bảo AI "refactor file này" — mà chỉ rõ muốn refactor gì.
Prompt hiệu quả: "Refactor method CalculateTotal để dùng Strategy pattern thay vì switch case. Giữ nguyên public interface, chỉ đổi internal implementation. Đây là code hiện tại: [paste code]"
Prompt không hiệu quả: "Clean up code này" — quá mơ hồ, AI sẽ đổi formatting, rename variable, thêm comment — không phải refactor thực sự.
Những refactor mình hay nhờ AI: extract method từ method dài, convert callback hell sang async/await, tách service lớn thành nhiều service nhỏ (mình chỉ rõ boundary), thay thế magic string bằng constant/enum, chuyển từ if-else chain sang pattern matching.
Cách dùng hiệu quả nhất: refactor từng bước nhỏ. Đừng bảo AI "refactor toàn bộ module InvoiceService" — kết quả sẽ thay đổi quá nhiều, khó review, dễ introduce bug. Thay vào đó: "Extract discount calculation từ method CreateInvoice thành private method riêng" rồi review xong tiếp "Giờ convert switch case trong method đó sang Strategy pattern" rồi review. Từng bước nhỏ, mỗi bước verify.
7. Viết documentation — Từ code sang doc
Viết doc là việc ai cũng biết cần làm nhưng ít ai làm — vì tốn thời gian và ngay lập tức không thấy benefit. AI giảm friction này đáng kể.
Mình hay dùng AI cho: XML doc comment cho public method (AI đọc implementation rồi viết summary, param, returns, exception), README cho project hoặc module mới, API documentation từ controller endpoints, architecture decision records.
// Trước: method không có doc
public async Task<InvoiceDto> CreateAsync(CreateInvoiceRequest request)
// Bảo AI: "Thêm XML doc comment dựa trên implementation"
// Sau:
/// <summary>
/// Tạo invoice mới với auto-generated invoice number theo format
/// INV-{yyyyMM}-{sequence:0000}. Validate customer tồn tại và
/// active trong cùng tenant.
/// </summary>
/// <param name="request">Thông tin invoice cần tạo.</param>
/// <returns>Invoice vừa tạo với status Draft.</returns>
/// <exception cref="NotFoundException">
/// Customer không tồn tại hoặc thuộc tenant khác.
/// </exception>
public async Task<InvoiceDto> CreateAsync(CreateInvoiceRequest request)
AI viết doc chính xác hơn developer viết vội — vì AI đọc kỹ implementation trước khi viết, trong khi developer thường viết doc dựa trên ý định ban đầu (có thể đã khác so với implementation thực tế sau nhiều lần sửa).
8. Học công nghệ mới — AI như mentor cá nhân
Khi cần học Angular mặc dù chuyên .NET, hoặc học Docker khi chưa bao giờ viết Dockerfile, AI là cách nhanh nhất để bootstrap kiến thức.
Khác với Google hoặc StackOverflow: AI trả lời đúng context của bạn. Bạn hỏi "cách dùng Angular Reactive Forms" — Google cho kết quả generic. Bạn hỏi AI "cách dùng Angular Reactive Forms trong dự án có .NET backend, cần validate trùng với server-side validation, form có dynamic line items" — AI cho câu trả lời đúng ngữ cảnh.
Pattern mình dùng khi học công nghệ mới: bắt đầu bằng "giải thích [concept] cho developer đã biết [tech stack hiện tại]" — ví dụ "giải thích Docker Compose cho .NET developer." AI sẽ dùng analogy từ thứ bạn đã biết thay vì giải thích từ zero.
Sau đó hỏi "build [project nhỏ] bằng [tech mới], giải thích từng bước." Hands-on project nhỏ + AI giải thích là combo hiểu nhanh nhất. Cuối cùng khi gặp lỗi (chắc chắn sẽ gặp), paste error cho AI — nó giải thích lỗi trong context của beginner, không giả sử bạn đã biết mọi thứ.
Cẩn thận: AI có thể dạy bạn pattern cũ hoặc cách làm không phải best practice mới nhất. Sau khi học cơ bản từ AI, nên đọc official docs để verify. AI giúp bạn bootstrap, không thay thế việc đọc docs.
9. Code review assistance — Đôi mắt thứ hai
AI không thay thế code review từ đồng nghiệp — nhưng nó là bước lọc đầu tiên tốt. Trước khi submit PR cho team review, mình chạy code qua AI để bắt những vấn đề rõ ràng: unused variable, missing null check, N+1 query potential, inconsistent naming.
Prompt mình dùng: "Review code này cho dự án ASP.NET Core + EF Core + PostgreSQL. Focus vào security vulnerabilities, performance issues, missing error handling. Đánh severity: Critical, High, Medium, Low."
AI bắt được những thứ mà mình dễ bỏ qua khi đã nhìn code quá lâu: quên CancellationToken propagation, ToListAsync() trước filter khiến load toàn bộ table vào memory, thiếu validation ở edge case, sensitive data trong log message.
Reviewer con người vẫn quan trọng hơn — vì họ hiểu business context, architectural decision, team convention. AI chỉ review code level, không review design level. Nhưng nếu AI đã bắt hết code-level issues, reviewer con người có thể focus vào design và business logic — review hiệu quả hơn cho cả hai bên.
10. Viết script automation — Những task chỉ làm một lần
Thỉnh thoảng cần script chạy một lần: migrate data từ format cũ sang mới, bulk update records theo business rule, generate report từ database, parse CSV rồi import vào system.
Trước đây, viết script mất 1-2 tiếng cho task mà chỉ chạy 1 lần. Giờ mô tả cho AI: "Viết C# script đọc file CSV có columns [Name, Size, Brand, Price], validate data (price > 0, size match pattern xxx/xxRxx), insert vào table Products qua EF Core, log records bị skip và lý do."
AI generate script hoàn chỉnh trong 2 phút, mình review logic 5 phút, chạy thử với 10 records, confirm OK, chạy full. Từ 2 tiếng xuống 15 phút.
Script automation cũng là nơi AI ít rủi ro nhất — vì script chạy 1 lần, không cần maintain, không cần beautiful code. Miễn nó hoạt động đúng cho task cụ thể đó.
Những cách dùng AI không hiệu quả — Nói thẳng
Không phải mọi cách dùng AI đều tốt. Một số cách mình đã thử và bỏ.
Để AI thiết kế kiến trúc hệ thống. AI gợi ý được các pattern (Clean Architecture, CQRS, Event Sourcing), nhưng không biết constraints thực tế: team size, deadline, budget, technical debt hiện tại, skill level của team. Kiến trúc cần hiểu context mà chỉ con người trong tổ chức mới có.
Copy-paste AI code không review. AI generate code nhìn đúng nhưng có thể sai ở edge case. Mình từng để AI generate EF Core query, nhìn đúng, chạy đúng trong test — nhưng production có data cũ không match assumption của AI, query trả về kết quả sai. Review mọi thứ AI generate, đặc biệt là logic liên quan đến data.
Dùng AI cho task mình không hiểu. Nếu bạn không hiểu Kubernetes và bảo AI "deploy app lên K8s", bạn sẽ nhận được YAML files mà bạn không thể debug khi có vấn đề. AI giúp bạn làm nhanh hơn những gì bạn đã biết — không phải thay thế việc hiểu.
Dùng AI quá nhiều cho task đơn giản. Mở AI để hỏi "cách viết for loop trong C#" chậm hơn tự gõ. AI có overhead (mở tool, gõ prompt, đợi response, review) — nếu task mất 30 giây tự làm, đừng dùng AI.
Nguyên tắc dùng AI hiệu quả
Sau nhiều tháng dùng AI hàng ngày, mình rút ra vài nguyên tắc.
Thứ nhất, cung cấp context. Prompt "viết function validate email" cho kết quả generic. Prompt "viết function validate email cho entity Customer trong dự án .NET 8 dùng FluentValidation, cần check format + unique trong database + domain không nằm trong blacklist" cho kết quả dùng được ngay.
Thứ hai, review mọi thứ. AI là junior developer rất nhanh — nhanh nhưng hay sai ở chi tiết. Bạn là senior reviewer. Không bao giờ merge AI code mà không review.
Thứ ba, dùng AI cho đúng loại task. Boilerplate, debugging, documentation, testing scaffold — tuyệt vời. Business logic phức tạp, architecture decision, security-critical code — cẩn thận hoặc không dùng.
Thứ tư, đầu tư vào prompt skill. Cùng một câu hỏi, prompt tốt cho kết quả dùng được ngay, prompt dở cho kết quả phải sửa nhiều hơn tự viết. Đây là skill đáng đầu tư vì ROI cực cao — 5 phút viết prompt tốt hơn tiết kiệm 30 phút sửa output.
Cuối cùng, biết khi nào dừng. Nếu bạn đã hỏi AI 3 lần mà kết quả vẫn không đúng, có thể task này không phù hợp cho AI — hoặc bạn thiếu context để mô tả task cho AI hiểu. Dừng lại, tự làm, hoặc hỏi đồng nghiệp.
Kết luận
AI không biến developer trung bình thành developer giỏi. Nhưng nó biến developer giỏi thành developer giỏi và nhanh hơn. Nó loại bỏ phần nhàm chán (boilerplate, formatting, repetitive testing) để bạn tập trung vào phần thú vị (thiết kế, giải quyết vấn đề, business logic).
10 cách ở trên không phải lý thuyết — mình dùng hàng ngày và ước tính tiết kiệm 1-2 tiếng mỗi ngày. Đó là 20-40 tiếng mỗi tháng — gần một tuần làm việc. Thời gian đó mình dùng để học thứ mới, refactor code cũ, hoặc đơn giản là về nhà sớm hơn.
Bắt đầu bằng một cách mà bạn thấy phù hợp nhất với workflow hiện tại. Đừng cố áp dụng tất cả 10 cách cùng lúc — thêm từ từ, thấy hiệu quả thì giữ, không hiệu quả thì bỏ. AI là công cụ, và mỗi người dùng công cụ khác nhau.
Leave a comment
Your email address will not be published. Required fields are marked *