Bài 1 · Cơ bản · 14 phút· Cập nhật 11/06/2026
C là gì? Lịch sử & lộ trình học
Biên soạn bởi Nguyễn Anh Tuấn
C là gì, ra đời ở Bell Labs để viết Unix, vì sao tên C nối từ BCPL và B, C còn dùng ở đâu, và các đầu sách nên đọc để học C.
Bối cảnh
Cuối thập niên 1960, tại Bell Labs (Mỹ), Ken Thompson khởi tạo Unix trên máy PDP-7; Dennis Ritchie và các đồng nghiệp sau đó tham gia phát triển hệ thống. Khi đó, assembly vẫn là lựa chọn phổ biến để xây dựng các phần lõi của hệ điều hành vì chúng phụ thuộc chặt vào kiến trúc phần cứng. Do đó, khi chuyển sang kiến trúc khác, các hệ điều hành thường phải sửa đổi hoặc viết lại đáng kể phần mã phụ thuộc máy.
Họ cần một ngôn ngữ vẫn đủ gần phần cứng để quản lý bộ nhớ, biểu diễn dữ liệu và gọi các dịch vụ hệ thống, nhưng dễ xây dựng và bảo trì hơn assembly. Thay vì bắt đầu từ con số không, Dennis Ritchie đã phát triển ngôn ngữ B của Ken Thompson vốn chịu ảnh hưởng từ BCPL thành C trong giai đoạn 1971-1973.
Đến mùa hè năm 1973, nhân Unix trên PDP-11 được viết lại bằng C. Thành công này cho thấy C đủ hiệu quả và linh hoạt cho lập trình hệ thống, rồi mở đường để Unix cùng các công cụ của nó được chuyển dần sang nhiều kiến trúc khác. Đây không phải lần đầu một hệ điều hành dùng ngôn ngữ bậc cao, nhưng là một cột mốc lớn đưa C trở thành ngôn ngữ triển khai hệ thống thực dụng.
- ▸C được Dennis Ritchie phát triển tại Bell Labs vào đầu thập niên 1970, thường gắn với mốc 1972.
- ▸Mục tiêu cốt lõi của C là giúp phát triển Unix từ các công cụ hệ thống đến nhân hệ điều hành hiệu quả hơn assembly.
- ▸Năm 1973, nhân Unix được viết lại bằng C, trở thành một cột mốc chứng minh rằng ngôn ngữ bậc cao vẫn có thể triển khai hệ điều hành một cách thực dụng và hiệu quả.
Ghi công
Dennis Ritchie qua đời vào tháng 10 năm 2011, chỉ khoảng một tuần sau Steve Jobs. Sự ra đi của ông ít tạo hiệu ứng truyền thông đại chúng hơn, nhưng dấu ấn của C và Unix vẫn hiện diện trong vô số hệ thống vận hành máy chủ, điện thoại và thiết bị chúng ta dùng mỗi ngày.
Không có ý nghĩa bí ẩn nào cả, cách đặt tên rất đơn giản: C là chữ cái kế tiếp của B trong bảng chữ cái tiếng Anh.
| Ngôn ngữ | Năm | Tác giả | Ghi chú |
|---|---|---|---|
| BCPL | 1967 | Martin Richards | ngôn ngữ hệ thống gọn nhẹ, chạy trên nhiều máy |
| B | 1969 | Ken Thompson | rút gọn BCPL cho máy nhỏ, lấy chữ cái đầu tiên của ngôn ngữ BCPL |
| C | ~1972 | Dennis Ritchie | mở rộng B (thêm kiểu dữ liệu…), lấy chữ cái kế tiếp |
Fun fact
Diện mạo C gần như không đổi từ đó tới nay. Đây là chương trình C "chào đời" nổi tiếng truyền thống hello, world của cả ngành bắt nguồn từ tài liệu của nhóm Bell Labs, rồi nổi tiếng qua cuốn K&R (1978):
hello.c - bạn sẽ tự chạy nó ở Bài 3
#include <stdio.h>
int main(void) {
printf("hello, world\n");
return 0;
} Kết quả khi chạy
hello, world
Hơn 50 năm sau, C không "cổ" - nó ở tầng móng của gần như mọi thứ bạn chạm vào hôm nay:
- ▸Nhân Linux chủ yếu được viết bằng C, bên cạnh assembly cho phần phụ thuộc kiến trúc và một lượng mã Rust đang tăng dần. Linux là nền tảng của Android và hiện diện rộng rãi trên máy chủ, cloud và thiết bị nhúng.
- ▸CPython, triển khai chuẩn và phổ biến nhất của Python, có lõi runtime viết bằng C.
- ▸SQLite, Git, curl và OpenSSL đều là những dự án có codebase lấy C làm ngôn ngữ chủ đạo.
- ▸Trong firmware và hệ thống nhúng từ thiết bị gia dụng, ô tô đến IoT, C vẫn là lựa chọn phổ biến nhờ hiệu năng, khả năng kiểm soát bộ nhớ và hệ sinh thái compiler rộng. Nhưng ngày nay nó cùng tồn tại với C++, Rust và assembly, thay vì là lựa chọn duy nhất.
Vì thế học C không hẳn chỉ để "viết app bằng C" mà để hiểu tầng móng: bộ nhớ là gì, con trỏ là gì, chương trình chạy ra sao. Học xong C, các ngôn ngữ khác bỗng dễ giải thích hẳn vì bạn biết các kiến thức nền tảng bên dưới.
Nối với các khoá khác của Mèo
Khoá này có đủ bài học miễn phí trên website. Tuy nhiên C là ngôn ngữ có những cuốn sách hay bậc nhất ngành, và khoá này lấy cảm hứng từ chúng (chọn chủ đề, thứ tự sư phạm) để bạn đọc sâu thêm đúng chỗ:
| Cuốn | Hợp lúc nào | Vai trò trong khoá |
|---|---|---|
| Modern C - Jens Gustedt | song song khoá CƠ BẢN | xương sống - C hiện đại (C17/C23); tác giả phát hành bản điện tử miễn phí |
| The C Programming Language (K&R) | đọc thêm, bất kỳ lúc nào | kinh điển 1978/88 - hiểu tinh thần C; code theo chuẩn mới |
| C Traps and Pitfalls - Andrew Koenig | từ giữa khoá cơ bản | sách "bẫy" mỏng mà thấm - các callout cảnh báo trong khoá rải đúng bẫy của cuốn này |
| Expert C Programming - Peter van der Linden | song song khoá NÂNG CAO | xương sống nâng cao - con trỏ, khai báo, liên kết, chuyện hậu trường; viết rất có duyên |
| Low-Level Programming - Igor Zhirkov | sau hai khoá C | C - assembly x86-64 - Linux - dành cho hướng "C Thực Chiến" về hệ thống |
Khuyến khích
C cơ bản (khoá này) lấy cảm hứng từ mạch Modern C cấp 0-1: cài trình biên dịch -> chương trình đầu tiên -> biến & kiểu dữ liệu -> nhập xuất -> toán tử -> rẽ nhánh -> vòng lặp -> hàm -> mảng & chuỗi -> 3 dự án nhỏ. C nâng cao nhận tiếp với mạch Expert C: con trỏ từ mọi góc, bộ nhớ, struct, module, kiểm thử - và những cái bẫy nổi tiếng nhất của ngôn ngữ.
- ▸Cơ bản: nền tảng ngôn ngữ, cảm hứng từ Modern C, bẫy kiểu Koenig rải dọc đường.
- ▸Nâng cao: con trỏ & bộ nhớ & thiết kế module, cảm hứng từ Expert C Programming.
- ▸Sau đó: khoá C Thực Chiến (toolchain đã có; hệ thống/nhúng đang lên kế hoạch hợp với Low-Level Programming).
Bài tiếp theo
Câu hỏi thường gặp
C nhỏ, ngôn ngữ chỉ có khoảng 30 từ khoá, học cú pháp nhanh hơn nhiều ngôn ngữ khác. Điểm khó là C trao nhiều trách nhiệm cho lập trình viên: quản lý bộ nhớ, kiểm soát giới hạn mảng, theo dõi vòng đời dữ liệu và sử dụng con trỏ đúng cách. Một lỗi con trỏ có thể làm chương trình sập, âm thầm ghi đè dữ liệu, gây lỗi khó tái hiện hoặc tạo ra hành vi không xác định. Vì vậy học C cũng là học cách dữ liệu nằm trong bộ nhớ, con trỏ trỏ tới đâu, và vì sao một lỗi nhỏ có thể làm cả hệ thống sai. Khoá học đi chậm và mô phỏng từng bước các phần dễ nhầm để mèo con hiểu bản chất trước khi viết chương trình lớn hơn.
Không. C++ là một ngôn ngữ khác, được Bjarne Stroustrup phát triển tại Bell Labs từ năm 1979. Đến năm 1985, nó có bản phát hành và tài liệu tham chiếu đầu tiên. C++ khởi đầu từ C, rồi mở rộng mạnh mẽ với class, kế thừa, đa hình, template, overloading, quản lý tài nguyên theo RAII và thư viện chuẩn lớn hơn nhiều. Vì vậy, C++ không chỉ là “C có thêm hướng đối tượng”, mà là một hệ sinh thái ngôn ngữ rộng và phức tạp hơn đáng kể.
Cả hai đều là điểm bắt đầu tốt, và Mèo có khoá học cho cả hai hướng. Python phù hợp nếu bạn muốn vào nhanh, viết được chương trình sớm và thấy kết quả ngay. C phù hợp nếu bạn muốn hiểu sâu hơn về bộ nhớ, con trỏ và cách máy tính thực thi chương trình.
Khoá này dùng C17 làm chuẩn nền tảng. C17 là phiên bản ổn định, tương thích tốt với các compiler phổ biến như GCC, Clang và MSVC hiện đại. Nó bao gồm các nền tảng quan trọng từ C99 và C11, nhưng không buộc người mới phải chạy theo những thay đổi mới nhất của ngôn ngữ. C23 là chuẩn C hiện hành, được công bố thành ISO/IEC 9899:2024. Nó bổ sung một số tiện nghi và cải tiến, nhưng mức hỗ trợ giữa các compiler vẫn chưa đồng đều. Vì vậy, khoá học không phụ thuộc vào C23 để mọi ví dụ có thể chạy ổn định trên nhiều môi trường.
Không. Mèo Ham Học có biên soạn đầy đủ các khoá C từ cơ bản đến nâng cao, thực chiến. Tuy nhiên các cuốn sách kinh điển là nguồn tham khảo tốt để đọc sâu thêm, hiểu tinh thần C và học các bẫy hay gặp. Bạn có thể chọn đọc Modern C song song với khoá cơ bản, và Expert C Programming khi học nâng cao. Các cuốn còn lại có thể đọc thêm khi bạn muốn mở rộng kiến thức.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Ngôn ngữ C do ai tạo ra, ở đâu?
- 1
Dennis Ritchie còn làm gì nữa
Tra cứu: ngoài ngôn ngữ C, Dennis Ritchie đồng tác giả thứ gì nổi tiếng không kém? Ông nhận giải thưởng lớn nào của ngành?
Hoàn thành khi: Hệ điều hành Unix (cùng Ken Thompson) và sách K&R; giải ACM A.M. Turing Award 1983.
- 2
Chuỗi tên gọi
Viết ra chuỗi "phả hệ" dẫn tới tên C, kèm năm và tác giả từng ngôn ngữ.
Hoàn thành khi: BCPL (1967, Martin Richards) -> B (1969, Ken Thompson) -> C (~1972, Dennis Ritchie).
- 3
C quanh mèo con
Kể 3 phần mềm mèo con dùng hằng ngày có lõi viết bằng C (gợi ý: nhìn vào điện thoại).
Hoàn thành khi: Vd: nhân Linux/Android, SQLite (lưu dữ liệu app), CPython, Git, curl… - nêu đúng 3 cái là đạt.
- 4
Tải Modern C
Mở trang chính thức của tác giả: gustedt.gitlabpages.inria.fr/modern-c và tải bản điện tử Modern C (tác giả phát hành miễn phí). Lưu vào thư mục học.
Hoàn thành khi: Có file trên máy, tải từ trang chính chủ.
- 5
Chuẩn C mới nhất
Tra cứu: chuẩn C mới nhất đã ban hành là gì, năm nào? Khoá này dùng chuẩn nào?
Hoàn thành khi: C23 (ban hành 2024); khoá dùng C17 cho ổn định.
- 6
Kể lại bằng lời của mèo con
Giải thích cho một người bạn trong 3 câu: C ra đời để làm gì, và vì sao tên nó chỉ có một chữ cái.
Hoàn thành khi: Nêu được: cần ngôn ngữ viết Unix vừa gần máy vừa dễ hơn assembly; tên C vì là bước kế tiếp của ngôn ngữ B.