# Phần 1: Lập trình Python **Buổi Học 1: Biến - Kiểu dữ liệu - Toán tử - Điều kiện trong Python** 1. Pesuo Code và lược đồ thuật toán (Flowchart) trong lập trình - Trình tự chạy của chương trình trong Python - Cách viết pesuo code (code giả) và lược đồ thuật toán. 1. Biến và Kiểu Dữ Liệu - Khái niệm về `biến`, `giá trị` và `kiểu dữ liệu` trong Python - Cơ chế máy tính lưu trữ và giải phóng giá trị cho biến. - Các kiểu dữ liệu cơ bản: int, float, string, boolean. - Khai báo và sử dụng biến. 2. Toán Tử và Các Khái Niệm Liên Quan - Các toán tử cơ bản: +, -, *, /, % - Toán tử so sánh và logic: ==, !=, <, >, and, or, not 3. Điều kiện rẽ nhánh trong Python - Khái niệm về câu lệnh rẽ nhánh if - else. Liên hệ giữa từ khoá lập trình và ngôn ngữ tự nhiên (tiếng Anh) - Khối code (Code block) trong lập trình Python - Nested if trong Python và vấn đề khi sử dụng nested If - Lệnh rẽ nhiều nhánh if - else if - else trong Python 4. Coding convention trong Python - Một số chuẩn đặt tên biến trong Python: capitalize, cameoCase. - Coding convention với if-else trong python. **Buổi Học 2: Vòng lặp và kiểu dữ liệu liên quan đến mảng trong Python** 1. Khái niệm về kiểu dữ liệu mảng (Mảng/List/Array) trong lập trình - Nhắc về khái niệm chuỗi là mảng của các ký tự để gợi mở về mảng - Các thành phần trong mảng: Element (Phần tử), Index (Chỉ số), len (độ dài) - Lưu ý về các phần tử trong mảng về kiểu dữ liệu. - Cách khai báo một List trong Python. 2. Khái niệm về vòng lặp for và cách hoạt động của vòng lặp for trong lập trình - Nhắc về khái niệm vòng lặp trong lập trình: - 3 thành phần quan trọng trong vòng lặp: Điểm bắt đầu, điều kiện kết thúc, bước nhảy - Liên hệ với khái niệm `for in arrays` và Enumerate trong vòng lặp for của Python 3. Liên hệ giữa vòng lặp `for` và giải thuật duyệt từ đầu đến cuối của mảng trong Python - Sự tăng của chỉ số index với mỗi lần thực hiện vòng lặp - Chỉ số `index` hiện tại được sử dụng cho `index ` của phàn tử trong vòng lặp - Điều kiện kết thúc tương ứng với chỉ số `len()` của mảng - Mô tả quá trình chạy của giải thuật duyệt qua các phần tử trong mảng 4. Các kiểu dữ liệu mảng phổ biến: List, Dict, Tuple. 5. Các thao tác làm việc với mảng trong Python: Thao tác CRUD - Thao tác thêm 1 phần tử vào mảng - Thao tác lấy ra một hoặc nhiều phần tử trong mảng - Thao tác sửa một hoặc nhiều phần tử trong mảng - Thao tác xoá một hoặc nhiều phần tử tỏng mảng 6. Giải Thuật cộng dồn trong mảng - Thuật toán cộng dồn và ứng dụng - Xác định biến trống khi cộng dồn **Buổi Học 3: Hàm và các thao tác với hàm trong Python** 1. Khái niệm về hàm và ứng dụng của hàm trong lập trình Python - Input/Outup trong hàm - Khái niệm `Chia để trị` trong lập trình - Ưu điểm về tính tái sử dụng của hàm 2. Cấu trúc câu lệnh về hàm trong Python - Từ khoá `def` trong khai báo hàm - Coding Convention trong việc đặt tên hàm 3. Parameter (input) của hàm. 3. Hàm trả về và hàm không trả về - Từ khoá return trong Python - Phân biệt hàm trả về và hàm không trả về 4. Thực thi hàm trong python - Lưu ý về `giá trị trả về` của hàm trong Python 5. Phương pháp tách hàm trong Python - Cách tách hàm để đảm bảo `Chia để trị` trong đoạn code dài - Cách xác định input/output khi tách hàm 6. Các hàm dựng sẵn phổ biến trong Python: - Các hàm dựng sẵn liên quan đến chuỗi, kiểm tra chuỗi - Các hàm dựng sẵn liên quan đến mảng: len, min, max, map, filter,... - Các hàm dựng sẵn khác 7. Hàm đệ quy trong lập trình Python - Khái niệm về hàm đệ quy - Lưu ý về điều kiện để hàm đệ quy dừng lại (điều kiện suy biến) **Buổi Học 4: Lập Trình Hướng Đối Tượng Trong Python** 1. Khái Niệm Về Lập Trình Hướng Đối Tượng - So sánh việc lập trình và đời sống thực tế - Mô tả khái niệm về `đối tượng` và `trường thông tin` trong lập trình - Ưu điểm của lập trình hướng đối tượng so với lập trình hướng thủ tục 2. Các khái niệm liên quan đến `Class` - Khái niệm về `Class` - Thành phần `field` trong `Class` - Thành phần `method` trong `Class` - Từ khoá `self` trong `Class` - Khái niệm về `contructor`/`destructor` trong `Class` 3. Các khái niệm liên quan đến `Object` - Khái niệm về `Object` trong lập trình hướng đối tượng - Cách khởi tạo `Object` thông qua `contrucotor` của `Class` - Truy cập giá trị của `field` và thực thi `method` trong `Object` 4. `Module` trong lập trình Python - Khái niệm về module, library trong python - Cài đặt library thông qua pip - import module vào Python **Buổi Học 5: Các tính chất trong Lập Trình Hướng Đối Tượng Với Python (1)** 1. Tính Kế Thừa trong Python - Khái niệm về Tính Kế Thừa - Sử dụng từ khoá `super` để truy cập các phương thức của lớp cha 2. Access Modifier trong Python - Khái niệm về `public`, `private`, `protected` trong lập trình hướng đối tượng. - Quy tắc đặt tên cho các thành phần `public`, `private`, `protected` trong Python 3. Tính Đa Hình trong Python - Khái niệm về Tính Đa Hình trong Python - Thể hiện tính đa hình trong việc `override method` trong Python - Sử dụng đa hình với lớp và phương thức 4. Ứng dụng của tính chất kế thừa và tính chất đa hình trong lập trình hướng đối tượng **Buổi Học 6: Các tính chất trong Lập Trình Hướng Đối Tượng Với Python (2)** 1. Tính Trừu Tượng trong Python - Khái niệm về Tính Trừu Tượng - Mô tả về `Abstract Class`, `Abstract Method` và `Interface` trong Python - Từ khoá `pass` khi khai báo `abstract method` - Sử dụng lớp trừu tượng và phương thức trừu tượng 2. Tính Kế Thừa Đa Cấp - Khái niệm về Kế Thừa Đa Cấp trong Python - Ví dụ và trường hợp sử dụng Tính Kế Thừa Đa Cấp 3. Tính Đa Hình Động và Tĩnh - So sánh Tính Đa Hình Động và Tĩnh - Ví dụ về cả hai loại Tính Đa Hình trong Python 4. Ưu điểm và ứng dụng của Tính Kế Thừa, Tính Trừu Tượng, và Tính Đa Hình - Giải thích các ưu điểm và lợi ích của Tính Kế Thừa, Tính Trừu Tượng và Tính Đa Hình - Mô tả các trường hợp sử dụng phổ biến trong thực tế **Buổi học 7: Các kỹ thuật lập trình nâng cao trong Python** 1. Khái niệm về lập trình bất đồng bộ trong Python - Lập trình bất đồng bộ là gì - Luồng trong lập trình Python - Sử dụng `concurrent.futures` để thực thi nhiều luồng chạy đồng thời 2. Khái niệm về Error Handling trong lập trình - Xử lý `Error Handling` với Python - Khối `try - catch - finnaly` trong Python - Sử dụng `try-catch-finnaly` để kiểm soát chương trình và lỗi trong Python 3. Debugging và UnitTesting trong lập trình Python - `Bug` và `Debug` trong lập trình - Các khái niệm liên quan đến `Debugging`: Break point, step, step over - Hướng dẫn phân tích terminal để đọc lỗi và sửa lỗi. - Một số lỗi lập trình thường mắc phải khi viết code. 4. Giới thiệu về `Log` và `Unit Testing` trong Python # Phần 2: Cấu trúc dữ liệu và giải thuật **Buổi Học 8: Cáu trúc dữ liệu mảng nâng cao: Stack, Queue, Linked List, và Mảng Băm** 1. Stack và Queue - Định nghĩa và sử dụng Stack và Queue - Các thao tác cơ bản với chúng 2. Mảng Băm (Hashing) - Khái niệm về mảng băm - Ứng dụng và cách thức hoạt động 3. Linked List - Khái niệm về linked list - So sánh Linked List và List; ứng dụng của chúng trong thực tế 4. Cấu trúc dữ liệu mảng với các phần tử là `object` **Buổi Học 9: Các giải thuật Nâng Cao Với Mảng và Thuật Toán Tìm Kiếm, Sắp Xếp** 1. Thuật Toán Sắp Xếp trong mảng - Bubble sort: Thuật toán sắp xếp nổi bọt - Quick sort và merge sort: Thuật toán sắp xếp nhanh 2. Khái niệm về `Big O Notation` trong lập trình - Khái niệm về độ phức tạp của thuật toán (`Big O Notation`) - Cách tính `Big O Notation` thông qua các giải thuật - Giá trị `Big O Notation` trong các giải thuật sắp xếp phổ biến 3. Thuật Toán Tìm Kiếm Cơ Bản - Thuật toán tìm kiếm tuần tự và nhị phân - So sánh hiệu suất của các thuật toán tìm kiếm - Giá trị `Big O Notation` trong các giải thuật tìm kiếm # Phần 3: Cơ sở dữ liệu **Buổi Học 10: Cơ Sở Dữ Liệu Cơ Bản và Thiết Kế Cơ Sở Dữ Liệu Quan Hệ** 1. Thiết Kế Cơ Sở Dữ Liệu Quan Hệ - Khái niệm về cơ sở dữ liệu quan hệ (RDBMS) - Thiết kế cơ sở dữ liệu với các bảng và khóa chính 2. Chuẩn Hoá Cơ Sở Dữ Liệu - Cách chuẩn hoá cơ sở dữ liệu để tránh lặp lại và thiếu nhất quán 3. Một số nghiệp vụ và thiết kế CSDL phổ biến - Nghiệp vụ quản lý đơn hàng - Nghiệp vụ quản lý kho - tồn kho - thu chi - Nghiêp vụ quản lý user - phân quyền - subcription 4. Công cụ thiết kế CSDL - Thiết kế mô hình R-D bằng draw.io **Buổi học 11: Hệ quản trị cơ sở dữ liệu (DBMS), bảng, khoá và rằng buộc trong bảng** 1. Khái Niệm Về Hệ Quản Trị Cơ Sở Dữ Liệu (DBMS) - Giới thiệu về DBMS và tầm quan trọng trong lưu trữ và quản lý dữ liệu. - So sánh việc quản lý dữ liệu trong DBMS và việc lưu trữ thông tin truyền thống. - Một số hệ quản trị cơ sở dữ liệu phổ biến. - Một số phần mềm quản lý cơ sở dữ liệu phổ biến : SSMS, DbBeaver... 2. Bảng trong Cơ Sở Dữ Liệu - Khái niệm về bảng (table) trong DBMS. - Các thành phần chính của bảng: cột (column) và dòng (row). - Quy tắc đặt tên cho các bảng trong cơ sở dữ liệu. - Nhốm các lệnh DDL (Data Definition Language) - Các kiểu dữ liệu của cột trong SQL 3. Khoá (Key) trong Cơ Sở Dữ Liệu - Khái niệm về khoá (key) và tầm quan trọng của nó trong quản lý dữ liệu. - Loại khoá chính (primary key) và cách xác định khoá chính cho một bảng. - Khoá ngoại (foreign key) và cách sử dụng nó để liên kết giữa các bảng. 4. Ràng Buộc (Constraints) trong Bảng - Khái niệm về ràng buộc (constraints) và vai trò của chúng trong bảng. - Các loại ràng buộc: ràng buộc khoá (key constraints), ràng buộc kiểu dữ liệu (data type constraints), và ràng buộc logic (logical constraints). - Cách thiết lập và quản lý các ràng buộc trong cơ sở dữ liệu. 5. Thao tác thêm, sửa, xoá dữ liệu với bảng - các lệnh `insert`,`update`,`delete` trong sql - Lưu ý các thao tác `insert`,`update`,`delete` với khoá ngoại **Buổi Học 12: Truy vấn cơ bản và nhóm các lệnh DDL trong SQL** 1. Khái niệm về truy vấn dữ liệu trong SQL 2. Truy Vấn Cơ Sở Dữ Liệu sử dụng các lệnh DDL - Mệnh đề SQL SELECT, FROM, WHERE, ORDER BY - Select * và select với trường dữ liệu cụ thể trong bảng 3. Join trong SQL: Kết nối các bảng trong SQL - Các loại JOIN: `innder join`, `left join`, `right join`, `outer join` 4. Group by trong SQL: Khái niệm nhóm dữ liệu - Nhóm dữ liệu sử dụng Group By - Nhóm các hàm tổng hợp (aggregate functions) trong SQL: count, min, max, sum, avg - Lưu ý khi sử dụng `Group by` với `Select` trong SQL 5. Mệnh đề HAVING trong SQL **Buổi Học 13: Truy Vấn Cơ Sở Dữ Liệu Nâng Cao: Subquery, View, và Stored Procedure** 1. Truy Vấn Cơ Sở Dữ Liệu Nâng Cao: Subquery - Sử dụng Subquery để thực hiện truy vấn phức tạp - Kết hợp Subquery trong các mệnh đề FROM, WHERE, JOIN - Một số trường hợp cần sử dụng Subquery trong SQL và nhận biết khi cần sử dụng subquery. 2. Truy Vấn Cơ Sở Dữ Liệu Nâng Cao: View - Sử dụng View để tạo và quản lý các truy vấn tùy chỉnh 3. Giới Thiệu Về Metabase - Giới thiệu Metabase làm công cụ để phân tích cơ sở dữ liệu 4. Truy Vấn Cơ Sở Dữ Liệu Nâng Cao: Stored Procedure - Giới thiệu về Stored Procedure và cách sử dụng 5. Dạng truy vấn SQL nâng cao: Pivot Table, Union, Cross Join - Sử dụng Pivot Table để biến đổi dữ liệu với mệnh để `CASE` - Sử dụng cụm lệnh `Over Clause` dùng để truy vấn dữ liệu trên mỗi dòng - Sử dụng Union và Cross Join để kết hợp dữ liệu từ nhiều bảng theo chiều dọc - Một số truy vấn nâng cao khác 6. Công cụ `Metabase` để phân tích cơ sở dữ liệu trực quan - Hướng dẫn cài đặt và kết nối đến CSDL - Hướng dẫn sơ bộ về biểu đồ - Tạo biểu đồ đơn giản với `metabase` **Buổi Học 14: Transaction-SQL, Tối Ưu Cơ Sở Dữ Liệu và Kết nối CSDL đến Python** 1. Khái niệm về Transaction trong SQL - Khái niệm về phiên trong thực tế - Lệnh commit và lệnh rollback trong SQL 2. Tối Ưu Cơ Sở Dữ Liệu Cơ Bản - Hiểu về tối ưu hóa cơ sở dữ liệu bằng cách sử dụng các thành phần: index, partition, và materialized view - Tối ưu truy vấn thông qua việc select và sử dụng subquery 3. Kết Nối Python Với SQL - Sử dụng Python để tạo kết nối với cơ sở dữ liệu SQL # Phần 4: Xây dựng các ứng dụng thực tế với công cụ phân tích dữ liệu Metabase và Python Flask **Buổi Học 15: Giới Thiệu Về Metabase Để Phân Tích Cơ Sở Dữ Liệu** 1. Giới Thiệu Về Metabase - Giới thiệu Metabase làm công cụ để phân tích cơ sở dữ liệu - Cách cài đặt và cấu hình Metabase - Tạo báo cáo và trực quan hóa dữ liệu qua dashboard - Khái niệm về biểu đồ và các trục của biểu đồ - Tạo các dạng biểu đồ thông qua `Query` - Sử dụng biểu đồ phù hợp và tư duy của ngành `Data science` với bài toán thực tế **Buổi Học 16: Flask và Các Khái Niệm Về API** 1. Flask: Cơ Bản - Giới thiệu về Flask và micro-framework - Tạo và chạy ứng dụng Flask đơn giản 2. Khái Niệm Về Request và Response - Request methods: GET, POST, PUT, DELETE - Xử lý request và tạo response 3. JSON và API - Định dạng dữ liệu JSON - Tạo API đơn giản với Flask - Xây dựng ứng dụng thực tế với Python và CSDL **Buổi Học 17: Nhắc Lại Kiến Thức HTML/CSS và Tổng Kết** 1. Nhắc Lại Kiến Thức HTML/CSS - Đánh giá lại kiến thức về HTML và CSS để tạo giao diện cho ứng dụng - Sử dụng Javascript để điều khiển website - Lấy dữ liệu từ API để làm việc và xuất ra dạng HTML, tạo thành sản phẩm hoàn chỉnh. 2. Tổng Kết Khoá Học - Nhận xét và tổng hợp kiến thức đã học trong khóa học - Phân chia hướng đi tiếp theo và tài liệu tham khảo