Lập trình là quá trình viết, kiểm thử, sửa lỗi và bảo trì mã nguồn của các chương trình máy tính. Đây là một quy trình sáng tạo giúp máy tính thực hiện các tác vụ cụ thể bằng cách sử dụng các ngôn ngữ lập trình.
💡 Minh họa: Lập trình giống như việc viết công thức nấu ăn chi tiết cho máy tính. Máy tính sẽ tuân theo chính xác từng bước trong công thức mà không có khả năng tự suy luận hay đưa ra quyết định sáng tạo.
Thuật toán (Algorithm): Là tập hợp các bước logic, có thứ tự để giải quyết một vấn đề cụ thể.
Thuật toán sắp xếp nổi bọt (Bubble Sort):
1. Duyệt qua mảng từ đầu đến cuối
2. So sánh các phần tử liền kề
3. Hoán đổi vị trí nếu phần tử trước lớn hơn phần tử sau
4. Lặp lại quá trình cho đến khi không còn hoán đổi nào nữa
Mảng ban đầu: [5, 3, 8, 4, 2]
Vòng lặp ngoài 1:
[5, 3, 8, 4, 2] → So sánh 5 và 3 → Hoán đổi → [3, 5, 8, 4, 2]
[3, 5, 8, 4, 2] → So sánh 5 và 8 → Không đổi → [3, 5, 8, 4, 2]
[3, 5, 8, 4, 2] → So sánh 8 và 4 → Hoán đổi → [3, 5, 4, 8, 2]
[3, 5, 4, 8, 2] → So sánh 8 và 2 → Hoán đổi → [3, 5, 4, 2, 8]
Kết thúc vòng 1: [3, 5, 4, 2, 8] (Phần tử lớn nhất 8 đã ở vị trí cuối cùng)
Vòng lặp ngoài 2:
[3, 5, 4, 2, 8] → So sánh 3 và 5 → Không đổi → [3, 5, 4, 2, 8]
[3, 5, 4, 2, 8] → So sánh 5 và 4 → Hoán đổi → [3, 4, 5, 2, 8]
[3, 4, 5, 2, 8] → So sánh 5 và 2 → Hoán đổi → [3, 4, 2, 5, 8]
Kết thúc vòng 2: [3, 4, 2, 5, 8] (Phần tử lớn thứ 2 là 5 đã ở đúng vị trí)
Vòng lặp ngoài 3:
[3, 4, 2, 5, 8] → So sánh 3 và 4 → Không đổi → [3, 4, 2, 5, 8]
[3, 4, 2, 5, 8] → So sánh 4 và 2 → Hoán đổi → [3, 2, 4, 5, 8]
Kết thúc vòng 3: [3, 2, 4, 5, 8] (Phần tử lớn thứ 3 là 4 đã ở đúng vị trí)
Vòng lặp ngoài 4:
[3, 2, 4, 5, 8] → So sánh 3 và 2 → Hoán đổi → [2, 3, 4, 5, 8]
Kết thúc vòng 4: [2, 3, 4, 5, 8] (Mảng đã được sắp xếp)
Biến (Variable): Là nơi lưu trữ dữ liệu trong chương trình.
Ví dụ:
// JavaScript
let age = 25; // Biến age lưu giá trị số nguyên 25
const name = "Alice"; // Biến name lưu chuỗi "Alice"
var isStudent = true; // Biến isStudent lưu giá trị boolean true
Kiểu dữ liệu (Data Type): Xác định loại dữ liệu được lưu trữ trong biến.
Cơ bản:
42
, -7
, 0
3.14
, -0.001
, 2.0
"Hello"
, 'World'
, "123"
true
, false
Phức tạp:
[1, 2, 3]
, ["apple", "orange", "banana"]
{name: "John", age: 30}
Cấu trúc điều khiển (Control Structure):
Rẽ nhánh:
# Python
if age >= 18:
print("Bạn đã đủ tuổi bầu cử")
else:
print("Bạn chưa đủ tuổi bầu cử")
Vòng lặp:
// C++
for(int i = 0; i < 5; i++) {
cout << i << " "; // Kết quả: 0 1 2 3 4
}
int j = 0;
while(j < 5) {
cout << j << " "; // Kết quả: 0 1 2 3 4
j++;
}
Hàm (Function): Khối mã thực hiện một nhiệm vụ cụ thể và có thể tái sử dụng.
// JAVA
public int sum(int a, int b) {
return a + b; // Hàm cộng hai số
}
// Gọi hàm
int result = sum(5, 3); // result = 8
Phân loại theo cấp độ:
Ngôn ngữ bậc thấp: Assembly, Machine Language - gần với ngôn ngữ máy tính
; Assembly - Cộng hai số
MOV AL, 5 ; Gán giá trị 5 cho thanh ghi AL
MOV BL, 3 ; Gán giá trị 3 cho thanh ghi BL
ADD AL, BL ; Cộng BL vào AL (AL = AL + BL)
Ngôn ngữ bậc trung: C, C++ - kết hợp giữa bậc cao và bậc thấp
// C - Cộng hai số
int sum = 5 + 3;
Ngôn ngữ bậc cao: Python, JAVA, JavaScript - gần với ngôn ngữ tự nhiên
# Python - Cộng hai số
sum = 5 + 3
Phân loại theo mẫu hình lập trình:
Hướng thủ tục (Procedural): C, Pascal
// C - Procedural
void printDetails(struct Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
}
Hướng đối tượng (Object-Oriented): JAVA, C++, C#, Python
// JAVA - OOP
class Person {
private String name;
private int age;
public void printDetails() {
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
Hướng hàm (Functional): Haskell, Scala, JavaScript (một phần)
// JavaScript - Functional
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((n) => n * 2); // [2, 4, 6, 8, 10]
Logic (Logic): Prolog
/* Prolog - Logic */
parent(john, mary).
parent(john, tom).
parent(jane, mary).
sibling(X, Y) :- parent(Z, X), parent(Z, Y), X \= Y.
Phân loại theo cách thực thi:
Phân tích yêu cầu: Hiểu rõ vấn đề cần giải quyết
Thiết kế: Xây dựng cấu trúc chương trình và thuật toán
Lập trình: Viết mã nguồn
Kiểm thử: Tìm và sửa lỗi
Triển khai: Đưa phần mềm vào sử dụng
Bảo trì: Cập nhật, sửa lỗi và nâng cấp chương trình
Máy tính
|
|-- Phần cứng
| |-- CPU (Đơn vị xử lý trung tâm)
| | |-- ALU (Đơn vị tính toán số học)
| | |-- CU (Đơn vị điều khiển)
| | |-- Thanh ghi
| | |-- Bộ nhớ đệm (Cache)
| |
| |-- Bộ nhớ
| | |-- RAM (Bộ nhớ truy cập ngẫu nhiên)
| | |-- ROM (Bộ nhớ chỉ đọc)
| |
| |-- Thiết bị lưu trữ
| | |-- Ổ cứng HDD
| | |-- Ổ cứng SSD
| | |-- USB/Thiết bị lưu trữ di động
| |
| |-- Thiết bị vào/ra
| |-- Thiết bị nhập
| | |-- Bàn phím
| | |-- Chuột
| | |-- Máy quét
| | |-- Microphone
| |
| |-- Thiết bị xuất
| |-- Màn hình
| |-- Máy in
| |-- Loa
|
|-- Phần mềm
|-- Hệ điều hành
|-- Phần mềm ứng dụng
Phần cứng (Hardware):
Đơn vị đo thông tin:
Hệ điều hành là phần mềm quản lý phần cứng và phần mềm của máy tính, cung cấp giao diện cho người dùng và các ứng dụng.
Hệ điều hành
|
|-- Kernel (Nhân)
| |-- Quản lý quy trình
| |-- Quản lý bộ nhớ
| |-- Driver thiết bị
| |-- Bảo mật
| |-- Stack mạng
|
|-- Shell (Vỏ)
| |-- Giao diện dòng lệnh
| |-- Trình thông dịch script
|
|-- Hệ thống tập tin
| |-- Cấu trúc thư mục/file
| |-- Quyền truy cập
| |-- Quản lý không gian lưu trữ
|
|-- Giao diện đồ họa
|
|-- Phân loại hệ điều hành:
|-- Windows
|-- Linux
|-- macOS
|-- Android
|-- iOS
Chức năng của hệ điều hành:
Các hệ điều hành phổ biến:
Giao diện dòng lệnh (Command Line Interface):
Mạng máy tính là tập hợp các thiết bị kết nối với nhau để chia sẻ tài nguyên và thông tin. Như vậy, internet thực chất là một mạng máy tính kết nối hàng tỷ thiết bị trên toàn cầu. Hoặc khi bạn kết nối 2 máy tính với nhau để chia sẻ dữ liệu, bạn đã tạo ra một mạng máy tính nhỏ.
Mạng máy tính
|
|-- Mô hình mạng
| |-- Mô hình OSI - 7 tầng
| | |-- 1. Physical (Vật lý)
| | |-- 2. Data Link (Liên kết dữ liệu)
| | |-- 3. Network (Mạng)
| | |-- 4. Transport (Giao vận)
| | |-- 5. Session (Phiên)
| | |-- 6. Presentation (Trình diễn)
| | |-- 7. Application (Ứng dụng)
| |
| |-- Mô hình TCP/IP - 4 tầng
| |-- 1. Link Layer (Tầng liên kết)
| |-- 2. Internet Layer (Tầng Internet)
| |-- 3. Transport Layer (Tầng giao vận)
| |-- 4. Application Layer (Tầng ứng dụng)
|
|-- Thành phần mạng
| |-- Router
| |-- Switch
| |-- Hub
| |-- Modem
| |-- Card mạng
| |-- Cáp mạng
|
|-- Loại mạng
| |-- LAN (Mạng cục bộ)
| |-- WAN (Mạng diện rộng)
| |-- MAN (Mạng đô thị)
| |-- PAN (Mạng cá nhân)
| |-- Internet (Mạng toàn cầu)
|
|-- Giao thức
|-- IP (Internet Protocol)
|-- TCP (Transmission Control Protocol)
|-- UDP (User Datagram Protocol)
|-- HTTP/HTTPS
|-- DNS (Domain Name System)
|-- DHCP (Dynamic Host Configuration Protocol)
Mô hình OSI và TCP/IP:
Các khái niệm cơ bản:
Loại mạng:
Các IDE phổ biến:
Tính năng chính của IDE:
Trình biên dịch (Compiler):
Trình thông dịch (Interpreter):
Chức năng:
Các hệ thống phổ biến:
Nền tảng lưu trữ mã nguồn:
Package Manager:
Công cụ kiểm thử:
CI/CD (Continuous Integration/Continuous Deployment):
Tổ chức thư mục: (ví dụ, có thể khác tùy theo ngôn ngữ và framework)
├── src/ # Code chính
├── build/ # Tập tin biên dịch (nếu có)
├── tests/ # Tập tin kiểm thử
├── docs/ # Tài liệu
├── .gitignore # Tập tin để loại trừ các file không cần thiết khỏi git
├── README.md # Tài liệu giới thiệu dự án
├── LICENSE # Giấy phép sử dụng
└── .env # Tập tin cấu hình môi trường (nếu có)
Tách biệt mối quan tâm (Separation of Concerns):
Các quy ước đặt tên:
Coding Style Guides:
Phương pháp phát triển phần mềm:
Công cụ quản lý dự án:
Tài liệu hóa (Documentation):
Kiểm thử:
Code Review:
Bảo mật cơ bản:
Như vậy, bạn đã được trang bị cái nhìn tổng quan về thế giới lập trình: từ các ngôn ngữ và khái niệm cơ bản, kiến trúc máy tính và hệ điều hành, đến mạng máy tính, công cụ phát triển, và phương pháp quản lý dự án. Đây chính là nền móng vững chắc để bạn tiếp tục hành trình học tập và phát triển kỹ năng lập trình của mình.
Tiếp theo chúng ta sẽ chính thức bắt đầu với ngôn ngữ lập trình JAVA, một trong những ngôn ngữ phổ biến và mạnh mẽ nhất hiện nay. Hãy cùng khám phá!