TỔNG QUAN HỌC THUẬT: GIÁO TRÌNH KỸ THUẬT LẬP TRÌNH (HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG)

Tổng quan về giáo trình

Giáo trình Kỹ thuật lập trình do TS. Lê Hữu Lập và ThS. Nguyễn Duy Phương biên soạn, được Nhà xuất bản Bưu điện ấn hành năm 2008 (mã số xuất bản: GK 30 HM 08) và được TS. Từ Minh Phương (giảng viên Khoa Công nghệ Thông tin - Học viện Công nghệ Bưu chính Viễn thông) hiệu đính. Trong chương trình đào tạo kỹ sư Công nghệ thông tin và Kỹ sư Điện tử viễn thông tại Học viện Công nghệ Bưu chính Viễn thông, học phần "Kỹ thuật lập trình" giữ vị trí là môn học cơ sở bắt buộc, đóng vai trò bản lề kết nối giữa kiến thức nhập môn tin học với các học phần chuyên sâu về cấu trúc dữ liệu, giải thuật và phát triển phần mềm ứng dụng.

Mục tiêu học tập (learning outcomes) của giáo trình hướng đến việc trang bị cho sinh viên hệ thống lý thuyết nền tảng về phương pháp lập trình có cấu trúc, rèn luyện tư duy thiết kế giải thuật và kỹ năng cài đặt các cấu trúc dữ liệu kinh điển trên máy tính bằng ngôn ngữ lập trình C.

Về cấu trúc và cách tiếp cận, giáo trình gồm 7 chương lý thuyết kết hợp thực hành và 1 phần phụ lục bài tập tổng hợp. Nội dung được triển khai song song theo hai phương pháp luận: phân tích - thiết kế hệ thống từ trên xuống (Top-Down) và tổ chức - cài đặt chương trình từ dưới lên (Bottom-Up).

Điểm đặc sắc của giáo trình thể hiện ở việc chuẩn hóa các nguyên lý lập trình cấu trúc (nguyên lý tối thiểu, nguyên lý địa phương, nguyên lý nhất quán, nguyên lý an toàn), gắn liền việc phân tích giải thuật với quản lý bộ nhớ trực tiếp thông qua con trỏ và mã nguồn C hoàn chỉnh, giúp người học kiểm soát chính xác cơ chế vận hành của chương trình ở mức hệ thống.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung giáo trình được phân bổ qua 7 chương trọng tâm:

  1. Chương 1 - Đại cương về kỹ thuật lập trình cấu trúc: Trình bày lịch sử phát triển của kỹ thuật lập trình; phân tích các hạn chế của lập trình tuyến tính và lệnh GOTO; định nghĩa các cấu trúc điều khiển chuẩn mực (tuần tự, rẽ nhánh if-else, lặp while, do-while, for); phân loại kiểu dữ liệu cơ bản và có cấu trúc; thiết lập 4 nguyên lý lập trình cấu trúc và hai phương pháp thiết kế Top-Down, Bottom-Up.
  2. Chương 2 - Mảng và con trỏ (Array and Pointer): Cung cấp cấu trúc lưu trữ của mảng 1 chiều, mảng nhiều chiều và xâu ký tự (string); phân tích bản chất con trỏ, các phép toán số học trên con trỏ; kỹ thuật cấp phát và giải phóng bộ nhớ động (malloc, calloc, realloc, free); mối quan hệ giữa con trỏ với mảng, con trỏ trỏ tới con trỏ và đối số của hàm main().
  3. Chương 3 - Duyệt và đệ qui: Khái niệm quy nạp và định nghĩa đệ quy; thuật toán sinh kế tiếp (sinh tập con, sinh hoán vị, bài toán phân tích số tự nhiên); thuật toán quay lui (Backtracking) giải quyết các bài toán liệt kê xâu nhị phân, tổ hợp, hoán vị, bài toán xếp tám quân hậu, bài toán mã đi tuần; thuật toán nhánh cận ứng dụng giải bài toán cái túi (Knapsack) và bài toán người du lịch (TSP).
  4. Chương 4 - Ngăn xếp, hàng đợi và danh sách móc nối (Stack, Queue and Link List): Định nghĩa, cơ chế hoạt động và cài đặt các kiểu dữ liệu trừu tượng tuyến tính gồm Ngăn xếp (Stack - LIFO), Hàng đợi (Queue - FIFO), Danh sách liên kết đơn (Single Linked List) và Danh sách liên kết kép (Double Linked List); kèm theo các ứng dụng thực tế của từng cấu trúc.
  5. Chương 5 - Cấu trúc dữ liệu cây (Tree): Khái niệm và các thuộc tính của cây; biểu diễn cây nhị phân bằng danh sách tuyến tính (mảng) và danh sách móc nối; ba phép duyệt cây nhị phân cơ bản: duyệt trước (Preorder), duyệt giữa (Inorder), duyệt sau (Postorder); cài đặt cây nhị phân hoàn toàn cân bằng và cây nhị phân tìm kiếm (Binary Search Tree - BST).
  6. Chương 6 - Đồ thị (Graph): Các khái niệm cơ bản về đơn đồ thị, đa đồ thị, đồ thị có hướng/vô hướng; phương pháp biểu diễn đồ thị bằng ma trận kề, ma trận trọng số; các thuật toán tìm kiếm trên đồ thị gồm tìm kiếm theo chiều sâu (DFS), tìm kiếm theo chiều rộng (BFS); kiểm tra tính liên thông; đường đi và chu trình Euler, Hamilton; bài toán tìm cây bao trùm ngắn nhất (thuật toán Kruskal); bài toán tìm đường đi ngắn nhất (thuật toán Dijkstra, Floyd).
  7. Chương 7 - Sắp xếp và tìm kiếm (Sorting and Searching): Phân tích cơ chế và cài đặt các giải thuật sắp xếp nội: sắp xếp chèn (Insertion Sort), sắp xếp nổi bọt (Bubble Sort), sắp xếp lắc (Shaker Sort), sắp xếp nhanh (Quick Sort), sắp xếp vun đống (Heap Sort), sắp xếp trộn (Merge Sort); các giải thuật tìm kiếm gồm tìm kiếm tuần tự (Sequential Search) và tìm kiếm nhị phân (Binary Search).

Progression logic của giáo trình đi theo chuỗi phát triển từ tư duy phương pháp luận (Chương 1) $\rightarrow$ kỹ thuật quản trị ô nhớ vật lý (Chương 2) $\rightarrow$ tư duy giải thuật đệ quy, vét cạn và tối ưu (Chương 3) $\rightarrow$ tổ chức dữ liệu động tuyến tính (Chương 4) $\rightarrow$ tổ chức dữ liệu động phi tuyến tính (Chương 5, 6) $\rightarrow$ chuẩn hóa các thuật toán xử lý dữ liệu trọng yếu (Chương 7).

Kiến thức nền tảng được xây dựng

Giáo trình xây dựng hệ thống tri thức dựa trên các cơ sở toán học và khoa học máy tính kinh điển:

  • Lý thuyết nền tảng (Fundamental theories): Dẫn xuất các công trình lý thuyết của Edsger W. Dijkstra về việc loại trừ cấu trúc nhảy không điều kiện GOTO (1968); các tiên đề của C.A.R. Hoare về chứng minh tính đúng đắn của chương trình và tính bất biến của vòng lặp (1969); các nghiên cứu toán học của Donald E. Knuth trong bộ sách The Art of Computer Programming; nền tảng cú pháp của Niklaus Wirth (ngôn ngữ Pascal) cùng chuẩn ngôn ngữ lập trình C của Brian Kernighan và Dennis Ritchie (1978).
  • Nguyên lý cốt lõi (Core principles):
    1. Nguyên lý tối thiểu: Bắt đầu từ tập tối thiểu các cấu trúc lệnh (chỉ cần tuần tự và while) cùng các phép toán cơ sở để giải quyết bài toán trước khi mở rộng thư viện.
    2. Nguyên lý địa phương: Biến cục bộ trong hàm/thủ tục độc lập hoàn toàn với biến toàn cục; tham số truyền theo trị mang tính chất địa phương, giảm thiểu phản ứng phụ (side-effects).
    3. Nguyên lý nhất quán: Đảm bảo sự tương thích tuyệt đối giữa cấu trúc dữ liệu và phép toán thao tác trên cấu trúc đó (tránh lỗi ép kiểu ngầm định, tràn số).
    4. Nguyên lý an toàn: Kiểm soát và phát hiện lỗi từ mức thiết kế logic đến các cấp độ biên dịch, liên kết và thực thi.
  • Mô hình khung (Essential frameworks): Mô hình hóa bài toán theo kiến trúc Top-Down (phân rã chức năng từ mức 0 tổng quan đến mức đơn vị thủ tục) và cài đặt Bottom-Up (xây dựng các module cơ sở mức bit/toán tử rồi tích hợp thành hệ thống).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Thao tác mức bit (&, |, ^, ~, <<, >>), lập trình con trỏ nâng cao, quản lý bộ nhớ heap, tổ chức đọc/ghi tệp tin văn bản và nhị phân (fopen, fclose, fread, fwrite, fgets, fputs), thao tác chuỗi ký tự bằng thư viện chuẩn (strcmp, strcpy, strcat, strchr, strstr).
  • Kỹ năng phân tích (Analytical skills): Phân tích độ phức tạp không gian và thời gian của thuật toán; mô hình hóa dữ liệu thế giới thực thành các mô hình đồ thị, cây, hoặc danh sách liên kết; đánh giá không gian trạng thái trong các bài toán quay lui và nhánh cận.
  • Kỹ năng thực hành (Practical competencies): Khả năng chuyển hóa trực tiếp mã giả/mô tả toán học thành chương trình C chạy được; kỹ năng phân biệt và xử lý 4 nhóm lỗi lập trình (lỗi cú pháp error, lỗi cảnh báo warning, lỗi liên kết linker error, và lỗi logic trong thiết kế).

Phương pháp giảng dạy và học tập

Giáo trình áp dụng phương pháp tiếp cận sư phạm định hướng thực hành (practice-driven pedagogy), gắn lý thuyết thuật toán chặt chẽ với việc hiện thực hóa mã nguồn C. Từng cấu trúc dữ liệu không chỉ dừng lại ở mô hình biểu diễn mà luôn đi kèm tập thao tác hoàn chỉnh được đóng gói thành các hàm (functions) cụ thể.

Hệ thống bài tập và nghiên cứu tình huống (case studies) được bố trí từ mức độ cơ bản đến phức tạp:

  • Trong Chương 1, một tình huống điển hình được phân tích chi tiết là bài toán xây dựng tập thao tác số học trên biểu diễn nhị phân của hai số nguyên $a$ và $b$. Bài toán được phân tích từ mức tổng quan (Level 0: chuyển đổi nhị phân, cộng, trừ, nhân, chia, chia dư, ước chung lớn nhất) sang mô tả chức năng (Level 1: xác định Input, Output, Format, Actions) và hiện thực hóa Bottom-Up bằng chuỗi hàm: bit(), Addition(), Subtraction(), Multial(), Division(), Modul(), USCLN(), Binary().
  • Cuối Chương 1 là hệ thống 20 bài tập rèn luyện kỹ năng giải thuật, bao gồm: giải phương trình bậc 2, tìm nghiệm nguyên hệ phương trình $X+Y+Z=100; 5X+3Y+Z/3=100$, tìm số Fibonacci, chứng minh tính nguyên tố $N^2+N+41$, sàng số nguyên tố Eratosthenes, tìm số Mersenne, số bạn bè (hữu nghị), số Armstrong, số đối xứng (Palindrom), bài toán định dạng ngày tháng mm/dd/yy thành số nguyên 2 byte, bài toán quản lý địa chỉ mạng máy chủ - máy trạm theo chuỗi bit, và thuật toán mã hóa/giải mã tuyến tính tệp TEXT.TXT.

Phương pháp đánh giá và tự học:

  • Giáo trình yêu cầu người học tự xây dựng các thư viện hàm chức năng riêng thay vì lệ thuộc vào các hàm tiện ích có sẵn của trình biên dịch.
  • Hướng dẫn sinh viên tự kiểm thử thông qua việc thiết lập các bộ dữ liệu biên (test cases), theo dõi sự biến thiên của ô nhớ khi truyền con trỏ và cấu trúc, rèn luyện thói quen viết mã thụt lề theo cấp độ phân cấp điều khiển để phát hiện lỗi logic trước khi chạy chương trình.

Điểm nổi bật và cập nhật

Giáo trình Kỹ thuật lập trình được biên soạn dựa trên thực tế giảng dạy nhiều năm tại Học viện Công nghệ Bưu chính Viễn thông. Các nội dung trong sách thể hiện các giá trị học thuật và thực tiễn:

  • Tích hợp bối cảnh lịch sử và phân tích nguyên nhân lỗi: Giáo trình dẫn chứng cụ thể các sự kiện khoa học để làm rõ giá trị của lập trình cấu trúc. Điển hình là sự cố thất bại của Mỹ trong vụ phóng vệ tinh nhân tạo thám hiểm sao Kim năm 1973 do lỗi cú pháp trong câu lệnh vòng lặp Fortran: việc viết nhầm dấu phẩy thành dấu chấm (DO 50 I = 12.523 thay vì DO 50 I = 12, 523) khiến trình biên dịch hiểu thành lệnh gán biến thực DO 50 I = 12.523, dẫn đến sai lệch toàn bộ chương trình điều khiển.
  • Gắn kết với lĩnh vực kỹ thuật Bưu chính - Viễn thông: Phản ánh xu thế hội tụ giữa công nghệ thông tin và công nghệ viễn thông, nơi phần mềm điều khiển và xử lý tín hiệu chiếm tỷ trọng giá trị cao trong các hệ thống mạng và thiết bị đầu cuối viễn thông. Các ví dụ về cấp phát địa chỉ mạng, mã hóa tuyến tính, xử lý mặt nạ bit xuất phát trực tiếp từ các bài toán nghiệp vụ kỹ thuật truyền thông.
  • Phân tích bản chất bộ nhớ và dữ liệu: Giáo trình chỉ rõ những bất cập giữa kiểu dữ liệu và phép toán. Ví dụ: phân tích việc hàm tong(30000, 20000) hay tich(30000, 20000) trên kiểu int 16-bit bị tràn số dẫn đến kết quả sai lệch nếu không ép kiểu sang long, hoặc phép chia hai số nguyên a / b bị mất phần thập phân nếu không ép kiểu về float.

Đối tượng sử dụng giáo trình

  • Sinh viên đại học và cao đẳng: Tài liệu học tập bắt buộc dành cho sinh viên năm thứ nhất và năm thứ hai thuộc các chuyên ngành Công nghệ thông tin, Kỹ thuật Điện tử, Điện tử viễn thông và Mạng máy tính.
  • Kiến thức tiên quyết (Prerequisites): Người học chỉ cần hoàn thành học phần "Tin học cơ bản", nắm vững các khái niệm đại cương về phần cứng máy tính, hệ điều hành và tư duy logic cơ bản. Không đòi hỏi phải có kỹ năng lập trình chuyên sâu từ trước.
  • Giảng viên và cơ sở đào tạo: Dùng làm đề cương, bài giảng chuẩn cho học phần Kỹ thuật lập trình; cung cấp ngân hàng ví dụ mẫu và bài tập thuật toán phục vụ xây dựng đề thi, bài tập lớn và giáo án thực hành phòng máy.
  • Người tự học và kỹ sư tham khảo: Tài liệu tham khảo cho các kỹ sư ngành kỹ thuật công nghệ cần ôn tập, củng cố nền tảng cấu trúc dữ liệu và giải thuật, kỹ thuật thao tác con trỏ và quản lý ô nhớ trong ngôn ngữ C.

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

1. Giáo trình này phù hợp với ai?

Giáo trình được biên soạn chuyên biệt cho sinh viên hệ đại học, cao đẳng ngành Công nghệ thông tin, Điện tử viễn thông, cũng như sinh viên các ngành kỹ thuật công nghệ có môn học "Kỹ thuật lập trình" trong chương trình đào tạo.

2. Cần kiến thức nền nào trước khi tiếp cận giáo trình?

Theo Lời nói đầu của nhóm tác giả, người học chỉ cần hoàn thành môn "Tin học cơ bản". Toàn bộ các khái niệm về cú pháp C, cấu trúc lệnh, cấu trúc dữ liệu và thuật toán đều được hướng dẫn chi tiết từ đầu trong nội dung 7 chương.

3. Điểm khác biệt cốt lõi giữa giáo trình này và các tài liệu lập trình C thông thường là gì?

Giáo trình không thuần túy hướng dẫn cú pháp ngôn ngữ C mà tập trung vào phương pháp luận lập trình có cấu trúc thông qua 4 nguyên lý (tối thiểu, địa phương, nhất quán, an toàn), kết hợp kỹ thuật phân tích Top-Down/Bottom-Up với các cấu trúc dữ liệu động (Danh sách móc nối, Cây, Đồ thị) và giải thuật kinh điển.

4. Làm thế nào để tự học và thực hành hiệu quả với giáo trình?

Người học nên tuân thủ quy trình: đọc hiểu lý thuyết $\rightarrow$ nghiên cứu mã nguồn mẫu $\rightarrow$ tự gõ lại và biên dịch chương trình $\rightarrow$ phân tích thông báo lỗi (error, warning, linker) $\rightarrow$ tự cài đặt lại các giải thuật theo phương pháp Bottom-Up $\rightarrow$ giải quyết 20 bài tập cuối Chương 1 và bài tập tổng hợp ở phần Phụ lục.

5. Giáo trình có cung cấp mã nguồn mẫu và tài liệu bổ trợ không?

Mọi giải thuật trong giáo trình (từ các phép toán mức bit, sắp xếp, tìm kiếm đến duyệt cây, duyệt đồ thị) đều đi kèm mã nguồn C chi tiết. Phần Phụ lục của giáo trình cung cấp một bài tập tổng hợp toàn bộ kiến thức môn học dưới dạng một chương trình phần mềm hoàn chỉnh.


Kết luận

Giáo trình Kỹ thuật lập trình của Học viện Công nghệ Bưu chính Viễn thông cung cấp một hệ thống lý thuyết chuẩn mực và phương pháp thực hành chặt chẽ về kỹ thuật lập trình có cấu trúc.

Lộ trình học tập đề xuất:

  1. Nắm vững 4 nguyên lý lập trình cấu trúc và phương pháp Top-Down / Bottom-Up (Chương 1).
  2. Làm chủ cơ chế quản lý bộ nhớ thông qua Mảng và Con trỏ (Chương 2).
  3. Rèn luyện tư duy đệ quy, sinh kế tiếp, quay lui và nhánh cận (Chương 3).
  4. Cài đặt các cấu trúc dữ liệu tuyến tính và phi tuyến tính: Stack, Queue, Link List, Tree, Graph (Chương 4, 5, 6).
  5. Tối ưu hóa kỹ năng xử lý dữ liệu với các giải thuật Sorting, Searching và hoàn thành bài tập tổng hợp tại Phụ lục (Chương 7).

Tài nguyên bổ trợ đi kèm: Hệ thống 20 bài tập rèn luyện cuối chương, các đoạn mã nguồn C mẫu được chuẩn hóa và tài liệu hiệu đính từ Khoa Công nghệ Thông tin - Học viện Công nghệ Bưu chính Viễn thông.