Nhập môn Tư duy Lập trình/Tổng quan module — từ đề bài tới thuật toán
16/31
Bài 16 / 31~6 phútTừ đề bài tới thuật toánMiễn phí lượt xem

Tổng quan module — từ đề bài tới thuật toán

Bạn đã đọc được code người khác viết. Module này lấp khoảng trống ngược lại: cầm một đề tiếng Việt và biết bắt đầu từ đâu.

TL;DR: Bạn đọc được code rồi, nhưng cầm một đề bài bằng tiếng Việt thì vẫn đứng hình — đó không phải lỗ hổng kiến thức, đó là thiếu một thứ tự thao tác. Module này đưa cho bạn thứ tự đó: bóc đề thành vào–xử lý–ra, giải tay ba ca cụ thể để quy luật tự lộ ra, ghi lời giải bằng lưu đồ bốn ký hiệu, phân rã tới mức mỗi bước gõ được ngay, đặt tên cho nhóm bước xứng đáng có tên, rồi soi năm ca biên trước khi chạy. Bảy bài, một quy trình, dùng lại được cho mọi đề — kể cả sau này khi bạn đã bỏ Python sang Java.

1. Bạn vừa có gì, và còn thiếu gì

Hết hai module trước, bạn có một cỗ máy đầy đủ trong đầu. Nó chạy đúng từng dòng, giữ giá trị trong những ô nhớ có tên, chọn được đường ở chỗ rẽ nhánh, và làm lại được một việc nhiều lần. Đưa cho bạn một đoạn code, bạn nói đúng nó in ra gì.

Nhưng chiều ngược lại thì chưa. Đưa cho bạn một câu tiếng Việt — "cho danh sách điểm của cả lớp, in ra điểm cao nhất" — và một màn hình trắng, bạn ngồi nhìn nó.

Đây là nút thắt nặng nhất của người mới học lập trình, và nó gần như luôn bị chẩn đoán nhầm. Người ta nghĩ mình thiếu cú pháp, thiếu hàm dựng sẵn, thiếu thư viện. Không phải. Thứ thiếu là một quy trình có thứ tự để đi từ đề tới lời giải, thứ mà người có nghề chạy tự động tới mức không còn nhận ra là mình đang chạy nó.

2. Một quy trình, không phải bảy mẹo

Bản đồ module: một quy trình sáu khâu nối dọc bằng mũi tên, đánh số từ 1 tới 6 gồm đọc đề bóc thành ba ô vào gì ra gì ràng buộc gì, làm tay giải ba ca cụ thể trước để quy luật tự lộ ra, ký pháp bốn ký hiệu lưu đồ và hai chỗ nó bất lực, phân rã chia tới khi mỗi bước gõ được ngay, đặt tên nhóm bước xứng đáng có tên thì thành hàm, soi ca biên rỗng một phần tử số 0 số âm trùng; cuối cùng đổ xuống ô nhấn màu xanh là bài 07 mini challenge chạy trọn sáu khâu trên đề chưa gặp

Sáu khâu, mỗi khâu một bài. Không khâu nào là mẹo riêng của một dạng đề: bạn chạy đúng thứ tự này cho bài tính điểm, cho bài đếm hoá đơn, và sau này cho bài phỏng vấn. Khâu nào bỏ qua thì khâu sau phải đoán mò — bỏ khâu bóc đề thì tới lúc phân rã bạn không biết mình đang chia cái gì.

3. Bảy bài trong module này

  • Bài 1: Đọc đề. Bạn bóc một đề văn xuôi thành ba ô, và ô "vào" ghi đủ cả kiểu lẫn ràng buộc chứ không chỉ tên dữ liệu.
  • Bài 2: Làm tay trước khi làm máy. Bạn giải ba ca cụ thể bằng giấy bút để quy luật tự lộ ra — kể cả cái ca cho ra kết quả không ai ngờ tới.
  • Bài 3: Lưu đồ có cấu trúc. Bạn đọc và vẽ được bằng bốn ký hiệu chuẩn, và biết trước hai chỗ lưu đồ bất lực để khỏi phí một buổi tối.
  • Bài 4: Phân rã. Bạn chia một lời giải xuống tới mức mỗi bước gõ thành lệnh được ngay — và có đúng một tiêu chí để biết khi nào được dừng chia.
  • Bài 5: Hàm. Bạn chọn ranh giới hàm cho một lời giải đã phân rã: tham số nào vào, giá trị nào ra, và vì sao nhóm bước đó xứng đáng có tên.
  • Bài 6: Ca biên. Bạn chỉ ra chỗ lời giải gãy với danh sách rỗng, một phần tử, số 0, số âm và giá trị trùng — trước khi chạy dòng nào.
  • Bài 7: Mini challenge. Một đề chưa gặp, không giảng gì thêm: bạn chạy trọn sáu khâu rồi mới mở lời giải mẫu ra đối chiếu.

Bài cuối — Tổng kết — gom cả bảy bài thành một trang để bạn tự chấm trước khi sang module cuối của khoá.

4. Học xong module này bạn làm được gì

  • Apply khung vào–xử lý–ra để bóc một đề văn xuôi thành ba ô, trong đó ô vào nêu đủ kiểu và ràng buộc của từng dữ liệu, ô ra nêu đúng một kết quả.
  • Apply quy trình giải tay ba ca cụ thể trước khi viết bước, rồi rút quy luật chung từ ba ca đó.
  • Explain bốn ký hiệu của lưu đồ có cấu trúc, và hai trường hợp lưu đồ bất lực.
  • Design lời giải cho một đề nhiều bước bằng lưu đồ, phân rã tới mức mỗi bước gõ được ngay.
  • Choose ranh giới hàm cho một lời giải đã phân rã sẵn — tham số nào vào, giá trị nào ra — theo tiêu chí nhóm bước đó có gọi tên được bằng một động từ hay không.
  • Predict chỗ lời giải gãy ở các ca biên: danh sách rỗng, một phần tử, số 0, số âm, giá trị trùng.

5. Cách học module này hiệu quả

  • Giấy bút không còn là tuỳ chọn nữa. Bài 2 và bài 7 chỉ có tác dụng nếu tay bạn thật sự viết ra ba ca — đọc lời giải rồi gật gù là bỏ đúng cái khâu module này tồn tại để dạy.
  • Mỗi ô "Thử đoán" giấu kết quả sau một nút bấm. Viết đáp án ra giấy trước rồi mới bấm.
  • Đọc đúng thứ tự 01 tới 07: bài 4 chia chính cái ô "xử lý" bạn dựng ở bài 1, bài 5 đóng khung chính nhóm bước bạn tách ở bài 4, và bài 6 soi vào lời giải cho chính cái đề bạn bóc ở bài 1.
  • Quy trình này không thuộc về Python. Bạn sẽ mang nguyên nó sang Java, và lúc đó không phải học lại một chữ nào.

Bắt đầu: Bài 1 — Đọc đề.

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

Đọc đề — vào cái gì, ra cái gì, ràng buộc gì