Skip to content

Đọc & chạy code (Code Reading) ​

Code Reading là loại hoạt động đặc biệt: giảng viên cung cấp đoạn code hoàn chỉnh để bạn đọc, hiểu, và chạy thử — không yêu cầu bạn viết. Mục đích là học qua ví dụ thực tế.

Code chạy trong cùng sandbox với các activity lập trình khác — xem Thực thi Code để biết các giới hạn (5s, 128 MB, không có mạng) áp dụng ở đây.

Khi nào dùng? ​

  • Học cú pháp / pattern lập trình mới qua ví dụ minh họa
  • Hiểu thuật toán phức tạp bằng cách trace qua code
  • Đọc code mẫu trước khi vào bài tập tự viết
  • Học best practices, code style của ngôn ngữ

Giao diện ​

  • Vùng giải thích — mô tả đoạn code làm gì, ý đồ thiết kế (rich text, có thể kèm sơ đồ)
  • Code panel — code do giảng viên upload (read-only hoặc cho phép sửa nhẹ)
  • Output / Result — kết quả khi nhấn Run
  • Input panel (nếu có) — bạn gõ stdin để code đọc

Multi-file ​

Code Reading thường gặp ở dạng multi-file project vì code thực tế hiếm khi nằm trong 1 file:

  • Tab tên file ở phía trên code panel — click để chuyển.
  • File đầu tiên (hoặc file được đánh dấu) là entry point — đó là file được chạy khi nhấn Run.
  • Các file còn lại được mount vào cùng thư mục, code có thể import / require lẫn nhau.

Đọc theo thứ tự: entry point trước, rồi đi vào từng module được import. Cách này giúp bạn nắm được flow chung trước khi sa vào chi tiết.

Quy trình học ​

1. Đọc code ​

Đầu tiên, đọc qua code không chạy:

  • Hiểu mỗi function làm gì (đọc tên, param, return)
  • Trace qua flow chính (main → function chính → các bước)
  • Đọc comment giảng viên thêm vào (nếu có)

2. Chạy code ​

Nhấn Run → xem output. Đối chiếu với hiểu của bạn:

  • Output đúng như bạn dự đoán?
  • Có gì bất ngờ không?

3. Sửa và thử ​

Có hai chế độ tùy giảng viên cấu hình:

Chế độHành vi
Locked (read-only)Editor không cho gõ. Bạn chỉ có thể đọc + nhấn Run. Phù hợp khi giảng viên muốn bạn tập trung phân tích, không "vô tư sửa".
EditableBạn được sửa trực tiếp. Có nút Reset để khôi phục code gốc.

Khi ở chế độ editable, các thử nghiệm hữu ích:

  • Đổi giá trị input → xem output thay đổi
  • Comment một dòng → quan sát hậu quả
  • Thêm print() / console.log() để debug bước trung gian
  • Đổi thuật toán (vd: bubble sort → quick sort) → so sánh tốc độ

TIP

Đây là cách học sâu nhất — không chỉ đọc mà chủ động thử nghiệm với code. Mỗi câu hỏi "nếu tôi đổi cái này thì sao?" → thử ngay.

Chạy với input tùy chỉnh ​

Nếu code có input() / Scanner, hệ thống thường có ô Input để bạn nhập stdin. Đổi input rồi chạy lại để xem code phản ứng thế nào với:

  • Input biên (0, n=1, n=max)
  • Input rỗng / chỉ khoảng trắng
  • Input có nhiều dòng / phân tách bằng dấu lạ

Đây là cách rèn cảm nhận về edge cases trước khi vào Code Practicing có chấm.

4. Đánh dấu hoàn thành ​

Khi cảm thấy đã hiểu, nhấn Hoàn thành. Một số Code Reading có câu hỏi trắc nghiệm cuối (kiểm tra hiểu) trước khi cho phép hoàn thành.

Sự khác biệt với Code Practicing ​

Code ReadingCode Practicing
Nội dungCode hoàn chỉnh từ giảng viênKhung trống cần điền
Bạn làm gìĐọc, chạy, hiểuViết code
ChấmKhông (hoặc qua câu hỏi trắc nghiệm)Auto chấm bằng test cases
Mục đíchHọc qua ví dụĐánh giá kỹ năng viết code

Code Reading như "công cụ ghi chú học tập" ​

Khi đọc code phức tạp, bạn nên:

  1. Vẽ sơ đồ flow ra giấy hoặc tool ngoài (Excalidraw, Whimsical).
  2. Trace bằng tay với input cụ thể — viết giá trị biến qua từng dòng.
  3. Highlight đoạn lạ trong code panel (nếu có chức năng note).
  4. Hỏi AI (nếu có AI helper) — "giải thích cho tôi function quicksort ở dòng 25 là gì?".

Mẹo đọc code hiệu quả ​

  1. Top-down trước — đọc tên function, hàm main, hiểu cấu trúc tổng thể trước khi đi vào chi tiết.
  2. Đặt giả thuyết — kiểm chứng: "Tôi nghĩ dòng này làm X" → chạy + thêm print → xác nhận.
  3. Tìm pattern quen thuộc — recursion? Two-pointer? DP? Pattern thường gặp giúp hiểu code mới nhanh hơn.
  4. Đừng skip phần lạ — chính những đoạn bạn không hiểu mới đáng học.
  5. Ghi chú "aha moment" — khi bạn vừa hiểu một điều, viết ngay vào notes. Quay lại đọc 3 ngày sau bạn sẽ nhớ.

Patterns đọc code ​

Tùy đoạn code, áp dụng pattern phù hợp:

Top-down (cấu trúc tổng thể) ​

Bắt đầu từ main() / entry point → xem nó gọi function nào → đi sâu từng function. Phù hợp với code có flow tuyến tính (script, pipeline xử lý dữ liệu).

Function trace (từng hàm một) ​

Liệt kê tất cả function → đọc tên + params + return → hiểu mỗi hàm làm gì độc lập, rồi mới ghép lại. Phù hợp với code OOP hoặc code có nhiều helper.

Data flow (theo luồng dữ liệu) ​

Chọn một biến quan trọng (vd: cart_items) → trace nó được tạo ở đâu → đi qua function nào → bị biến đổi thế nào → kết thúc ở đâu. Phù hợp với code xử lý dữ liệu phức tạp (ETL, transform).

Control flow (theo điều kiện rẽ nhánh) ​

Bắt đầu từ entry → vẽ các nhánh if/else, try/except, switch → mỗi nhánh dẫn tới đâu. Phù hợp với code business logic / state machine.

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

Code không cho tôi sửa — sao thử nghiệm được? Một số Code Reading lock toàn bộ. Trong trường hợp đó:

  • Copy code ra Code Interactive activity khác (nếu khóa có)
  • Hoặc copy ra IDE local của bạn để chạy

Tôi đọc nhưng vẫn không hiểu — học sao?

  • Hỏi AI helper (nếu có) hoặc dùng Code Inspection để AI dẫn dắt phân tích.
  • Đặt câu hỏi cụ thể cho giảng viên trong khu vực bình luận.
  • Bookmark đoạn code khó hiểu (bôi đen → Bookmark + ghi chú "Cần học thêm X") để quay lại sau khi đã có nền tảng.

Có thể download code về máy? Tùy. Nếu giảng viên bật, có nút Download — file .py / .js / v.v. Nếu không bật, copy-paste qua editor cá nhân.

Tôi sửa code rồi reload trang — code có lưu không? Tùy chế độ:

  • Locked: không lưu vì bạn không thật sự "sửa"; reload sẽ thấy code gốc.
  • Editable: code chỉnh sửa được auto-save như Code Interactive — reload vẫn còn.

Output không khớp với phần giải thích trong bài? Có thể giảng viên đã cập nhật giải thích nhưng code chưa, hoặc ngược lại. Báo cho giảng viên qua bình luận — nội dung tài liệu cần đồng bộ với code.

LMS Documentation