# 200Lab > 200Lab là nền tảng học lập trình và kỹ thuật phần mềm bằng tiếng Việt: khoá học, lộ trình và bài viết chuyên sâu. Mỗi khoá học, lộ trình và bài viết đều có bản Markdown: thêm `.md` vào cuối URL của trang (ví dụ `/blog/.md`, `/courses/.md`). Mục "Bài viết mới nhất" chỉ gồm các bài gần đây; danh sách đầy đủ nằm trong các sitemap ở mục "Toàn bộ nội dung" cuối file. ## Khoá học - [Đo chất lượng model và ứng dụng AI](https://200lab.io/courses/do-chat-luong-model-va-ung-dung-ai.md): Khoá nền tảng về eval: đo chất lượng model và ứng dụng AI theo công việc cụ thể. Bạn học cách chọn metric, thiết kế case và dataset, kiểm tra AI judge và so sánh thay đổi để đề xuất có căn cứ. - [Xây dựng tính năng LLM có phạm vi rõ ràng - task contract, prompt, structured output, eval và failure handling](https://200lab.io/courses/xay-dung-tinh-nang-llm-co-pham-vi-ro-rang-task-contract-prompt-structured-output-eval-va-failure-handling.md): Khoá học giúp bạn xác định một tính năng LLM có phạm vi rõ, chọn dữ liệu và cấu hình theo việc cần làm, kiểm output theo cả schema lẫn business invariant. Bạn học cách đọc failure path, đánh giá bằng evidence và bàn giao bản kiểm lại được. Nội dung giữ provider-neutral: model là một thành phần trong hệ thống. - [Hiểu chuẩn dữ liệu để "Giao tiếp" hiệu quả với AI](https://200lab.io/courses/tim-hieu-cac-file-du-lieu-thuong-gap-json-jsonl-csv-yaml-va-markdown-frontmatter.md): Khoá nền tảng miễn phí cho người không lập trình về năm định dạng file văn bản hay gặp: JSON, JSONL, CSV, YAML và Markdown có frontmatter. Bạn học cách đọc cấu trúc của từng loại, sửa một chỗ nhỏ mà không làm hỏng file, rồi kiểm lại trước khi gửi đi. Vì file hợp lệ chưa chắc là file đúng. - [Agent Harness Foundations](https://200lab.io/courses/agent-harness-foundations.md): Khoá học nền tảng về Harness — phần khung quanh model quyết định một Agent chạy có kiểm soát hay không. Bạn học cách phân biệt LLM Call, Workflow và Agent, đọc đúng chỗ lỗi (control flow, state, permission, evidence) và kiểm chứng Agent bằng hành vi chạy lại được, thay vì đổi model rồi hy vọng. ## Blog theo series - [Cách tạo website bằng AI cho người mới](https://200lab.io/blog/series/cach-tao-website-bang-ai.md): Loạt bài hướng dẫn người không lập trình tự dựng một trang giới thiệu cửa hàng bằng AI, từ mô tả bằng tiếng Việt tới lúc gửi được đường dẫn cho khách. Bài mẹ so sánh ba công cụ, ba bài con hướng dẫn từng công cụ từ đầu tới cuối. ## Bài viết mới nhất - [Effort trong Claude Code là gì? Cách chọn mức effort phù hợp](https://200lab.io/blog/effort-trong-claude-code.md): Effort quyết định mức công sức Claude bỏ ra để có câu trả lời. Bài viết hướng dẫn cách xem, đổi và lưu cài đặt, phân biệt ultrathink với ultracode, lựa chọn mức effort phù hợp - [Claude Managed Agents là gì? Hướng dẫn cho người dùng Claude Code](https://200lab.io/blog/claude-managed-agents-la-gi.md): Muốn thêm ô hỏi đáp để agent đọc tài liệu và email trong ứng dụng bạn tự làm bằng Claude Code? Bài viết giải thích Claude Managed Agents là gì, khác Routines ở đâu, cách tạo agent đầu tiên, chi phí và dữ liệu đi đâu. - [Agent harness là gì? Hướng dẫn cho người mới](https://200lab.io/blog/agent-harness-la-gi.md): Agent vẫn làm sai dù đã có file hướng dẫn? Tìm hiểu harness trong Codex và Claude Code, cách kiểm thông tin agent đọc, đặt lời dặn cụ thể, dùng quyền chặn và xác định lúc cần nhờ lập trình viên. - [Cách tạo website bằng AI với Claude](https://200lab.io/blog/cach-tao-website-bang-ai-voi-claude.md): Dựng một trang giới thiệu cửa hàng bằng Claude ngay trên trình duyệt, sửa nội dung bằng tiếng Việt, rồi mở quyền cho khách xem mà không cần tài khoản. - [Cách tạo website bằng AI với Antigravity](https://200lab.io/blog/cach-tao-website-bang-ai-voi-antigravity.md): Dùng Antigravity của Google để dựng trang giới thiệu cửa hàng thành các file trên máy, rồi đưa lên mạng bằng Cloudflare Pages. - [Cách tạo website bằng AI với Lovable](https://200lab.io/blog/cach-tao-website-bang-ai-voi-lovable.md): Dựng và xuất bản một trang giới thiệu cửa hàng ngay trong trình duyệt bằng Lovable, kèm cách đọc hạn mức credit của gói miễn phí. - [Cách tạo website bằng AI cho người mới](https://200lab.io/blog/cach-tao-website-bang-ai.md): Tự làm trang web giới thiệu cửa hàng bằng AI không cần biết code. Trọn bộ quy trình: chọn công cụ, lên nội dung, xuất bản và chỉnh sửa bảng giá dễ dàng. - [Vibe coding là gì? Hướng dẫn cho người mới](https://200lab.io/blog/vibe-coding-la-gi.md): Vibe coding là cách bạn làm phần mềm bằng cách mô tả cho AI bằng lời thay vì tự viết code. Bài viết giải thích cách nó hoạt động, những việc nó làm được và không làm được, rồi hướng dẫn bạn tự làm một trang web nhỏ trong một buổi. - [Tìm hiểu về Jev - Hệ thống AI Agent sẽ thay đổi ra sao?](https://200lab.io/blog/tim-hieu-ve-jev-he-thong-ai-agent-se-thay-doi-ra-sao.md): Bài này đi từ cơ chế của Jev đến cách chia việc trong agent. Khi có thêm một model chuyên cho những quyết định nhỏ, người xây hệ thống sẽ tổ chức công việc khác đi thế nào? - [Cách phối hợp Claude, Codex và Grok CLI](https://200lab.io/blog/cach-phoi-hop-claude-codex-va-grok-cli.md): Cách phối hợp Codex, Claude Code và Grok Build để phát triển hệ thống. Các agents mạnh nhất sẽ debate, advise giải pháp trên nền thông tin chung được kiểm chứng. - [Airflow là gì? Nền tảng Orchestration - Điều phối Workflow chuyên nghiệp](https://200lab.io/blog/airflow-la-gi.md): Apache Airflow là nền tảng mã nguồn mở được viết bằng Python để tạo, lập lịch và giám sát các workflow phức tạp - [DBT là gì? Tìm hiểu Công cụ Transform trong Data Engineering](https://200lab.io/blog/dbt-la-gi.md): DBT (Data Build Tool) là một công cụ mã nguồn mở giúp Data Engineers và Data Analysts thực hiện bước Transform trong quy trình ELT - [Architecture Pattern - Phần 7: Hexagonal Architecture](https://200lab.io/blog/hexagonal-architecture-la-gi.md): Hexagonal Architecture là pattern kiến trúc mà mọi tương tác từ bên ngoài đều phải đi qua một Adapter để kết nối vào một Port của Application - [File __init__.py trong Python: Hướng dẫn sử dụng toàn diện](https://200lab.io/blog/huong-dan-su-dung-toan-dien-file-init-trong-python.md): __init__.py không chỉ đơn thuần là một file đánh dấu package, nó quyết định cách package của bạn được cấu trúc, import và tối ưu ra sao - [Thiết kế Leaderboard hiệu năng cao: Khi nào chọn SQL, Khi nào dùng Redis?](https://200lab.io/blog/thiet-ke-leaderboard-hieu-nang-cao-khi-nao-chon-sql-khi-nao-dung-redis.md): Khám phá cách thiết kế hệ thống Leaderboard tối ưu, linh hoạt, dễ mở rộng, kết hợp giữa tư duy thiết kế hệ thống hiện đại và kinh nghiệm thực tế - [Hành vi giúp Phân biệt các Senior Engineer với những người còn lại](https://200lab.io/blog/hanh-vi-giup-phan-biet-cac-senior-engineer-voi-nhung-nguoi-con-lai.md): Việc trở thành một senior engineer thực sự không chỉ nằm ở chức danh bạn được giao, mà là kết quả của tư duy, cách tiếp cận công việc mà bạn rèn luyện mỗi ngày - [Asynchronous Request-Reply Pattern: Giải pháp cho những tác vụ nặng](https://200lab.io/blog/asynchronous-request-reply-pattern-la-gi.md): Pattern giúp tách rời phần xử lý backend, diễn ra bất đồng bộ khỏi frontend nhưng vẫn phải đảm bảo frontend nhận được thông báo kết quả cuối cùng - [End-to-End Encryption là gì? Triển Khai E2EE với TypeScript và Web Crypto API](https://200lab.io/blog/e2ee-la-gi.md): End-to-End Encryption là cơ chế bảo mật trong đó chỉ người liên lạc đầu cuối mới có khả năng truy cập và giải mã nội dung dữ liệu được gửi đi - [Opaque Token là gì? So sánh Opaque Token và JWT](https://200lab.io/blog/opaque-token-la-gi.md): Opaque Token là chuỗi ký tự không thể giải mã hay trích xuất thông tin từ phía client, đóng vai trò tham chiếu đến trạng thái xác thực lưu trữ trên server - [Mixture-of-Experts là gì? Giải thích dễ hiểu cho Developer](https://200lab.io/blog/mixture-of-experts-la-gi-giai-thich-de-hieu-cho-developer.md): Mixture-of-Experts là kiến trúc mạng nơ-ron gồm nhiều mạng con (expert), mỗi expert chuyên xử lý một kiểu nhiệm vụ hoặc loại dữ liệu cụ thể - [Các thuật ngữ LLM quan trọng mà Developer nên biết](https://200lab.io/blog/cac-thuat-ngu-llm-quan-trong.md): Nắm vững thuật ngữ như Parameters, Tokens, Context Size, Temperature, ... giúp bạn tận dụng tối đa sức mạnh của LLM và tối ưu ouput đầu ra - [JWT vs Session-Based Authentication: Đâu là lựa chọn phù hợp](https://200lab.io/blog/jwt-vs-session-based-authentication.md): Bài viết này sẽ phân tích hai giải pháp phổ biến để duy trì trạng thái đăng nhập là Session-Cookie và JSON Web Token (JWT) - [LLM có thể giúp chúng ta Code AI Agent không ? Mình đã thử với Gemini và Claude Sonnet](https://200lab.io/blog/llm-co-the-giup-chung-ta-code-ai-agent-khong-minh-da-thu-voi-gemini-va-claude-sonnet.md): Mục tiêu của thử nghiệm là giả lập một developer chưa từng tiếp xúc với langchain, langgraph yêu cầu AI hướng dẫn code một agent AI hoàn chỉnh - [Thử nghiệm chạy một tỷ Request với 5 Web Framework phổ biến](https://200lab.io/blog/thu-nghiem-chay-mot-ty-request-voi-5-web-framework-pho-bien.md): Thực hiện một thử nghiệm táo bạo: chạy 1 tỷ requests qua 5 web frameworks phổ biến để xem chúng phản ứng ra sao - [Prompt Caching: Tối Ưu Hiệu Suất và Chi Phí Khi Làm Việc Với LLM API](https://200lab.io/blog/prompt-caching-la-gi.md): Prompt Caching là cơ chế lưu trữ (cache) một phần hoặc toàn bộ prompt (bao gồm systemp prompt, hướng dẫn, tài liệu, ...) mà bạn gửi lên LLM API - [LangSmith: Công cụ Tracing & Debugging ứng Dụng LLM](https://200lab.io/blog/langsmith-la-gi.md): LangSmith là nền tảng được phát triển bởi đội ngũ đứng sau LangChain, giúp developer theo dõi, debug và đánh giá ứng dụng LLM - [Tại sao các Experienced Programmer lại trượt Coding Interview?](https://200lab.io/blog/tai-sao-cac-experienced-programmer-lai-truot-coding-interview.md): Tại sao các lập trình viên giàu kinh nghiệm lại trượt Coding Interview. Họ đều là senior engineer thực thụ, giỏi giải quyết các bài toán kỹ thuật - [MinIO: Giải pháp Object Storage Mã nguồn mở thay thế S3](https://200lab.io/blog/minio-la-gi.md): MinIO là giải pháp object storage mã nguồn mở, hiệu năng cao, và hoàn toàn tương thích với API của Amazon S3 - [Perplexity AI: Đối thủ thách thức Google Search](https://200lab.io/blog/perplexity-la-gi.md): Perplexity là một công cụ tìm kiếm dựa trên AI, kết hợp khả năng của các mô hình ngôn ngữ lớn với khả năng truy xuất thông tin từ internet - [Lovable: Cách mạng phát triển Ứng dụng Web bằng Trí Tuệ Nhân Tạo](https://200lab.io/blog/lovable-la-gi.md): Lovable là một nền tảng phát triển ứng dụng web, sử dụng trí tuệ nhân tạo (AI) giúp chuyển ý tưởng thành sản phẩm thực tế một cách nhanh chóng - [DuckDB là gì? Khám phá siêu vũ khí Phân tích dữ liệu](https://200lab.io/blog/duckdb-la-gi.md): DuckDB là một cơ sở dữ liệu phân tích dạng nhúng (embedded database) được thiết kế tối ưu để xử lý các workload phân tích - [Memory Leak trong Go: cách Tìm và Khắc phục](https://200lab.io/blog/memory-leak-trong-go-cach-tim-va-khac-phuc.md): Mặc dù Go có cơ chế thu gom rác (Garbage Collection), rò rỉ bộ nhớ vẫn có thể xảy ra nếu bộ nhớ không sử dụng vẫn bị tham chiếu một cách vô tình - [System Prompt: Hướng dẫn toàn diện cho Developer](https://200lab.io/blog/system-prompt-la-gi.md): System Prompt là một loại prompt đặc biệt được đặt ở đầu cuộc hội thoại với mô hình ngôn ngữ lớn, nhằm thiết lập bối cảnh, định nghĩa vai trò, cung cấp hướng dẫn chung cho toàn bộ cuộc đối thoại - [Shadcn UI vs Component Libraries truyền thống: Lựa chọn nào phù hợp với bạn?](https://200lab.io/blog/shadcn-ui-la-gi.md): Shadcn UI không phải là một thư viện component thông thường, mà là một bộ sưu tập các component React có thể sao chép và tùy chỉnh trực tiếp vào dự án của bạn - [Cursor vs Windsurf: So sánh và phối hợp cả hai cho việc phát triển hệ thống, phần mềm](https://200lab.io/blog/cursor-vs-windsurf-so-sanh-va-phoi-hop.md): Cursor vẫn là lựa chọn dẫn đầu. Tuy nhiên, bạn có thể sử dụng Windsurf để tiết kiệm hơn với chế độ thinking mode, trong khi dùng Cursor cho các tác vụ đòi hỏi nhiều tool actions. - [Supabase: Giải pháp Backend-as-a-Service mã nguồn mở](https://200lab.io/blog/supabase-la-gi.md): Supabase là một nền tảng Backend as a Service mã nguồn mở, được tạo ra như một giải pháp thay thế cho Firebase - [Customer Lifetime Value (LTV): Demo Phân tích LTV cho Doanh nghiệp E-commerce](https://200lab.io/blog/customer-lifetime-value-la-gi.md): Customer Lifetime Value là tổng giá trị kinh tế mà một khách hàng mang lại cho doanh nghiệp trong suốt thời gian họ là khách hàng - [Cloudflare Workers: Giải pháp Serverless tại Edge cho Developer](https://200lab.io/blog/cloudflare-workers-la-gi.md): Cloudflare Workers là một nền tảng serverless cho phép bạn chạy JavaScript và WebAssembly trên các edge node của Cloudflare - [Cloud-Native là gì? So sánh Kiến trúc Truyền thống và Cloud-Native](https://200lab.io/blog/cloud-native-la-gi.md): Cloud-native là phương pháp xây dựng, vận hành các ứng dụng tối ưu cho môi trường cloud ngay từ ban đầu, tận dụng tối đa các lợi ích từ cloud - [MLOps là gì? Những Kỹ năng cần thiết cho vị trí MLOps](https://200lab.io/blog/mlops-la-gi.md): MLOps là tập hợp các phương pháp và quy trình nhằm chuẩn hóa và tự động hóa việc triển khai các hệ thống machine learning - [Top các công cụ Quản lý Môi trường trong Python](https://200lab.io/blog/cong-cu-quan-ly-moi-truong-trong-python.md): Bài viết này sẽ so sánh các công cụ quản lý môi trường trong Python phổ biến hiện nay, kèm theo ví dụ code để minh họa cách sử dụng - [A/B Testing là gì? Hướng dẫn Thực hiện A/B Testing cho Data Analyst](https://200lab.io/blog/ab-testing-la-gi.md): A/B Testing là một phương pháp nghiên cứu định lượng, hai hoặc nhiều phiên bản của một sản phẩm/tính năng được kiểm thử đồng thời để xác định phiên bản nào hiệu quả hơn - [Bloom Filter và Ứng dụng: Giải thích dễ hiểu cho Developer](https://200lab.io/blog/bloom-filter-la-gi.md): Bloom Filter là một cấu trúc dữ liệu xác suất được thiết kế để kiểm tra nhanh chóng xem một phần tử có thuộc tập hợp hay không - [Ollama: Công cụ hỗ trợ Triển khai Ứng dụng LLM nội bộ](https://200lab.io/blog/ollama-la-gi.md): Ollama là một công cụ mã nguồn mở được tạo ra để giúp việc chạy các mô hình ngôn ngữ lớn trở nên đơn giản và dễ dàng hơn trên máy tính cá nhân - [LM Studio: Công cụ chạy LLM Local Nhanh chóng Dễ dàng cho Developer](https://200lab.io/blog/lm-studio-la-gi.md): LM Studio là một ứng dụng desktop được thiết kế đặc biệt cho developers, giúp bạn dễ dàng tải, chạy và tương tác với các mô hình ngôn ngữ lớn - [Cloudflare Tunnel: Một lựa chọn thay thế Ngrok đáng cân nhắc](https://200lab.io/blog/cloudflare-tunnel-la-gi.md): Cloudflare Tunnel là công cụ giúp bạn kết nối các ứng dụng hoặc dịch vụ chạy cục bộ trên máy tính, server, hoặc mạng nội bộ của bạn với internet - [Knowledge Distillation: Kỹ thuật truyền Tri Thức giữa các Mô hình AI](https://200lab.io/blog/knowledge-distillation-la-gi.md): Knowledge Distillation là một kỹ thuật machine learning giúp chuyển giao kiến thức từ một mô hình phức tạp sang một mô hình đơn giản hơn - [RAG (Retrieval-Augmented Generation) là gì? Giải thích dễ hiểu cho Developer](https://200lab.io/blog/rag-la-gi.md): RAG là phương pháp kết hợp giữa khả năng truy xuất thông tin từ các nguồn dữ liệu bên ngoài với sức mạnh tạo nội dung của mô hình ngôn ngữ lớn - [Observability vs Monitoring: Hướng dẫn thực hiện Observability](https://200lab.io/blog/observability-vs-monitoring.md): Monitoring và Observability không phải là hai lựa chọn đối lập mà là hai yếu tố bổ trợ lẫn nhau để đảm bảo hệ thống của bạn hoạt động hiệu quả - [Streamlit: Công cụ phát triển Ứng dụng Web Data Science](https://200lab.io/blog/streamlit-la-gi.md): Streamlit là một thư viện Python mã nguồn mở được thiết kế để giúp các data scientist, machine learning engineer xây dựng ứng dụng web dễ dàng ## Toàn bộ nội dung - [Sitemap bài viết](https://200lab.io/sitemaps/posts.xml): URL của mọi bài viết đã xuất bản; thêm `.md` vào cuối một URL để đọc bản Markdown - [Sitemap khoá học](https://200lab.io/sitemaps/courses.xml): URL của mọi khoá học đang mở - [Sitemap lộ trình](https://200lab.io/sitemaps/learning-paths.xml): URL của mọi lộ trình học - [RSS](https://200lab.io/rss.xml): các bài viết mới nhất kèm tóm tắt và ngày đăng - [Blog](https://200lab.io/blog): trang danh sách bài viết; lọc theo chủ đề tại `/blog/tags/` ## Dành cho agent - Bản Markdown: thêm `.md` vào cuối URL của bài viết, khoá học, lộ trình, chủ đề hoặc series (ví dụ `/blog/.md`, `/blog/tags/.md`, `/blog/series/.md`) - [Danh sách bài viết](https://200lab.io/blog.md): 50 bài viết mới nhất kèm chủ đề và thời gian đọc - [Danh sách khoá học](https://200lab.io/courses.md): mọi khoá học đang mở kèm số bài học và trạng thái mở bán - [Danh sách lộ trình](https://200lab.io/learning-paths.md): mọi lộ trình kèm số khoá học và trạng thái mở bán - Tìm kiếm: `https://200lab.io/search.md?q=` trả kết quả dạng Markdown, nhóm theo loại nội dung; thêm `scope=blog` hoặc `scope=catalog` để thu hẹp - Đọc thêm: bản Markdown của mỗi bài viết kết thúc bằng mục "Đọc thêm" gồm các bài cùng chủ đề, bài trước và bài sau trong series, và trang chủ đề