Tổng quan về giáo trình
Giáo trình Algorithmique et Programmation pour Non‐Matheux (Thuật toán và Lập trình dành cho người không chuyên toán) được biên soạn năm 2008 bởi tác giả Christophe Darmangeat, giảng viên tại Đại học Paris 7 (Université Paris 7 - Denis Diderot, Cộng hòa Pháp), được công bố phục vụ giảng dạy thông qua hệ thống học liệu số tại địa chỉ http://www.info/algo/index.htm. Trong chương trình đào tạo đại học, tài liệu này đóng vai trò là giáo trình nhập môn thuộc khối kiến thức cơ sở ngành công nghệ thông tin và khoa học máy tính, được thiết kế đặc thù cho người học không có nền tảng chuyên sâu về toán học lý thuyết.
Mục tiêu học tập trọng tâm của giáo trình bao gồm:
- Trang bị bản chất của việc biểu diễn thông tin và mã hóa dữ liệu trong máy tính (hệ nhị phân, hệ thập lục phân, bảng mã ký tự ASCII).
- Xây dựng tư duy giải thuật thông qua việc làm chủ bốn khối cấu trúc lệnh nguyên tử: phép gán biến (affectation), nhập/xuất dữ liệu (lecture/écriture), cấu trúc điều kiện rẽ nhánh (tests) và cấu trúc lặp (boucles).
- Hình thành kỹ năng thiết kế, kiểm thử và tối ưu thuật toán bằng mã giả (pseudo-code) độc lập với các ngôn ngữ lập trình cụ thể (như C, Visual Basic hay Hợp ngữ - Assembler).
- Làm chủ các cấu trúc dữ liệu từ cơ bản đến nâng cao (biến đơn, mảng một chiều, mảng hai chiều, bản ghi) và các giải thuật kinh điển (tìm kiếm nhị phân, sắp xếp nổi bọt, sắp xếp chọn, kỹ thuật đệ quy).
Giáo trình tiếp cận người học theo phương pháp quy nạp sư phạm: tách rời hoàn toàn tư duy logic của thuật toán khỏi các rào cản cú pháp ngôn ngữ lập trình. Điểm đặc sắc về mặt trình bày là cấu trúc học phần hoàn chỉnh (cours complet), trong đó mỗi chương lý thuyết đều tích hợp trực tiếp hệ thống bài tập thực hành kèm phần lời giải chi tiết (corrigés), đồng thời đan xen các trích dẫn triết học và văn hóa (như nhận định của Frank Zappa, Joseph Campbell, Dave Small, Pierre Dac, phim điện ảnh 2001: A Space Odyssey, hoạt hình Les Shadoks) nhằm cụ thể hóa các khái niệm trừu tượng.
Nội dung kiến thức cốt lõi
Các chương và chủ đề chính
Giáo trình được cấu trúc thành phần Tiền đề (Préambule), phần Dẫn nhập (Introduction à l'algorithmique) và 12 phần kiến thức chuyên đề phát triển theo trật tự logic từ mức độ phần cứng đến các cấu trúc trừu tượng bậc cao:
[Phần 1: Biến & Kiểu dữ liệu]
[Phần 2: Nhập/Xuất dữ liệu (I/O)]
[Phần 3 & 4: Cấu trúc Rẽ nhánh & Logic]
[Phần 5: Cấu trúc Vòng lặp]
[Phần 6 & 8: Mảng 1 chiều & 2 chiều]
[Phần 7: Giải thuật Sắp xếp & Tìm kiếm]
[Phần 9 & 11: Hàm, Thủ tục & Tách mô-đun]
[Phần 10: Dữ liệu có cấu trúc & Tệp tin]
[Phần 12: Biên dịch, Thông dịch & Đệ quy]
-
Préambule : Le Codage (Tiền đề: Mã hóa - trang 8 đến 17):
- Bản chất nhị phân của phần cứng: trạng thái tích điện của RAM, phân cực từ tính của ổ đĩa, vết cắt vật lý trên đĩa CD-ROM.
- Hệ thống đếm theo vị trí (numérotation de position) trên hệ thập phân (cơ số 10 với các lũy thừa $10^0, 10^1, 10^2...$) và hệ nhị phân (cơ số 2 với đơn vị bit, byte/octet gồm 8 bit tương ứng $2^8 = 256$ trạng thái từ 0 đến 255).
- Hệ thập lục phân (cơ số 16, sử dụng các ký tự 0–9 và A–F) để biểu diễn rút gọn các nhóm 4 bit của một byte dữ liệu.
- Chuẩn mã hóa văn bản ký tự quốc tế ASCII.
-
Introduction à l'algorithmique (Dẫn nhập Thuật toán - trang 18 đến 22):
- Định nghĩa thuật toán: dãy chỉ thị tuần tự, có thể thực thi để giải quyết một bài toán xác định (so sánh với công thức nấu ăn, bản hướng dẫn sử dụng thiết bị).
- Rèn luyện trực giác và tính chuẩn xác bằng phương pháp kiểm thử thủ công (trace) bằng giấy bút.
- Bốn họ chỉ thị cơ bản trong máy tính (gán biến, nhập/xuất, rẽ nhánh, vòng lặp).
- Quy ước mã giả (pseudo-code), loại bỏ sơ đồ khối truyền thống (organigrammes) nhằm hạn chế lập trình không cấu trúc.
-
Partie 1 : Les Variables (Biến số - trang 23 đến 43):
- Khái niệm biến: mô hình ô nhớ dạng "hộp và nhãn" (boîte et étiquette) thay thế cho địa chỉ nhị phân vật lý trong bộ nhớ RAM.
- Khai báo biến và quản lý bộ nhớ: các kiểu dữ liệu số (
Byte: $0 \dots 255$, Entier simple: $-32,768 \dots 32,767$, Entier long, Réel simple, Réel double), kiểu chuỗi ký tự (Caractère / String đặt trong cặp dấu ngoặc kép ""), kiểu luận lý (Booléen nhận giá trị VRAI/FAUX).
- Cú pháp lệnh gán (
←): vế trái bắt buộc là tên biến duy nhất, vế phải là biểu thức (expression) có kiểu dữ liệu tương thích; toán tử số học (+, -, *, /, ^), toán tử nối chuỗi (&). Phân biệt bản chất phép gán biến trong tin học ($A \leftarrow A + 1$) với phương trình toán học ($A = A + 1$).
-
Partie 2 & 3 : Lecture/Ecriture et Les Tests (Nhập xuất và Cấu trúc điều kiện - trang 44 đến 67):
- Cơ chế I/O từ góc nhìn của máy tính:
Lire (tiếp nhận dữ liệu từ người dùng qua bàn phím), Ecrire (xuất thông tin/chuỗi ký tự ra màn hình).
- Cấu trúc rẽ nhánh cơ bản và mở rộng:
Si [booléen] Alors [lệnh] Finsi và Si [booléen] Alors [lệnh 1] Sinon [lệnh 2] Finsi.
- Biểu thức điều kiện phức hợp sử dụng toán tử logic
Et, Ou, Non, cấu trúc điều kiện lồng nhau (tests imbriqués) và kỹ thuật phân nhánh nhiều trường hợp (gare de tri).
-
Partie 5 & 6 : Les Boucles et Tableaux (Vòng lặp và Mảng dữ liệu - trang 89 đến 128):
- Vòng lặp kiểm tra điều kiện và vòng lặp đếm xác định bước nhảy.
- Cấu trúc mảng một chiều: chỉ số mảng, lưu trữ tập hợp dữ liệu đồng nhất, khai báo và thao tác trên mảng động (tableaux dynamiques).
-
Partie 7 & 8 : Tri, Recherche et Tableaux à 2 dimensions (Sắp xếp, Tìm kiếm và Mảng hai chiều - trang 129 đến 159):
- Giải thuật sắp xếp chọn (tri par sélection), sắp xếp nổi bọt (tri à bulles).
- Kỹ thuật sử dụng cờ hiệu (flag) và giải thuật tìm kiếm nhị phân (recherche dichotomique).
- Ma trận và mảng nhiều chiều (tableaux à 2 dimensions).
-
Partie 9, 10, 11 & 12 : Fonctions, Fichiers et Notions Avancées (Hàm, Tệp tin và Chủ đề nâng cao - trang 160 đến 248):
- Hàm xử lý chuỗi, hàm số học, hàm chuyển đổi kiểu dữ liệu.
- Bản ghi (enregistrements), cấu trúc dữ liệu phức hợp, tổ chức tệp tin (fichiers) và chiến lược xử lý dữ liệu lưu trữ.
- Phân tích chức năng (analyse fonctionnelle), tham số hàm/thủ tục, phạm vi biến cục bộ và biến công khai (variables publiques et privées).
- Cơ chế thông dịch (interprétation), biên dịch (compilation) và lập trình đệ quy (programmation récursive).
Kiến thức nền tảng được xây dựng
Giáo trình thiết lập hệ thống lý thuyết cốt lõi qua ba trục chính:
- Lý thuyết trừu tượng hóa phần cứng (Hardware Abstraction): Giải thích cách máy tính chuyển đổi các xung điện vật lý thành bit nhị phân, ghép 8 bit thành byte để mã hóa 256 giá trị số nguyên hoặc ký tự theo bảng mã ASCII, từ đó hình thành khái niệm biến nhớ và con trỏ ô nhớ.
- Nguyên lý cấu trúc hóa thuật toán (Structured Programming Principles): Khẳng định mọi thuật toán phức tạp đều quy nạp về sự phối hợp tuần tự của 4 cấu trúc điều khiển cơ bản (gán giá trị, nhập/xuất dữ liệu, kiểm tra điều kiện logic và lặp lại chỉ thị).
- Nguyên lý tiết kiệm tài nguyên (Resource Economy): Rèn luyện thói quen lựa chọn đúng kiểu dữ liệu phù hợp với miền giá trị thực tế (ví dụ: dùng kiểu
Byte hoặc Entier simple thay vì lạm dụng Réel double) để tránh lãng phí dung lượng bộ nhớ và tối ưu tốc độ xử lý của máy tính.
Kỹ năng phát triển
- Kỹ năng phân tích logic: Khả năng bóc tách bài toán đời sống thành các bước tính toán tuần tự mà máy tính có thể xử lý được.
- Kỹ năng kiểm thử tĩnh (Dry-run / Step-by-step Trace): Kỹ năng phân tích từng dòng lệnh trên bảng theo dõi trạng thái biến (như các bài tập kiểm tra biến $A, B, C$ sau mỗi bước gán) trước khi triển khai thành mã nguồn.
- Kỹ năng tái cấu trúc và tối ưu giải thuật: Kỹ năng lựa chọn cấu trúc dữ liệu (mảng, bản ghi, chuỗi) và giải thuật tương ứng (sắp xếp chọn, nổi bọt, tìm kiếm nhị phân) để xử lý tập dữ liệu lớn.
Phương pháp giảng dạy và học tập
Giáo trình triển khai phương pháp tiếp cận sư phạm trực quan, dựa trên các phép tương phản và tương tự hóa thực tiễn:
- Khái niệm thuật toán được dẫn dắt thông qua các tình huống thực tế như chỉ đường cho khách du lịch, thực hiện công thức nấu ăn, cấu trúc mã di truyền ADN xây dựng từ 4 loại nucleotide, hay ngôn ngữ của nhân vật hoạt hình Shadok chỉ có 4 từ ("Ga", "Bu", "Zo", "Meu").
- Phân định rõ góc nhìn tương tác giữa con người và máy móc để giải thích thuật ngữ: Lệnh
Lire (Đọc) là hành vi tiếp nhận dữ liệu từ góc nhìn của máy tính (tương ứng hành vi người dùng gõ phím), lệnh Ecrire (Ghi) là hành vi xuất dữ liệu của máy tính lên màn hình (để người dùng đọc).
Hệ thống bài tập thực hành được bố trí ngay sau từng nội dung lý thuyết với cấu trúc phân cấp:
- Bài tập phân tích cơ chế: Điển hình như các bài tập từ 1.1 đến 1.5, yêu cầu người học xác định giá trị biến số $A, B, C$ qua từng câu lệnh gán liên tiếp nhằm làm rõ hiện tượng ghi đè dữ liệu.
- Bài tập giải thuật kinh điển: Bài tập 1.6 và 1.7 yêu cầu xây dựng thuật toán hoán đổi giá trị giữa hai biến ($A$ và $B$) hoặc ba biến ($A, B, C$) thông qua việc sử dụng biến tạm trung gian ($C$ hoặc $D$).
- Bài tập xử lý tính toán thực tế: Bài tập 2.3 tính toán tổng chi phí hàng hóa sau thuế dựa trên giá chưa thuế ($pht$), số lượng ($nb$) và thuế suất VAT ($ttva$) theo biểu thức:
$$pttc \leftarrow nb \times pht \times (1 + ttva)$$
- Bài tập thao tác xâu chuỗi: Bài tập 2.4 yêu cầu ghép nối và đảo trật tự 4 biến ký tự chứa các đoạn của câu văn cổ điển ("belle Marquise", "vos beaux yeux", "me font mourir", "d'amour") bằng toán tử
&.
Toàn bộ bài tập đều có đáp án giải chi tiết (Corrigés) đi kèm giải thích kỹ thuật. Quy trình tự học được khuyến nghị gồm hai bước: người học dùng giấy bút đóng vai trò là bộ vi xử lý để chạy từng bước thuật toán (trace), ghi nhận giá trị biến vào bảng, sau đó đối chiếu kết quả với phần lời giải của giáo trình.
Điểm nổi bật và cập nhật
- Tách rời logic và cú pháp ngôn ngữ: Giáo trình không bắt đầu ngay bằng cú pháp của các ngôn ngữ cụ thể như C, Java hay Visual Basic. Thay vào đó, tài liệu chuẩn hóa hệ thống mã giả (pseudo-code) sử dụng các từ khóa tường minh (
Début, Fin, Variables, Lire, Ecrire, Si...Alors...Sinon...Finsi), giúp người học nắm vững cấu trúc tư duy trước khi xử lý các lỗi cú pháp biên dịch.
- Loại bỏ sơ đồ khối truyền thống: Tài liệu chỉ ra hạn chế của dạng biểu diễn đồ họa bằng sơ đồ khối (organigrammes - hình vuông, hình thoi) do tính cồng kềnh khi bài toán mở rộng và nguy cơ dẫn dắt người học tới thói quen lập trình không cấu trúc (non-structured programming).
- Hệ thống hóa chuẩn biểu diễn dữ liệu: Phân tích chi tiết chuẩn mã hóa ký tự quốc tế ASCII, cách xử lý ký tự đặc biệt có dấu trong tiếng Pháp, kỹ thuật nén biểu diễn nhị phân sang hệ thập lục phân (1 byte 8-bit chuyển thành 2 ký tự hex từ
00 đến FF, ví dụ: $10011110_2 = \text{9E}_{16}$).
- Liên hệ giữa thuật toán và lưu trữ tệp tin: Kết nối kiến thức giải thuật mảng với cấu trúc dữ liệu bản ghi (enregistrements) và tệp dữ liệu (fichiers), chuẩn bị nền tảng cho việc thiết kế các phần mềm quản lý cơ sở dữ liệu thực tế.
Đối tượng sử dụng giáo trình
| Nhóm đối tượng |
Điều kiện tiên quyết & Mục đích sử dụng |
| Sinh viên đại học khối không chuyên |
Sinh viên năm thứ nhất các ngành Khoa học Xã hội, Kinh tế, Quản trị, Nhân văn cần học học phần Nhập môn Tin học/Lập trình cơ sở. |
| Sinh viên chuyên ngành CNTT giai đoạn đầu |
Sinh viên năm nhất ngành Khoa học Máy tính cần rèn luyện tư duy thuật toán và kỹ thuật tối ưu hóa bộ nhớ trước khi tiếp cận các ngôn ngữ lập trình bậc cao. |
| Giảng viên đại học |
Sử dụng làm đề cương bài giảng chuẩn, khai thác ngân hàng bài tập mẫu và phương pháp sư phạm minh họa trực quan cho các lớp nhập môn. |
| Người tự học lập trình |
Người bắt đầu tự học muốn xây dựng nền tảng tư duy cấu trúc dữ liệu và giải thuật bài bản thông qua hệ thống lý thuyết kèm bài tập có lời giải. |
Giáo trình không đòi hỏi kiến thức toán học cao cấp (như giải tích, vi phân hay đại số tuyến tính trừu tượng). Điều kiện tiên quyết duy nhất đối với người học là nắm vững số học cơ bản (bốn phép tính cộng, trừ, nhân, chia, lũy thừa cơ số và quy tắc dấu) cùng tư duy logic tuần tự.
Câu hỏi thường gặp
1. Giáo trình này phù hợp với ai?
Tài liệu được biên soạn cho người mới bắt đầu tiếp cận lĩnh vực lập trình, đặc biệt là sinh viên khối ngành không chuyên về toán học (non-matheux) và người tự học cần một tài liệu có hệ thống từ cơ bản về thuật toán.
2. Cần kiến thức nền nào để học giáo trình này?
Người học không cần kiến thức toán cao cấp. Yêu cầu duy nhất là hiểu rõ các phép toán số học căn bản (cộng, trừ, nhân, chia, lũy thừa) và khả năng tư duy phân tích theo từng bước logic.
3. Điểm khác biệt của giáo trình này so với các tài liệu lập trình khác?
Giáo trình sử dụng mã giả (pseudo-code) độc lập với ngôn ngữ máy, giúp người học tập trung hoàn toàn vào tư duy logic giải thuật thay vì bị phân tâm bởi các lỗi cú pháp. Đồng thời, giáo trình tích hợp sẵn 100% lời giải chi tiết cho hệ thống bài tập thực hành.
4. Phương pháp tự học giáo trình đạt hiệu quả cao nhất?
Người học cần thực hiện nghiêm ngặt kỹ thuật kiểm thử bằng giấy bút (dry-run): vẽ bảng biến nhớ, ghi lại sự thay đổi giá trị của từng biến qua mỗi dòng lệnh trước khi xem đáp án tại phần Corrigés.
5. Có tài liệu bổ trợ nào đi kèm giáo trình không?
Giáo trình cung cấp các liên kết tham khảo học liệu số tại máy chủ bộ môn của Đại học Paris 7 (http://www.info/algo/index.htm) cùng các tư liệu nghe nhìn minh họa về logic học và hệ thống mã hóa cơ số.
Kết luận
Giáo trình Algorithmique et Programmation pour Non‐Matheux của Christophe Darmangeat là tài liệu sư phạm hoàn chỉnh về giải thuật nhập môn, giải quyết rào cản tâm lý của người học đối với toán học trong tin học. Bằng cách chuẩn hóa tư duy trên hệ thống mã giả và làm rõ bản chất biểu diễn nhị phân, tài liệu xây dựng nền tảng vững chắc cho việc tiếp cận bất kỳ ngôn ngữ lập trình nào.
Lộ trình học tập khuyến nghị:
$$\text{Mã hóa & Kiểu dữ liệu} \longrightarrow \text{4 Khối lệnh cơ bản} \longrightarrow \text{Cấu trúc Mảng & Sắp xếp} \longrightarrow \text{Hàm, Tệp tin & Đệ quy}$$
Người học có thể khai thác thêm các bài tập mở rộng và tài liệu lưu trữ trực tuyến tại cổng thông tin học liệu của Université Paris 7 để hoàn thiện kỹ năng thiết kế thuật toán.