lesson-plan

📘 TỔNG QUAN VỀ LẬP TRÌNH


🎯 Mục tiêu tổng quát


🧑‍🏫 Bài 1: Giới thiệu về lập trình và ngôn ngữ lập trình

Lập trình là gì?

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.

Các khái niệm cơ bản trong lập trình

  1. 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ể.

    • Ví dụ: Thuật toán sắp xếp, tìm kiếm, xử lý dữ liệu
    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)
    
  2. 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
      
  3. 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:

      • integer (số nguyên): 42, -7, 0
      • float (số thực): 3.14, -0.001, 2.0
      • string (chuỗi): "Hello", 'World', "123"
      • boolean (true/false): true, false
    • Phức tạp:

      • array (mảng): [1, 2, 3], ["apple", "orange", "banana"]
      • object (đối tượng): {name: "John", age: 30}
      • class (lớp): Mẫu để tạo ra đối tượng
  4. 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++;
      }
      
  5. 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
    

Ngôn ngữ lập trình

  1. 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
      
  2. 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.
      
  3. Phân loại theo cách thực thi:

    • Biên dịch (Compiled): C, C++, Rust - chuyển đổi toàn bộ mã nguồn thành mã máy trước khi chạy
    • Thông dịch (Interpreted): Python, JavaScript - dịch và thực thi từng dòng lệnh
    • Kết hợp (Hybrid): JAVA, C# - biên dịch thành bytecode, sau đó thông dịch bởi máy ảo

Quy trình phát triển phần mềm cơ bản

  1. Phân tích yêu cầu: Hiểu rõ vấn đề cần giải quyết

    • Ví dụ: Xác định rằng hệ thống cần có chức năng đăng nhập, quản lý người dùng, và báo cáo.
  2. Thiết kế: Xây dựng cấu trúc chương trình và thuật toán

    • Ví dụ: Thiết kế cơ sở dữ liệu, giao diện người dùng, và các module chức năng.
  3. Lập trình: Viết mã nguồn

    • Ví dụ: Lập trình các chức năng theo thiết kế đã xác định.
  4. Kiểm thử: Tìm và sửa lỗi

    • Ví dụ: Kiểm tra xem chức năng đăng nhập có hoạt động chính xác không.
  5. Triển khai: Đưa phần mềm vào sử dụng

    • Ví dụ: Cài đặt phần mềm lên product server và cung cấp cho người dùng.
  6. Bảo trì: Cập nhật, sửa lỗi và nâng cấp chương trình

    • Ví dụ: Thêm tính năng mới hoặc sửa lỗi sau khi phát hiện.

🧑‍🏫 Bài 2: Cơ bản về máy tính, hệ điều hành và mạng máy tính

Kiến trúc máy tính cơ bản

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
  1. Phần cứng (Hardware):

    • CPU (Central Processing Unit): Đơn vị xử lý trung tâm - “bộ não” của máy tính
    • RAM (Random Access Memory): Bộ nhớ truy cập ngẫu nhiên - lưu trữ tạm thời
    • ROM (Read-Only Memory): Bộ nhớ chỉ đọc - lưu trữ firmware
    • Thiết bị lưu trữ: HDD, SSD - lưu trữ dài hạn
    • Thiết bị vào/ra: Bàn phím, chuột, màn hình, loa
  2. Đơn vị đo thông tin:

    • Bit: Đơn vị nhỏ nhất (0 hoặc 1)
    • Byte: 8 bits
    • KB (Kilobyte): 1,024 bytes
    • MB (Megabyte): 1,024 KB
    • GB (Gigabyte): 1,024 MB
    • TB (Terabyte): 1,024 GB

Hệ điều hành (Operating System)

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
  1. Chức năng của hệ điều hành:

    • Quản lý phần cứng và phần mềm
    • Quản lý quy trình và tài nguyên
    • Cung cấp giao diện người dùng
    • Quản lý file và bảo mật
  2. Các hệ điều hành phổ biến:

    • Windows: Phổ biến trong môi trường người dùng cá nhân và doanh nghiệp
    • macOS: Hệ điều hành của Apple dành cho máy tính Mac
    • Linux: Hệ điều hành mã nguồn mở, phổ biến cho máy chủ và developer
    • Android: Cho thiết bị di động, dựa trên Linux kernel
    • iOS: Hệ điều hành cho thiết bị di động của Apple
  3. Giao diện dòng lệnh (Command Line Interface):

    • Windows: Command Prompt, PowerShell
    • macOS/Linux: Terminal, Bash, Zsh

Mạng máy tính

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)
  1. Mô hình OSI và TCP/IP:

    • Mô hình OSI: 7 tầng (Physical, Data Link, Network, Transport, Session, Presentation, Application)
    • Mô hình TCP/IP: 4 tầng (Link, Internet, Transport, Application)
  2. Các khái niệm cơ bản:

    • IP (Internet Protocol): Định danh cho thiết bị trong mạng
    • DNS (Domain Name System): Chuyển đổi tên miền thành địa chỉ IP
    • HTTP/HTTPS: Giao thức truyền tải siêu văn bản
    • Client-Server: Mô hình kết nối phổ biến trong mạng
  3. Loại mạng:

    • LAN (Local Area Network): Mạng cục bộ trong phạm vi nhỏ
    • WAN (Wide Area Network): Mạng diện rộng kết nối nhiều LAN
    • Internet: Mạng toàn cầu kết nối hàng tỷ thiết bị

🧑‍🏫 Bài 3: Công cụ lập trình và môi trường phát triển

Môi trường phát triển tích hợp (IDE - Integrated Development Environment)

  1. Các IDE phổ biến:

    • Visual Studio Code: Thực tế đây là một Code Editor nhẹ nhưng rất mạnh mẽ, đa nền tảng, hỗ trợ nhiều ngôn ngữ, và có thể mở rộng bằng các tiện ích mở rộng (extensions)
    • IntelliJ IDEA: Mạnh mẽ cho JAVA, Kotlin, và các ngôn ngữ JVM khác
    • Eclipse: Phổ biến cho JAVA, có nhiều plug-in
    • Visual Studio: Mạnh mẽ cho C#, .NET và phát triển Windows
    • PyCharm: Chuyên biệt cho Python
  2. Tính năng chính của IDE:

    • Soạn thảo mã (Code Editor) với tính năng syntax highlighting (tô màu cú pháp)
    • Trình gỡ lỗi (Debugger)
    • Hoàn thành mã (Code Completion)
    • Tích hợp với hệ thống quản lý phiên bản
    • Công cụ build và run

Trình biên dịch và thông dịch (Compilers & Interpreters)

  1. Trình biên dịch (Compiler):

    • Chuyển đổi toàn bộ mã nguồn thành mã máy trước khi thực thi
    • Ví dụ: GCC cho C/C++, javac cho JAVA
  2. Trình thông dịch (Interpreter):

    • Đọc và thực thi mã nguồn trực tiếp, từng dòng một
    • Ví dụ: Python interpreter, Node.js cho JavaScript

Hệ thống quản lý phiên bản (Version Control System)

  1. Chức năng:

    • Theo dõi thay đổi trong mã nguồn
    • Phối hợp làm việc nhóm
    • Quay lại phiên bản trước khi cần
  2. Các hệ thống phổ biến:

    • Git: Phân tán, phổ biến nhất hiện nay
    • SVN (Subversion): Tập trung, cũ hơn
    • Mercurial: Phân tán, tương tự Git
  3. Nền tảng lưu trữ mã nguồn:

    • GitHub: Phổ biến nhất, hỗ trợ nhiều tính năng cộng tác
    • GitLab: Có phiên bản tự host
    • Bitbucket: Tích hợp tốt với sản phẩm Atlassian khác

Công cụ hỗ trợ phát triển khác

  1. Package Manager:

    • npm cho JavaScript
    • pip cho Python
    • Maven/Gradle cho JAVA
    • Composer cho PHP
    • NuGet cho .NET
  2. Công cụ kiểm thử:

    • Unit testing frameworks
    • Integration testing tools
    • Performance testing tools
  3. CI/CD (Continuous Integration/Continuous Deployment):

    • Jenkins
    • GitHub Actions
    • GitLab CI/CD
    • Travis CI

🧑‍🏫 Bài 4: Tổ chức mã nguồn và quản lý dự án lập trình

Cấu trúc dự án

  1. 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ó)
    
  2. Tách biệt mối quan tâm (Separation of Concerns):

    • Mỗi file/module chỉ giải quyết một vấn đề
    • Chia dự án thành các lớp logic (UI, business logic, data access)

Quy ước đặt tên và coding style

  1. Các quy ước đặt tên:

    • camelCase: Thường dùng cho biến và hàm (JavaScript, JAVA)
    • PascalCase: Thường dùng cho class (JAVA, C#)
    • snake_case: Thường dùng cho biến (Python)
    • kebab-case: Thường dùng cho folder và URL
  2. Coding Style Guides:

    • Google Style Guides
    • PEP 8 cho Python
    • Airbnb JavaScript Style Guide
    • PSR cho PHP

Quản lý dự án lập trình

  1. Phương pháp phát triển phần mềm:

    • Agile: Linh hoạt, thích ứng với thay đổi
    • Scrum: Sprint ngắn (2-4 tuần), daily meetings
    • Kanban: Quản lý luồng công việc liên tục
    • Waterfall: Tuần tự, ít thay đổi khi đã xác định yêu cầu
  2. Công cụ quản lý dự án:

    • Jira: Quản lý task, bug, và sprint
    • Trello: Bảng Kanban đơn giản
    • Asana: Quản lý task và timeline
    • GitHub Projects/Issues: Tích hợp với mã nguồn
  3. Tài liệu hóa (Documentation):

    • README: Giới thiệu dự án, hướng dẫn cài đặt và sử dụng
    • API Documentation: Swagger, OpenAPI
    • Code Comments: Giải thích các phần phức tạp (nên dùng cách code rõ ràng sao cho tự các dòng code có thể giải thích được chính nó thay vì phải dùng comment)
    • Wiki: Tài liệu chi tiết và hướng dẫn sử dụng

Bảo mật và chất lượng mã nguồn

  1. Kiểm thử:

    • Unit Testing: Kiểm tra từng đơn vị nhỏ của mã
    • Integration Testing: Kiểm tra sự tương tác giữa các thành phần
    • E2E Testing: Kiểm tra toàn bộ quy trình
  2. Code Review:

    • Quy trình đánh giá mã nguồn trước khi merge
    • Phát hiện lỗi, cải thiện chất lượng mã
    • Chia sẻ kiến thức trong team
  3. Bảo mật cơ bản:

    • Không lưu thông tin nhạy cảm trong mã nguồn
    • Sử dụng environment variables cho thông tin cấu hình
    • Tránh các lỗi bảo mật phổ biến (SQL Injection, XSS)

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á!


⬅️ Trở lại: GIT.md | 🏠 Home | ➡️ Tiếp theo: JAVA/Part1.md