Learn > Claude > Claude Code in Action

Claude Code in Action

AI-assisted coding, terminal, debugging, CI/CD thực chiến.

  • Coding assistant không chỉ là công cụ viết code mà là một hệ thống dùng language model (LM) để giải task lập trình, theo quy trình như dev người thật: Gather context → Formulate a plan → Take an action, rồi lặp (iterate).
  • Bên trong Assistant = Language Model + Set of tools. Đa số assistant dùng LM host từ xa; Claude Code dùng Claude series, host ở Anthropic, AWS hoặc Google Cloud (configurable).
  • Tool Use Challenge: LM tự thân chỉ text-in/text-out, không thật sự đọc file hay chạy lệnh. Tool use giải bằng cách coding assistant chèn instruction dạy LM cách request action (VD "ReadFile: main.go"), assistant thực thi hộ rồi trả kết quả ngược lại cho LM.
  • Không phải LM nào cũng dùng tool giỏi như nhau. Claude series (Opus, Sonnet, Haiku) đặc biệt mạnh ở hiểu và dùng tool — kể cả tool chưa từng thấy.
  • Lợi ích tool use mạnh: tackle task khó hơn (kết hợp nhiều tool), extensible platform (thêm tool mới dễ), và better security (navigate codebase không cần indexing → thường không gửi cả codebase lên server ngoài).
  • Claude Code ship kèm bộ built-in tools: Agent, Bash, Edit, Glob (tìm file theo pattern), Grep (tìm nội dung file), LS, MultiEdit, NotebookEdit/NotebookRead, Read, TodoRead/TodoWrite, WebFetch, WebSearch, Write — harness khai báo cho model ở mỗi request.
  • Sức mạnh nằm ở chuỗi nhiều tool và mở rộng bằng MCP: data analysis qua notebook (viết code → chạy → thêm cell → summary), UI styling qua Playwright MCP (điều khiển browser: mở, navigate, screenshot), review PR qua GitHub MCP, và đọc xuyên Terraform/IaC để soi luồng dữ liệu across hệ thống (DB → Lambda → S3).

Claude Code in Action là gì? Là khoá thực chiến tiếp nối Claude Code 101, đi sâu vào coding với sự hỗ trợ của AI trong thực tế. Đây là ghi chú tiếng Việt tóm tắt toàn khoá, thuật ngữ giữ nguyên tiếng Anh kèm chú thích.

TL;DR — Một coding assistant không chỉ viết code; nó là hệ thống ghép language model (LM) với một set of tools, chạy vòng Gather context → Formulate a plan → Take an action rồi lặp. Mấu chốt: LM tự thân chỉ text-in/text-out, không đọc file hay chạy lệnh được — nó "làm được việc" nhờ tool use: assistant dạy LM trả về text đúng định dạng (VD ReadFile: main.go), rồi assistant thực thi hộ và đưa kết quả ngược lại. Claude series (Opus/Sonnet/Haiku) đặc biệt giỏi tool use, mang lại task khó hơn, dễ mở rộng, và bảo mật tốt hơn (không cần index cả codebase).

Coding assistant thực sự là gì

Một coding assistant không chỉ là công cụ viết code — nó là một hệ thống tinh vi dùng language model để giải các task lập trình phức tạp. Hiểu cách nó vận hành phía sau giúp anh nhận ra điều gì làm nên một "coding companion" thật sự mạnh.

Coding assistant làm việc thế nào

Khi anh giao một task — VD fix một bug từ error message — coding assistant đi theo quy trình giống hệt một dev người thật:

  1. Gather context (thu thập ngữ cảnh) — hiểu error trỏ tới cái gì, phần nào của codebase bị ảnh hưởng, và file nào liên quan.
  2. Formulate a plan (lập kế hoạch) — quyết cách giải: sửa code chỗ nào, rồi chạy test để verify fix.
  3. Take an action (hành động) — thực sự hiện thực giải pháp: update file và chạy lệnh.

Rồi iterate (lặp) tới khi xong. Điểm mấu chốt: bước 1 và 3 buộc assistant phải tương tác với thế giới ngoài — đọc file, fetch documentation, chạy lệnh, hoặc sửa code.

Bên trong khối Assistant có hai thành phần: một Language Model và một Set of tools. Về nơi host model:

  • Đa số coding assistant dùng language model host từ xa (remotely hosted).
  • Claude Code dùng Claude series of models, host ở Anthropic, AWS, hoặc Google Cloudconfigurable (cấu hình được).

The Tool Use Challenge — vì sao cần tool

Đây là chỗ thú vị. Language model tự thân chỉ xử lý text và trả về text — nó không thật sự đọc file hay chạy lệnh được. Nếu anh bảo một LM trần "đọc file này", nó sẽ nói nó không có khả năng đó.

Vậy coding assistant giải bài toán này ra sao? Bằng một hệ thống khéo léo gọi là "tool use".

Tool use chạy như thế nào

Khi anh gửi request tới coding assistant, nó tự động chèn thêm instruction vào message để dạy language model cách request một action. VD nó thêm dòng: "If you want to read a file, respond with ReadFile: name of file" (muốn đọc file thì trả lời ReadFile: tên file).

Flow đầy đủ:

  1. Anh hỏi: "main.go có code gì?"
  2. Coding assistant thêm tool instructions vào request của anh.
  3. Language model đáp: ReadFile: main.go.
  4. Coding assistant đọc file thật và gửi nội dung file ngược lại cho model.
  5. Language model đưa ra câu trả lời cuối dựa trên nội dung file.

Hệ thống này cho phép language model "đọc file", "viết code", "chạy lệnh" một cách hiệu quả — dù thực chất nó chỉ đang sinh ra các text response được định dạng cẩn thận. Người thực thi hành động là coding assistant, không phải model.

Vì sao tool use của Claude tạo khác biệt

Không phải language model nào cũng dùng tool giỏi ngang nhau. Claude series of models đặc biệt mạnh ở việc hiểu tool làm gìdùng chúng hiệu quả để hoàn thành task phức tạp. Sức mạnh này mang lại vài lợi ích then chốt cho Claude Code:

  • Tackles harder tasks (kham task khó hơn) — Claude kết hợp nhiều tool để xử việc phức tạp, và dùng được cả tool nó chưa từng thấy.
  • Extensible platform (nền tảng mở rộng được) — anh thêm tool mới vào Claude Code dễ dàng, và Claude tự thích ứng khi workflow của anh thay đổi.
  • Better security (bảo mật tốt hơn) — Claude Code navigate codebase mà không cần indexing, nghĩa là thường không phải gửi toàn bộ codebase lên server ngoài.

Key takeaways

  • Coding assistant dùng language model để hoàn thành các task khác nhau.
  • Language model cần tool để kham hầu hết task lập trình thực tế.
  • Không phải LM nào dùng tool cũng giỏi như nhau.
  • Tool use mạnh của Claude mở ra bảo mật tốt hơn, tuỳ biến cao hơn, và độ bền (longevity) lâu hơn trong Claude Code.

Chính khả năng tool use này biến một model chỉ-sinh-text thành một coding assistant thực thụ: đọc được file, hiểu codebase, và tạo thay đổi có ý nghĩa cho dự án của anh.

Áp dụng thực tế: hiểu "LM chỉ sinh text, assistant mới thực thi" giúp em debug đúng chỗ khi Claude Code hành xử lạ: nếu nó hiểu sai việc cần làm thì đó là vấn đề model/prompt (context, mô tả); còn nếu nó muốn làm đúng nhưng thao tác trượt (đọc nhầm file, lệnh lỗi) thì đó là tầng tool/permission. Hai tầng, hai cách sửa. Về mặt Delivery, ý "better security nhờ không cần indexing" là điểm em hay nhấn khi thuyết phục khách Nhật: mã nguồn không bị đẩy nguyên khối lên server ngoài để build index — một khác biệt bảo mật cụ thể, không phải khẩu hiệu.

Bộ tool sẵn có trong Claude Code

Claude Code ship kèm một bộ tool tiêu chuẩn (built-in) — chính là "tay chân" mặc định. Claude tự chọn tool phù hợp cho từng bước:

Tool Công dụng
Agent Khởi chạy một subagent lo một task
Bash Chạy một shell command
Edit Sửa một file
Glob Tìm file theo một pattern
Grep Tìm trong nội dung file
LS Liệt kê file & thư mục
MultiEdit Nhiều sửa đổi cùng lúc
NotebookEdit Ghi vào một cell trong Jupyter notebook
NotebookRead Đọc một cell
Read Đọc một file
TodoRead Đọc một mục trong to-do đã tạo
TodoWrite Cập nhật danh sách to-do
WebFetch Lấy nội dung từ một URL
WebSearch Tìm kiếm web
Write Ghi ra một file

Nối với bài trước: những tool này không nằm sẵn trong model — Claude Code (harness) khai báo chúng cho model ở mỗi request; model đọc mô tả rồi quyết gọi cái nào. Nhớ cặp dễ nhầm: Glob = tìm file theo pattern, còn Grep = tìm nội dung bên trong file.

Claude Code phối hợp tool ra sao — 4 ví dụ thực chiến

Sức mạnh không nằm ở từng tool lẻ, mà ở việc Claude tự chuỗi (chain) nhiều tool để hoàn thành một task lớn. Bốn ví dụ minh hoạ:

1. Data analysis task (built-in + notebook)

Task: "Phân tích dữ liệu trong file streaming.csv" (tìm insight về user của một video streaming platform). Claude Code tự đi:

  1. Viết code trong một notebook để soi định dạng dữ liệu.
  2. Chạy code và xem kết quả.
  3. Thêm cell, chạy từng cái để dẫn dắt phân tích.
  4. Viết final summary.

→ Dùng NotebookEdit / NotebookRead + Bash + Read; Claude chạy thử → đọc kết quả → quyết bước tiếp (đúng agentic loop).

2. UI styling task (Playwright MCP Server)

Task: "Cải thiện design của app này, tập trung vào chat interface và header." Cắm thêm Playwright MCP Server = bộ tool cho phép Claude điều khiển browser. Claude Code: Open browser → Navigate tới app → Take a screenshot → Update styling.

→ Điểm học: sửa CSS "mù" (chỉ đọc code) thì được tạm ổn, nhưng cho Claude tự nhìn UI qua screenshot thì nó verify được bằng mắt — đúng tinh thần "add tools" ở Claude Code 101.

3. GitHub integration (GitHub MCP Server)

Task: "Review các thay đổi trong pull request." Cắm GitHub MCP Server = bộ tool cho Claude tương tác với GitHub (kể cả tạo comment). Claude Code: Đọc changes trong PR → đánh giá code quality / performance → viết summary report.

4. Đọc xuyên hạ tầng — soi luồng dữ liệu (Infrastructure-as-Code)

Ví dụ cảnh báo: một DynamoDB Table (userId, email, plansViewed, registrationDate) → một Lambda Function ghi dữ liệu ra một S3 Bucket dùng chung → được cả Internal Marketing Team External Marketing Partner truy cập. Vì hạ tầng được định nghĩa trong Terraform files (infrastructure-as-code) mà Claude Code đọc dễ dàng, Claude có thể lần theo luồng dữ liệu xuyên nhiều tầng (DB → code → cloud config) và chỉ ra rủi ro — VD partner ngoài đang chạm tới dữ liệu không nên chạm.

→ Điểm học lớn nhất: vì Claude Code đọc trực tiếp code + IaC, nó reason trên cả hệ thống, không chỉ một file đơn lẻ — thứ mà một công cụ chỉ-đọc-một-file không làm được.

Áp dụng thực tế: cách em đọc 4 ví dụ này = cùng một Claude Code, khác nhau ở bộ tool được trao. Built-in lo việc trong repo; MCP mở rộng ra ngoài (browser, GitHub, cloud). Với khách Nhật, ví dụ số 4 là điểm em hay dùng để định vị Claude Code như một reviewer hạ tầng: nó đọc được Terraform + Lambda + schema DB nên soi được luồng dữ liệu nhạy cảm (VD PII rò sang partner ngoài) — thứ review tay xuyên nhiều repo / nhiều dịch vụ rất dễ bỏ sót.

Từ khoá cần thuộc

🔴 Core: coding assistant (hệ thống dùng LM, không chỉ viết code) · quy trình Gather context → Formulate a plan → Take an action + iterate · bước 1 & 3 tương tác thế giới ngoài (đọc file, fetch docs, chạy lệnh, sửa code) · Language Model + Set of tools (2 thành phần trong Assistant) · Tool Use Challenge (LM tự thân chỉ text-in / text-out, không đọc file/chạy lệnh) · tool use (assistant chèn instruction dạy LM request action) · flow 5 bước (ReadFile: main.go = LM nói, assistant làm rồi trả nội dung ngược lại) · Claude series đặc biệt mạnh tool use · better security = navigate codebase không cần indexing (không gửi cả codebase ra ngoài) · built-in tools (harness khai báo cho model mỗi request): Agent · Bash · Edit · Glob · Grep · LS · MultiEdit · NotebookEdit · NotebookRead · Read · TodoRead · TodoWrite · WebFetch · WebSearch · Write · Glob = tìm file theo pattern vs Grep = tìm nội dung trong file · MCP server mở rộng bộ tool (Playwright MCP = control browser; GitHub MCP = interact with GitHub) · Claude Code đọc IaC (Terraform)reason xuyên cả hệ thống, không chỉ 1 file.

🟡 Important: Opus · Sonnet · Haiku (Claude series) · tackles harder tasks (kết hợp tool + dùng cả tool chưa từng thấy) · extensible platform (thêm tool mới dễ, Claude tự thích ứng) · model host configurable: Anthropic / AWS / Google Cloud · đa số assistant dùng LM remote-hosted · LM sinh text được định dạng cẩn thận (không thật sự "chạy") · assistant là bên thực thi action · notebook workflow (viết code → chạy → thêm cell từng bước → final summary) · dùng screenshot để verify UI (Playwright) · PR review flow (đọc changes → đánh giá quality/perf → summary report; GitHub MCP tạo được comment) · Agent tool = spawn subagent · MultiEdit = nhiều sửa đổi cùng lúc.

🟢 Good-to-know: ẩn dụ "như dev người thật" · longevity (độ bền theo thời gian) · coding companion · standalone LM sẽ nói "không có khả năng đọc file" · tool instruction được tự động thêm vào message của anh · TodoRead/TodoWrite quản danh sách to-do · NotebookEdit/NotebookRead cho Jupyter · S3 bucket dùng chung → rủi ro External Marketing Partner chạm dữ liệu (ví dụ data-governance).


Nguồn: Claude Code in Action (Anthropic Academy) — Copyright Anthropic. Phần đề thi thử cho khoá này nằm ở tab "Đề thi thử".

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

Coding assistant hoạt động thế nào bên trong?
Coding assistant là một hệ thống dùng language model để giải task lập trình, theo quy trình như dev người thật: Gather context (hiểu error, xác định file và phần codebase liên quan), Formulate a plan (quyết cách sửa và cách verify), rồi Take an action (sửa file, chạy lệnh) — lặp lại tới khi xong. Bước gather context và take action bắt buộc phải tương tác với thế giới ngoài như đọc file, fetch documentation, chạy lệnh hay sửa code.
Tool use trong coding assistant là gì và giải quyết vấn đề gì?
Language model tự thân chỉ nhận text và trả text — nó không thật sự đọc file hay chạy lệnh được. Tool use giải vấn đề đó: khi bạn gửi request, coding assistant tự chèn thêm instruction dạy LM cách yêu cầu một action, ví dụ "nếu muốn đọc file thì trả lời ReadFile: tên file". LM đáp lại bằng text đúng định dạng đó (VD "ReadFile: main.go"), coding assistant đọc file thật rồi gửi nội dung ngược lại cho LM để nó đưa câu trả lời cuối. Nhờ vậy LM "đọc file / viết code / chạy lệnh" được dù thực chất chỉ sinh text theo quy ước.
Vì sao khả năng dùng tool của Claude lại quan trọng với Claude Code?
Không phải language model nào cũng dùng tool giỏi như nhau. Claude series (Opus, Sonnet, Haiku) đặc biệt mạnh ở việc hiểu tool làm gì và dùng chúng hiệu quả để hoàn thành task phức tạp. Điều này mang lại ba lợi ích cho Claude Code: tackle được task khó hơn (kết hợp nhiều tool, dùng cả tool chưa từng thấy), là extensible platform (thêm tool mới dễ, Claude tự thích ứng), và better security (navigate codebase không cần indexing nên thường không phải gửi toàn bộ codebase lên server ngoài).
Claude Code dùng model nào và host ở đâu?
Claude Code dùng Claude series of models. Khác với đa số coding assistant dùng language model host từ xa cố định, Claude Code cho phép cấu hình (configurable) nơi host model: Anthropic, AWS, hoặc Google Cloud.
Claude Code có sẵn những tool nào (built-in)?
Bộ built-in gồm: Agent (khởi chạy subagent lo một task), Bash (chạy shell command), Edit (sửa file), Glob (tìm file theo pattern), Grep (tìm nội dung trong file), LS (liệt kê file & thư mục), MultiEdit (nhiều sửa đổi cùng lúc), NotebookEdit (ghi vào cell Jupyter), NotebookRead (đọc cell), Read (đọc file), TodoRead và TodoWrite (đọc/cập nhật danh sách to-do), WebFetch (lấy nội dung từ URL), WebSearch (tìm web), và Write (ghi ra file). Lưu ý dễ nhầm: Glob tìm FILE theo pattern, còn Grep tìm NỘI DUNG bên trong file.
Làm sao Claude Code làm được việc ngoài repo như điều khiển browser hay thao tác GitHub?
Bằng cách cắm thêm MCP server để mở rộng bộ tool. Ví dụ Playwright MCP Server cung cấp bộ tool cho Claude điều khiển browser (mở browser, navigate tới app, chụp screenshot, cập nhật styling) trong task cải thiện UI; GitHub MCP Server cung cấp bộ tool tương tác với GitHub (đọc thay đổi trong pull request, đánh giá chất lượng code, tạo comment, viết summary report) trong task review PR. Cùng một Claude Code, chỉ khác nhau ở bộ tool được trao.
Vì sao Claude Code có thể soi luồng dữ liệu xuyên nhiều dịch vụ cloud?
Vì Claude Code đọc trực tiếp cả code lẫn infrastructure-as-code. Trong ví dụ DynamoDB → Lambda → S3 bucket dùng chung (được cả Internal Marketing Team và External Marketing Partner truy cập), hạ tầng được định nghĩa trong các file Terraform mà Claude Code đọc dễ dàng. Nhờ đó Claude lần theo được luồng dữ liệu xuyên nhiều tầng và chỉ ra rủi ro như partner ngoài đang chạm tới dữ liệu không nên chạm — thứ mà công cụ chỉ đọc một file đơn lẻ khó phát hiện.

Đề thi thử (25 câu)

Đề thi thử tự biên soạn, bám sát đề thi chứng chỉ thật — trích 20 câu đầu dưới đây. Bản tương tác — chấm điểm, đáp án & giải thích từng câu — nằm ở tab “Đề thi thử” trên trang.

  1. How Coding Assistants Work How is a coding assistant best described?

    • A. A simple text editor with syntax highlighting
    • B. A sophisticated system that uses language models to tackle complex programming tasks, not just a tool that writes code
    • C. A compiler that turns prompts directly into machine code
    • D. A database of pre-written code snippets
  2. How Coding Assistants Work When solving a task like fixing a bug, what three-step process does a coding assistant follow, similar to a human developer?

    • A. Compile, run, debug
    • B. Gather context, formulate a plan, take an action
    • C. Read, summarize, reply
    • D. Index, search, deploy
  3. How Coding Assistants Work Which steps of the coding assistant's process specifically require interacting with the outside world?

    • A. Only the 'formulate a plan' step
    • B. The 'gather context' and 'take an action' steps — e.g. reading files, fetching docs, running commands, editing code
    • C. None of the steps; everything happens inside the language model
    • D. Only the final answer step
  4. How Coding Assistants Work Inside the 'Assistant', which two components work together?

    • A. A database and a web server
    • B. A language model and a set of tools
    • C. A compiler and a linter
    • D. A frontend and a backend
  5. How Coding Assistants Work Where are the Claude models used by Claude Code hosted?

    • A. Only on the user's local machine
    • B. At Anthropic, AWS, or Google Cloud (configurable)
    • C. Only on Anthropic's servers, with no other option
    • D. On a peer-to-peer network of user devices
  6. The Tool Use Challenge What is the fundamental limitation of a language model by itself?

    • A. It can only process images, not text
    • B. It can only process text and return text — it cannot actually read files or run commands
    • C. It can read files but cannot generate text
    • D. It can run commands but cannot understand natural language
  7. How Tool Use Works How does a coding assistant teach a language model to request an action?

    • A. By fine-tuning the model on the user's codebase before every request
    • B. By automatically adding instructions to the message, e.g. 'If you want to read a file, respond with ReadFile: name of file'
    • C. By giving the model direct network access to the file system
    • D. By compiling the request into a binary tool
  8. How Tool Use Works You ask: "What code is written in the main.go file?" What does the language model itself actually produce when it wants to read the file?

    • A. It directly opens and reads main.go from disk
    • B. It produces a formatted text response such as 'ReadFile: main.go', which the coding assistant then executes
    • C. It sends an email requesting the file
    • D. It compiles main.go and returns the binary
  9. How Tool Use Works In the tool use flow, what happens right after the language model responds with 'ReadFile: main.go'?

    • A. The model gives its final answer immediately with no file contents
    • B. The coding assistant reads the actual file and sends its contents back to the model
    • C. The session ends and waits for a new prompt
    • D. The model asks the user to paste the file manually
  10. Why Claude's Tool Use Matters According to the course, what is true about language models and tool use?

    • A. All language models use tools with exactly the same skill level
    • B. Not all language models are equally good at using tools; the Claude series is particularly strong at it
    • C. Only models running locally can use tools
    • D. Tool use makes all models perform identically
  11. Benefits of Strong Tool Use Which of the following is a security benefit of Claude Code's strong tool use?

    • A. It encrypts every file on your disk
    • B. It can navigate codebases without requiring indexing, which often means not sending your entire codebase to external servers
    • C. It blocks all network access permanently
    • D. It requires two-factor authentication for every tool call
  12. Benefits of Strong Tool Use What does it mean that Claude Code is an 'extensible platform'?

    • A. You can easily add new tools, and Claude will adapt to use them as your workflow evolves
    • B. It can only ever use a fixed, built-in set of tools
    • C. It automatically rewrites your entire codebase
    • D. It extends the context window to unlimited size
  13. Key Takeaways Which statement best captures the key takeaway about tool use?

    • A. Tool use replaces the need for a language model entirely
    • B. Tool-use capability transforms a simple text-generating model into a powerful coding assistant that can read files, understand the codebase, and make meaningful changes
    • C. Tool use only matters for writing documentation
    • D. Tool use slows the assistant down and should be avoided
  14. Tools with Claude Code What does the built-in Agent tool do in Claude Code?

    • A. Runs a shell command
    • B. Launches a subagent to handle a task
    • C. Reads a file
    • D. Searches the web
  15. Tools with Claude Code In Claude Code's built-in tools, what is the difference between Glob and Grep?

    • A. Glob searches the contents of a file; Grep finds files by pattern
    • B. Glob finds files based upon a pattern; Grep searches the contents of a file
    • C. Both find files by name; they are interchangeable
    • D. Glob lists directories; Grep edits files
  16. Tools with Claude Code Which built-in tool lets Claude Code make several edits at the same time?

    • A. Edit
    • B. MultiEdit
    • C. Write
    • D. NotebookEdit
  17. Tools with Claude Code What is the difference between the WebFetch and WebSearch tools?

    • A. WebFetch searches the web; WebSearch fetches from a URL
    • B. WebFetch fetches content from a specific URL; WebSearch searches the web
    • C. Both fetch from a fixed URL
    • D. WebFetch reads a local file; WebSearch reads a remote file
  18. Tools with Claude Code Which pair of built-in tools is used to manage a to-do list in Claude Code?

    • A. NotebookRead and NotebookEdit
    • B. Read and Write
    • C. TodoRead and TodoWrite
    • D. Glob and Grep
  19. Data analysis task In the streaming.csv data analysis example, what workflow does Claude Code follow?

    • A. It sends the entire CSV to an external server for analysis
    • B. It writes code in a notebook to examine the data format, runs it and examines results, adds cells executing each to guide its analysis, then writes a final summary
    • C. It only prints the first row and stops
    • D. It converts the CSV to a screenshot
  20. UI styling task In the UI styling task, what does the Playwright MCP Server provide to Claude Code?

    • A. A set of tools that allow Claude to control a browser (open browser, navigate, take a screenshot)
    • B. A faster language model for styling
    • C. A database of CSS templates
    • D. A tool to deploy the app to production

…và 5 câu nữa trong bản đề thi thử đầy đủ (25 câu) — mở tab “Đề thi thử” trên trang để làm toàn bộ, có chấm điểm & giải thích.