Học Cơ sở lập trình: bắt đầu từ một bài toán thật
Cơ sở lập trình với Python: học từ thuật toán, biến, vòng lặp tới hàm, đệ quy và cách đọc lỗi. Kèm đề cương song ngữ 323 trang cho sinh viên năm nhất.
Học Cơ sở lập trình: bắt đầu từ một bài toán thật
Buổi đầu tiên mình dạy kèm cho một bạn năm nhất Công nghệ thông tin, mình mở IDE ra và bạn ấy hỏi ngay: "Học cái này để làm gì anh?". Mình không trả lời. Mình bảo bạn mở một file rỗng rồi viết một chương trình nhỏ: nhập vào số tiền bạn có đầu tháng, nhập danh sách các khoản chi, in ra số còn lại. Bạn loay hoay hai tiếng đồng hồ. Nhưng đến lúc màn hình in ra dòng cuối cùng, bạn ấy hiểu ngay vì sao phải học biến, vì sao phải học vòng lặp.
Cơ sở lập trình không khó. Nó chỉ bị dạy sai thứ tự. Người ta bắt sinh viên học cú pháp trước, rồi mới cho làm bài tập. Trong khi cách hiệu quả là ngược lại: có một bài toán cụ thể, giải nó, rồi mổ xẻ xem mình vừa dùng những gì.
Vì sao môn này hay bị "rớt" oan
Ba tuần đầu của môn Cơ sở lập trình thường trôi qua với bảng biến, kiểu dữ liệu và toán tử. Sinh viên chép được code mẫu, chạy được, ghi chú đầy đủ. Đến tuần thứ tư, khi đề bài yêu cầu "viết chương trình tính điểm trung bình cho danh sách sinh viên", cả lớp đứng hình.
Vấn đề không nằm ở cú pháp. Vấn đề là các bạn chưa bao giờ tự tay chia một bài toán lớn thành các bước nhỏ. Đó là kỹ năng thuật toán, và nó khác hoàn toàn với kỹ năng gõ code.
Có một kiểu rớt khác cũng phổ biến không kém. Sinh viên hiểu lý thuyết, làm được bài trên lớp, nhưng thi thực hành thì tạch. Lý do: thi không có Google, không có bạn bên cạnh, và không có đáp án để so. Các bạn mất bình tĩnh ngay khi chương trình báo lỗi đỏ lòm.
Điểm chung của cả hai kiểu rớt: thiếu một quy trình. Không phải thiếu kiến thức.
Trình tự học mình thấy hiệu quả
Tuần một: đọc hiểu một chương trình trước khi viết
Cho sinh viên một đoạn code 20 dòng đã chạy đúng, yêu cầu các bạn đọc và nói xem chương trình làm gì. Không sửa. Không chạy thử.
Nghe có vẻ dở hơi, nhưng bài tập này luyện đúng thứ sinh viên thiếu: kỹ năng đọc code. Sau này đi làm, thời gian đọc code người khác nhiều gấp ba lần thời gian viết code mới.
Tuần hai: viết thuật toán bằng tiếng Việt trước
Trước khi mở máy, viết các bước giải ra giấy bằng tiếng Việt. Ví dụ, tính điểm trung bình:
- Nhập số lượng sinh viên
- Với mỗi sinh viên, nhập điểm
- Cộng dồn điểm vào biến tổng
- Chia tổng cho số lượng
- In kết quả
Sáu dòng. Nếu viết được sáu dòng này, việc dịch sang Python chỉ còn là câu chuyện cú pháp. Nếu không viết được, làm sao gõ code cho đúng?
Tuần ba trở đi: dùng cấu trúc dữ liệu vào đúng chỗ cần
Đây là giai đoạn sinh viên bắt đầu thấy môn này "có lý". Danh sách để lưu điểm từng người. Từ điển để đếm số lần xuất hiện của một từ. Tệp để đọc dữ liệu điểm từ file CSV mà giảng viên đưa.
Một ví dụ cụ thể, tính từ đầu
Đây là bài mình hay giao nhất, dạng "quản lý chi tiêu" — vì nó chứa đủ các khái niệm cốt lõi.
Bạn có một danh sách chi tiêu trong tuần, mỗi khoản gồm tên món và số tiền. Yêu cầu: in ra tổng chi, món đắt nhất, và cảnh báo nếu tổng vượt 500.000 đồng.
chi_tieu = [
("cafe", 25000),
("com trua", 45000),
("gui xe", 10000),
("sach", 180000),
("xang", 60000),
]
tong = 0
for ten, tien in chi_tieu:
tong = tong + tien
mon_dat_nhat = ("", 0)
for ten, tien in chi_tieu:
if tien > mon_dat_nhat[1]:
mon_dat_nhat = (ten, tien)
print("Tong chi:", tong)
print("Mon dat nhat:", mon_dat_nhat[0], "-", mon_dat_nhat[1])
if tong > 500000:
print("Canh bao: vuot 500.000 dong")
Chạy đoạn này ra tổng 320.000 đồng, không có cảnh báo. Thử sửa số tiền cuốn sách lên 400.000, chương trình báo cảnh báo ngay.
Điều mình muốn sinh viên nhận ra ở đây: chỉ một vòng lặp, nhưng phải chạy hai lần cho hai mục đích khác nhau. Nhiều bạn cố nhồi cả hai việc vào một vòng lặp và bối rối không hiểu biến nào giữ cái gì. Việc tách ra rõ ràng dễ đọc hơn, chạy chậm hơn một chút nhưng chẳng ai quan tâm chuyện đó.
Chỗ sinh viên hay mắc, và cách sửa
| Lỗi | Biểu hiện | Cách sửa |
|---|---|---|
| Sai lệch một đơn vị | Vòng lặp chạy thừa/thiếu một lần | Kiểm tra điều kiện dừng bằng tay với n nhỏ |
| Quên chuyển kiểu | Nhập số nhưng bị cộng như chuỗi | Nhớ int() hoặc float() cho dữ liệu input() |
| Biến chưa khởi tạo | Báo lỗi tên chưa định nghĩa | Khởi tạo biến cộng dồn là 0 trước vòng lặp |
| Không thoát đệ quy | Chương trình chạy mãi rồi treo | Luôn có trường hợp dừng rõ ràng |
| Bỏ qua thông báo lỗi | Sửa mò cho hết đỏ | Đọc dòng cuối của traceback trước tiên |
Cái lỗi cuối cùng là lỗi tốn thời gian nhất. Sinh viên thấy chữ đỏ thì hoảng, bôi đen xoá hết rồi gõ lại. Trong khi Python đã chỉ đúng số dòng và loại lỗi. Đọc hiểu thông báo lỗi là một kỹ năng, và nó học được.
Đọc traceback: kỹ năng ít ai dạy
Giả sử bạn chạy chương trình và thấy dòng này:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Thông tin có trong đó, đủ để bạn tự sửa: đang cộng một số nguyên với một chuỗi. Nghĩa là có chỗ nào đó dữ liệu từ input() chưa được chuyển thành số.
Mình thường bắt sinh viên ghi lại lỗi vào một cuốn sổ, mỗi lỗi một dòng kèm cách sửa. Sau một học kỳ, cuốn sổ đó là tài sản riêng của các bạn. Lỗi lặp lại chỉ còn ba bốn loại.
Hàm không phải để cho oai
Nhiều sinh viên viết được hàm nhưng không hiểu tại sao phải viết hàm. Các bạn nhét toàn bộ chương trình vào main và thấy nó vẫn chạy.
Thử thế này. Viết một chương trình tính tiền điện theo bậc thang, dùng ba lần ở ba chỗ khác nhau. Nếu không có hàm, mỗi lần dùng phải copy nguyên đoạn code. Sửa công thức một chỗ, quên hai chỗ còn lại. Đó là lúc hàm bắt đầu có nghĩa.
Hàm giúp bạn đặt tên cho một ý. tinh_tien_dien đọc lên hiểu ngay, không cần đọc bên trong làm gì.
Lộ trình ôn tập gọn trong mười ngày
Nếu bạn đang gần kỳ thi và chỉ còn hơn một tuần, đây là thứ tự mình khuyên:
Ngày một và hai, ôn lại kiểu dữ liệu và toán tử. Làm lại toàn bộ bài tập nhỏ về biến. Ngày ba, cấu trúc rẽ nhánh và lặp, đây là hai thứ chiếm nhiều điểm thi nhất. Ngày bốn, mảng và danh sách. Ngày năm, hàm và tầm vực biến. Ngày sáu, xử lý chuỗi và tệp. Ngày bảy, đệ quy. Ngày tám, xử lý lỗi và gỡ lỗi. Ngày chín, làm một đề thi mẫu bấm giờ. Ngày mười, dò lại những chỗ sai trong đề mẫu đó.
Đừng học thêm kiến thức mới trong hai ngày cuối. Bổ sung lỗ hổng tốt hơn là nhồi thêm.
Những chỗ mình thấy tài liệu trên mạng thường thiếu
Tài liệu tiếng Việt trên mạng dạy Python rất nhiều, nhưng đa số dừng ở mức cú pháp. Bạn tìm "vòng lặp while python" ra vài trăm kết quả, đọc xong biết cách viết while nhưng không biết khi nào nên dùng nó thay cho for.
Thứ hai, tài liệu hiếm khi dạy cách đọc thông báo lỗi. Trong khi đây là kỹ năng dùng hằng ngày.
Thứ ba, rất ít tài liệu cho bài tập có lời giải chi tiết theo từng bước. Sinh viên có đáp án đúng nhưng không biết mình sai ở đâu trong quá trình suy nghĩ.
Về đề cương mình đang dùng
Cuốn đề cương mình đang dùng cho môn này có 323 trang, song ngữ Việt - Anh, viết theo Python. Điểm mình thích nhất: toàn bộ nội dung xoay quanh một ứng dụng quản lý tài chính cá nhân, được xây dần qua từng chương. Hết chương ba bạn có một đoạn nhập liệu. Hết chương bảy bạn có một chương trình con hoàn chỉnh. Đến cuối sách thì có một ứng dụng chạy được.
Danh sách chương trải từ thuật toán và môi trường lập trình, biến và kiểu dữ liệu, rẽ nhánh, vòng lặp, hàm và tầm vực, đệ quy, mảng và danh sách, kiểu dữ liệu có cấu trúc, tệp, đến xử lý lỗi và gỡ lỗi. Mỗi chương có bài tập kèm lời giải, câu hỏi tự luận có dàn ý và trắc nghiệm có đáp án.
Nói thẳng điểm chưa tốt: tài liệu này dạy Python, không dạy theo giáo trình của một trường cụ thể nào. Nếu trường bạn dạy C hay Java cho môn Cơ sở lập trình, cuốn này vẫn dùng được phần tư duy thuật toán, nhưng cú pháp sẽ khác và bạn phải tự chuyển. Phần đệ quy cũng khá nặng với người mới, mình khuyên đọc chậm ở chương đó.
Vài câu hỏi mình nhận được nhiều nhất
Học Python có cần máy cấu hình cao không? Không. Một chiếc laptop cũ chạy được trình soạn thảo và dòng lệnh là đủ. Mình từng dạy bằng máy tám năm tuổi.
Không giỏi toán có học được không? Được. Cơ sở lập trình cần tư duy logic, không cần giải tích. Trừ vài bài về độ phức tạp, phần còn lại chỉ cần cộng trừ nhân chia.
Nên chọn IDE nào? Bắt đầu bằng trình soạn thảo đơn giản cho quen, sau đó chuyển sang IDE có gợi ý code. Đừng loay hoay chọn công cụ thay vì làm bài.
Học thuộc code có ích không? Không. Hiểu nguyên tắc rồi tra cứu cú pháp. Không ai nhớ hết cú pháp, kể cả người đi làm lâu năm.
Trước khi bạn mua tài liệu
Tài liệu không thay được việc bạn ngồi gõ. Mình nói trước cho khỏi kỳ vọng sai: mua sách về rồi đọc là không đủ, bạn phải gõ lại từng ví dụ, sửa từng lỗi. Cuốn đề cương này rút ngắn thời gian mò mẫm chứ không thay bạn suy nghĩ.
Nếu bạn chỉ cần cú pháp Python, tài liệu miễn phí trên mạng đủ dùng. Nhưng nếu bạn cần một lộ trình đi từ bài toán đến chương trình hoàn chỉnh, có bài tập và lời giải, thì tài liệu có cấu trúc sẽ tiết kiệm cho bạn nhiều tuần thử sai.
Xem thử trước khi quyết: đề cương có 5 trang xem trước để bạn xem bố cục và cách trình bày. Thanh toán bằng chuyển khoản trong nước, và nhận hàng trong 24h qua email sau khi xác nhận.
Đề cương ôn tập Cơ sở lập trình, 323 trang, song ngữ Việt - Anh, giá 189.000đ: https://globalmarket.vin/product/de-cuong-co-so-lap-trinh