--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

PPNCKH (2) - Nghiên cứu khoa học

Bài trước: PPNCKH (1) - Một số khái niệm
-----
2. Nghiên cứu khoa học


Ở bài học trước, bạn đã biết được Khoa học là một hệ thống tri thức có cấu trúc; mục tiêu của khoa học là khám phá, giải thích và dự báo các hiện tượng trong tự nhiên, xã hội, hệ thống trừu tượng, hệ thống nhân tạo.

Dựa trên đối tượng nghiên cứu, Khoa học được chia thành nhiều nhóm ngành. Trong mỗi nhóm ngành lại được chia thành các ngành khác nhau.

Chúng ta quan tâm tới 2 ngành là Khoa học máy tính và CNTT.

Trong mỗi ngành lại được chia thành các nhánh nghiên cứu cụ thể.

Ranh giới giữa Khoa học máy tính và CNTT hiện nay ngày càng mờ nhạt. Một kỹ sư CNTT giỏi vẫn cần tư duy thuật toán của một chuyên gia Khoa học máy tính, và một chuyên gia Khoa học máy tính cũng phải biết hiện thực hóa mô hình thành công nghệ thực tế.

Do vậy, dù theo Khoa học máy tính hay CNTT, có được kiến thức và kỹ năng nghiên cứu khoa học cũng là một lợi thế cho bạn.

Trong phần này, chúng ta sẽ cùng tìm hiểu tổng quan về nghiên cứu khoa học.

2.1 Nghiên cứu khoa học là gì?

Nghiên cứu khoa học (Scientific Research - NCKH) là một quá trình hoạt động tri thức có hệ thống, khách quan và sáng tạo, sử dụng các phương pháp luận chuẩn mực nhằm khám phá các quy luật của tự nhiên, xã hội, cũng như trong cấu trúc của các hệ thống trừu tượng và nhân tạo, nhằm tìm ra tri thức mới, hoặc ứng dụng tri thức đã có để giải quyết các bài toán thực tiễn đặt ra.

NCKH trong ngành KHMT và CNTT là quá trình sáng tạo, khám phá và giải quyết vấn đề dựa trên phương pháp luận chuẩn mực, tập trung vào thế giới nhân tạo và các hệ thống trừu tượng (như thuật toán, mô hình dữ liệu, kiến trúc phần mềm và hệ thống mạng).

NCKH thường gồm các hoạt động cốt lõi sau:

- Phát hiện và định nghĩa vấn đề

- Đề xuất giải pháp mới

- Thực nghiệm và kiểm chứng

Nếu học tập là quá trình tiếp thu tri thức có sẵn, thì NCKH là quá trình tạo ra hoặc mở rộng tri thức mới.

2.2 Phương pháp luận là gì?

Trong NCKH, quá trình sáng tạo, khám phá và giải quyết vấn đề phải dựa trên phương pháp luận chuẩn mực.

Phương pháp luận (Methodology) là hệ thống các lý thuyết, nguyên tắc và quan điểm định hướng việc lựa chọn, kết hợp các phương pháp cụ thể để nhận thức và giải quyết vấn đề trong NCKH.

Để dễ hiểu, cần phân biệt hai khái niệm dễ bị nhầm lẫn:

- Phương pháp (Method): Là cách thức, công cụ cụ thể để thực hiện công việc. Ví dụ: Thuật toán vét cạn, bảng hỏi khảo sát, mô hình CNN để xử lý ảnh. Phương pháp trả lời câu hỏi: Làm như thế nào?

- Phương pháp luận (Methodology): Là hệ thống lý luận định hướng việc lựa chọn và kết hợp các phương pháp. Phương pháp luận trả lời câu hỏi: Tại sao lại làm như vậy? Dựa trên cơ sở lý luận nào? Và dùng quy trình nào để chứng minh kết quả đáng tin cậy?

Về bản chất, mọi nghiên cứu khoa học đều thuộc một trong ba hướng tiếp cận phương pháp luận sau:

- Định lượng (Quantitative): Tập trung đo lường bằng số liệu, thống kê và bộ chuẩn đánh giá (benchmark). Ví dụ: Đo thời gian thực thi, độ chính xác, dung lượng bộ nhớ

- Định tính (Qualitative): Tập trung vào lập luận logic, mô hình hóa trừu tượng, chứng minh toán học hoặc phân tích bản chất vấn đề. Ví dụ: Chứng minh tính đúng đắn của thuật toán, phân tích cấu trúc hệ thống.

- Kết hợp (Mixed Methods): Kết hợp cả định tính và định lượng. Ví dụ: Dùng tư duy logic để thiết kế thuật toán/kiến trúc, sau đó dùng thực nghiệm số liệu để chứng minh hiệu quả.

Trong KHMT và CNTT, ba hướng trên thường được thể hiện qua ba hình thức kỹ thuật sau:

- Phương pháp luận thực nghiệm (thuộc hướng Định lượng)

- Phương pháp luận mô hình hóa / chứng minh hình thức (thuộc hướng Định tính)

- Phương pháp luận thiết kế hệ thống (Design Science Research Methodology – DSRM) (kết hợp giữa Định tính (khi thiết kế kiến trúc) và Định lượng (khi đo lường hiệu năng))

Chúng ta cùng xem xét một ví dụ cụ thể.

Bài toán: Tìm kiếm một từ khóa trong kho dữ liệu khổng lồ (giống như chức năng tìm kiếm của Google hoặc tra cứu từ điển).

1. Phương pháp: Làm bằng cách nào?

Phương pháp là công cụ và cách làm cụ thể mà bạn sử dụng để giải quyết bài toán.

Ví dụ: bạn có thể chọn một trong các phương pháp sau:

- Thuật toán tìm kiếm nhị phân (Binary Search)

- Cấu trúc dữ liệu Cây tiền tố (Trie)

- Bảng băm (Hash Table)

2. Phương pháp luận: Tại sao lại làm như vậy và chứng minh thế nào?

Phương pháp luận là toàn bộ quá trình tư duy và kiểm chứng khoa học để đảm bảo việc lựa chọn phương pháp là có cơ sở và kết quả đáng tin cậy.

Trước khi lập trình - Lý do chọn phương pháp

Ví dụ: Tại sao lại chọn Trie thay vì tìm kiếm tuần tự?

Bạn phân tích dựa trên Lý thuyết độ phức tạp tính toán:

- Tìm kiếm tuần tự có độ phức tạp O(N x k)

- Cây Trie có độ phức tạp O(k)

Từ đó đưa ra lý do khoa học: Khi dữ liệu lớn, Trie hiệu quả hơn rõ rệt.

Sau khi lập trình - Cách chứng minh kết quả đáng tin cậy

Bạn không thể chỉ chạy thử vài lần rồi kết luận “nó chạy nhanh”. Thay vào đó, bạn phải thực hiện quy trình thực nghiệm chuẩn:

- Tạo nhiều tập dữ liệu với quy mô khác nhau (ví dụ: 1.000 – 10.000 – 100.000 – 1.000.000 – 10.000.000 từ khóa)

- Chạy thử mỗi tập dữ liệu nhiều lần (ví dụ 30–50 lần) rồi lấy giá trị trung bình để giảm sai số ngẫu nhiên

- Đo các chỉ số: thời gian thực thi, bộ nhớ tiêu thụ

- So sánh với các phương pháp đã có sẵn như Linear Search, Binary Search, Hash Table (còn gọi là baseline)

- Vẽ biểu đồ so sánh để chứng minh rõ ràng sự vượt trội

Đây chính là cách phương pháp luận giúp đảm bảo kết quả nghiên cứu có cơ sở khoa học, không phải do may mắn.

2.3 Xem và đọc thêm

Sử dụng các từ khóa sau, tìm kiếm trên Google, Youtube, Chatbot để xem và đọc thêm: Trong NCKH phương pháp là gì? Phương pháp luận là gì? Định tính là gì? Định lượng là gì? 

2.4 Bài tập và Câu hỏi

Bài tập

Bài tập 1: Phân biệt Phương pháp và Phương pháp luận trong một bài toán thực tế.

Tình huống: Một nhóm sinh viên đang làm đề tài cải thiện tốc độ nhận diện biển số xe trong hệ thống camera giao thông đô thị. Khi được hỏi về phương pháp, nhóm trả lời: "Nhóm em dùng mô hình YOLO v8 để phát hiện biển số, sau đó dùng thuật toán OCR để đọc ký tự, và nhóm dùng phương pháp định lượng để đo độ chính xác."

a) Phân tích xem câu trả lời của nhóm sinh viên trên đã chính xác và đủ ý chưa? Hãy chỉ ra đâu là Phương pháp (Method) và đâu là sự nhầm lẫn về khái niệm Phương pháp luận (Methodology) trong câu trả lời đó.

b) Nếu bạn là giảng viên hướng dẫn, hãy viết lại phần giải thích định hướng phương pháp luận (gồm lý do chọn phương pháp trước khi lập trình và cách kiểm chứng sau khi lập trình) theo đúng chuẩn cho đề tài nhận diện biển số xe nói trên.

Bài tập 2: Thiết kế khung Phương pháp luận cho một bài toán CNTT cụ thể.

Tình huống: Giả sử bạn đang thực hiện một đề tài nghiên cứu tối ưu hóa hệ thống gọi đồ ăn trực tuyến (Food Delivery System) nhằm giảm độ trễ (latency) khi có hàng nghìn người đặt món cùng một lúc vào giờ cao điểm.

Yêu cầu: Dựa vào nội dung bài học, hãy thiết kế một khung trình bày hoàn chỉnh cho đề tài của bạn gồm 3 ý chính sau:

- Xác định Phương pháp: Hãy đề xuất ít nhất 2 giải pháp công nghệ hoặc thuật toán khác nhau có thể chọn để giải quyết bài toán giảm độ trễ (Ví dụ: thay đổi kiến trúc, thuật toán cân bằng tải, hay cơ chế caching...).

- Lập luận trước khi lập trình (Phần Định tính): Chọn một phương pháp trong số đó và sử dụng tư duy lý luận/mô hình hóa để trả lời câu hỏi Tại sao lại chọn phương pháp này?

- Quy trình kiểm chứng sau khi lập trình (Phần Định lượng & Benchmark): Thiết kế cụ thể các bước thực nghiệm để chứng minh giải pháp của bạn thực sự hiệu quả hơn so với hệ thống cũ (baseline), bao gồm: quy mô tập dữ liệu/lượng request giả lập, số lần lặp lại để lấy trung bình, các chỉ số cần đo, và cách thức so sánh.

Câu hỏi

Câu 2a: Trong nghiên cứu khoa học ngành CNTT, phát biểu nào sau đây phân biệt chính xác nhất giữa Phương pháp (Method) và Phương pháp luận (Methodology)?

A. Phương pháp là hệ thống lý luận triết học vĩ mô, còn phương pháp luận là các đoạn mã chi tiết

B. Phương pháp trả lời câu hỏi "Làm như thế nào?" (chọn công cụ, thuật toán, cấu trúc dữ liệu cụ thể), còn phương pháp luận trả lời câu hỏi "Tại sao lại làm như vậy và dùng quy trình nào để chứng minh kết quả đáng tin cậy?"

C. Phương pháp và phương pháp luận là hai tên gọi khác nhau của cùng một khái niệm dùng trong việc viết báo cáo thực tập

D. Phương pháp chỉ dùng cho giai đoạn lý thuyết trên giấy, còn phương pháp luận chỉ dùng cho giai đoạn chạy thử nghiệm phần mềm

Câu 2b: Trong quy trình kiểm chứng kết quả của một đề tài nghiên cứu khoa học máy tính, Baseline được định nghĩa là gì?

A. Là tập dữ liệu mẫu chuẩn được công nhận toàn cầu để thử nghiệm mô hình

B. Là các phương pháp, thuật toán hoặc hệ thống đã có sẵn từ trước dùng làm mốc đối chứng để so sánh tính hiệu quả với giải pháp mới đề xuất

C. Là số lần lặp lại thí nghiệm (ví dụ 30-50 lần) nhằm loại bỏ sai số ngẫu nhiên

D. Là chỉ số đo lường tốc độ xử lý khung hình trên giây (FPS) của hệ thống

Câu 2c: Trong hướng tiếp cận phương pháp luận Định lượng (Quantitative), vai trò của Benchmark là gì?

A. Chứng minh tính đúng đắn của thuật toán thông qua hệ thống lập luận logic và mô hình hóa trừu tượng

B. Phân tích bản chất cấu trúc phần mềm trước khi tiến hành viết mã nguồn

C. Cung cấp tập dữ liệu chuẩn hoặc bộ chuẩn đánh giá khách quan để đo lường, so sánh hiệu năng (như thời gian thực thi, độ chính xác, dung lượng bộ nhớ)

D. Xây dựng biểu đồ kiến trúc hệ thống tổng thể theo mô hình DSRM

Câu 2d: Điểm khác biệt cơ bản nhất giữa quá trình học tập thông thường và nghiên cứu khoa học (NCKH) trong lĩnh vực KHMT và CNTT là gì?

A. Học tập là quá trình tiếp thu tri thức có sẵn, còn NCKH là quá trình tạo ra hoặc mở rộng tri thức mới dựa trên phương pháp luận chuẩn mực

B. Học tập chỉ áp dụng cho sinh viên năm nhất, còn NCKH chỉ dành cho giảng viên đại học

C. Học tập không yêu cầu viết báo cáo, còn NCKH bắt buộc phải lập trình trên phần cứng chuyên dụng

D. Học tập giải quyết các bài toán giả định đơn giản, còn NCKH tuyệt đối không được sử dụng lại các lý thuyết cũ

-----
Bài sau:

PPNCKH (1) - Một số khái niệm

1. Một số khái niệm

1.1 Khoa học là gì?

Khoa học (science) là một hệ thống tri thức có cấu trúc, được xây dựng dựa trên phương pháp luận chặt chẽ nhằm khám phá, giải thích và dự báo các hiện tượng trong thế giới tự nhiên, xã hội, cũng như trong cấu trúc của các hệ thống trừu tượng và nhân tạo.

Dựa trên đối tượng nghiên cứu, khoa học được chia thành các nhóm ngành khác nhau, ví dụ:

- Khoa học tự nhiên

- Khoa học xã hội và nhân văn

- Khoa học hình thức

- Khoa học kỹ thuật và công nghệ

Trong một nhóm ngành sẽ có nhiều ngành khoa học khác nhau. Ví dụ:

Nhóm ngành

Ngành

Khoa học tự nhiên

Vật lý học, Hóa học, Sinh học, Trái Đất học, Thiên văn học

Khoa học xã hội và nhân văn

Kinh tế học, Xã hội học, Tâm lý học, Lịch sử học, Triết học

Khoa học hình thức

Toán học, Logic học, Thống kê học, Khoa học máy tính (xét ở góc độ lý thuyết nền tảng)

Khoa học kỹ thuật và công nghệ

Kỹ thuật cơ khí và chế tạo, Kỹ thuật điện-điện tử và viễn thông, Kỹ thuật máy tính và Công nghệ thông tin

1.2 Khoa học máy tính là gì?

Khoa học máy tính (computer science) là ngành khoa học nghiên cứu có hệ thống về bản chất của thông tin, tính toán và hệ thống thuật toán, kết hợp giữa nền tảng lý thuyết của các hệ thống trừu tượng (toán học và logic) với phương pháp luận kỹ thuật nhằm thiết kế, xây dựng các hệ thống tính toán (phần cứng và phần mềm) trong thế giới nhân tạo.

Khoa học máy tính là ngành khoa học giao thoa giữa hai nhóm ngành là Khoa học hình thức (vì dùng toán học, logic, lý thuyết tính toán) và nhóm ngành Khoa học kỹ thuật và công nghệ (vì liên quan đến Thiết kế phần cứng, phần mềm, hệ thống nhân tạo).

Các nhánh nghiên cứu (phổ biến) của ngành Khoa học máy tính:

- Khoa học máy tính lý thuyết (Theoretical Computer Science)

- Trí tuệ nhân tạo và Học máy (Artificial Intelligence & Machine Learning - AI/ML)

- Hệ thống máy tính và Mạng (Computer Systems & Networks)

- Cơ sở dữ liệu và Khoa học dữ liệu (Databases & Data science) 

- Kỹ thuật phần mềm (Software Engineering)

- An toàn thông tin và An ninh mạng (Cybersecurity)

- Tương tác người - máy (Human-Computer Interaction)

- Đồ họa máy tính và Trực quan hóa (Computer Graphics & Visualization) 

1.3 Công nghệ thông tin là gì?

Nếu như Khoa học máy tính tập trung sâu vào lý thuyết, toán học, thuật toán và bản chất của tính toán, thì Công nghệ thông tin (CNTT) lại mang tính ứng dụng thực tiễn cao hơn.

CNTT nghiên cứu việc sử dụng, triển khai, quản trị và vận hành các hệ thống máy tính, phần mềm, mạng và dữ liệu, để giải quyết các bài toán kinh doanh, quản lý và đời sống của các tổ chức, doanh nghiệp.

Các nhánh nghiên cứu (phổ biến) của ngành CNTT:

- Kỹ thuật mạng và Quản trị hệ thống (Networking & System Administration)

- Điện toán đám mây và Hệ thống phân tán (Cloud Computing & Distributed Systems)

- An toàn thông tin và An ninh mạng (Information Security & Cybersecurity)

- Quản trị cơ sở dữ liệu và Dữ liệu doanh nghiệp (Database Management & Enterprise Data)

- Phát triển ứng dụng và Hệ thống thông tin doanh nghiệp (Application Development & Enterprise Information Systems)

- Công nghệ Web và Thương mại điện tử (Web Technologies & E-Commerce)

- Quản lý dự án CNTT và Dịch vụ công nghệ (IT Project Management & IT Service Management)

Tóm lại: Khoa học máy tính tập trung vào sáng tạo (ví dụ: viết thuật toán mới, thiết kế kiến trúc hệ thống, nghiên cứu AI cốt lõi); CNTT tập trung vào ứng dụng và quản trị (ví dụ: đưa các công nghệ có sẵn vào vận hành, thiết kế mạng lưới, bảo mật hệ thống, đảm bảo hạ tầng chạy ổn định)

1.4 Tin học là gì?

Tin học là ngành khoa học nghiên cứu các quá trình: thu thập, lưu trữ, xử lý, truyền tải và biến đổi thông tin một cách tự động bằng phương tiện điện tử, chủ yếu là máy tính điện tử.

Nếu Khoa học máy tính thiên về nghiên cứu về bản chất lý thuyết và CNTT thiên về vận hành hệ thống thực tế, thì Tin học là một khái niệm rộng hơn, mang tính chất nền tảng và phổ cập, bao trùm cả việc nghiên cứu lý thuyết lẫn ứng dụng công nghệ máy tính vào mọi mặt của đời sống xã hội.

Phạm vi của Tin học rất rộng, được chia từ cấp độ phổ thông đến học thuật chuyên sâu, cụ thể:

- Lý thuyết thông tin và xử lý dữ liệu

- Phần cứng và phần mềm

- Thuật toán và lập trình

- Ứng dụng tin học

Tóm lại, nếu lấy Tin học làm vòng trong đại diện cho toàn bộ lĩnh vực tính toán (computing), thì Khoa học máy tính là lõi lý thuyết, còn CNTT là vỏ ứng dụng. Xem hình minh họa:

Bảng sau, so sánh giữa Tin học, Khoa học máy tính và CNTT:

Tiêu chí

Tin học (Informatics)

Khoa học máy tính (Computer Science)

Công nghệ thông tin (Information Technology)

Bản chất

Khái niệm rộng, mang tính nền tảng và phổ cập (bao gồm cả phổ thông lẫn chuyên ngành)

Nghiên cứu chuyên sâu về lý thuyết, thuật toán, toán học và bản chất tính toán

Nghiên cứu ứng dụng, triển khai, quản trị và vận hành hệ thống kỹ thuật trong thực tế

Mức độ phổ biến

Thường dùng trong chương trình giáo dục phổ thông, các bộ môn cơ sở của trường đại học

Thường dùng trong các viện nghiên cứu, khoa chuyên sâu về thuật toán và AI

Thường dùng trong doanh nghiệp, các bộ môn ứng dụng quản trị hệ thống và mạng

1.5 Xem và đọc thêm

Sử dụng các từ khóa sau, tìm kiếm trên Google, Youtube, Chatbot để xem và đọc thêm: Khoa học, Khoa học máy tính, Công nghệ thông tin, Tin học.

1.6 Bài tập và câu hỏi

Bài tập

Bài tập 1.1: Nếu bạn là một người đang giảng dạy trong khoa Công nghệ thông tin ở một đại học Việt Nam, bạn hãy nhìn lại chương trình đào tạo xem đang được thiết kế theo hướng Công nghệ thông tin hay hướng Khoa học máy tính? Hay là pha trộn giữa 2 hướng này? Và nếu thiết kế theo hướng pha trộn giữa hai hướng thì có gì hay và có gì dở? Giải pháp nên là gì, có nên tách bạch 2 hướng này không? 

Bài tập 1.2: Giả thiết là: do việc định hướng và phân ngành không rõ ràng từ đầu, nên có hiện tượng có 3 đối tượng sinh viên trong một lớp ([1] học để qua môn - và không theo ngành CNTT sau khi tốt nghiệp; [2] Học để theo nghề như một kỹ sư CNTT; [3] Học để theo nghề như một chuyên gia về Khoa học máy tính). Vậy việc thiết kế chương trình nên như thế nào?

Câu hỏi

Câu 1a: Giả sử bạn là một sinh viên theo học CNTT, sau 1 năm đào tạo nền tảng, sinh viên nên chọn theo hướng nào? Phát biểu nào không hợp ý?

A. Kỹ năng số và Ứng dụng phổ thông

B. Kỹ sư CNTT

C. Chuyên gia Khoa học máy tính

D. Học để có cái bằng, rồi tính tiếp

Câu 1b: Lĩnh vực Khai thác dữ liệu (Data Mining) thuộc Ngành nghiên cứu nào?

A. Khoa học máy tính (Computer Science)

B. Kỹ thuật cơ khí (Mechanical Engineering)

C. Xã hội học (Sociology)

D. Ngôn ngữ học (Linguistics)

Câu 1c: Lĩnh vực Khai thác dữ liệu (Data Mining) thuộc nhánh nghiên cứu nào?

A. Cơ sở dữ liệu và Khoa học dữ liệu (Databases & Data science) 

B. Kỹ thuật phần mềm (Software Engineering)

C. An toàn thông tin và An ninh mạng (Cybersecurity)

D. Tương tác người - máy (Human-Computer Interaction)

-----
Bài sau:

Tin học thiếu nhi (4) - Quy tắc đánh dấu câu

Bài trước: Tin học thiếu nhi (3) - Gõ dấu tiếng Việt
-----

Bài 4. Quy tắc đánh dấu câu

Một số quy tắc đánh dấu câu:


Dấu câu và khoảng trắng

Đúng:

Em trồng cây xanh, không xả rác. 

Sai: 

Em trồng cây xanh , không xả rác . 




Ngoặc đơn và ngoặc kép

Đúng:

"Bạn Tèo (cạnh nhà tôi) học rất chăm chỉ." 

Sai: 

" Bạn Tèo ( cạnh nhà tôi ) học rất chăm chỉ. " 




Dấu hai chấm, dấu chấm phẩy, dấu chấm than và dấu hỏi

Đúng:

Bạn Tèo nói: 'Tôi thích đi chơi!'

Sai: 

Bạn Tèo nói : 'Tôi thích đi chơi !'



Gạch đầu dòng

Đúng:

- Nhập văn bản

- Gõ dấu tiếng Việt

Sai: 

-Nhập văn bản

-Gõ dấu tiếng Việt


Bài tập 1: Mở Notepad, nhập vào đoạn văn bản sau.


Bữa ăn “đặc biệt”

Tí đến nhà Tèo chơi đúng lúc gia đình Tèo chuẩn bị ăn tối. Thấy bàn ăn toàn món ngon, Tí liền khen:

- Ôi! Nhà bạn ăn tối hoành tráng thế?

Tèo mỉm cười tự hào (dù mặt hơi nghênh lên một chút) rồi đáp:

- Mẹ tôi bảo ăn uống là phải đủ chất. Hôm nay bữa ăn gồm có: thịt kho, cá chiên, rau xào và canh chua.

Tí tròn mắt hỏi:

- Thế mẹ bạn đâu rồi?

Tèo chép miệng trả lời:

- Mẹ tôi đi công tác từ ngày 12-8-2026 đến cuối tuần mới về.

Tí ngơ ngác:

- Mẹ vắng nhà mà ai nấu ăn "oách" thế này?

Tèo thì thầm vào tai Tí:

- Bố tôi đấy! Bố vừa làm xong hai việc:

- Đặt đồ ăn qua ứng dụng trên điện thoại

- Bày ra đĩa cho đẹp mắt

Tí té ngửa ra ghế!

-----
Bài sau:

Python (30) - Tổng kết giai đoạn 1

Bài trước: Python (29) - Dự án kết thúc giai đoạn 1 (3)
-----

28. Tổng kết giai đoạn 1

Vai trò của AI

Vậy là bạn đã hoàn thành được một chặng đường nhỏ đầu tiên của hành trình học Python. Một vài nhận xét, hy vọng có ích cho các bạn:

- Dù có trí tuệ nhân tạo (AI) hỗ trợ trong việc học và làm phần mềm, tuy nhiên, bạn vẫn phải là người sau cùng chịu trách nhiệm về những đoạn mã. Bạn phải đủ trình độ, đủ kiến thức để đánh giá giải pháp do AI tạo ra là ổn hay không?

- Làm sao để có đủ trình độ, đủ kiến thức để đánh giá AI? Không có con đường nào khác ngoài việc bạn phải tự tay làm, tự mình suy nghĩ, tự tìm hiểu xem đoạn mã đó làm gì? Kết quả chạy ra sao? Có rủi ro gì không?

- Vậy AI sẽ là công cụ đắc lực, giúp bạn học nhanh hơn chứ KHÔNG HỌC THAY và KHÔNG LÀM THAY bạn được

Định hướng việc học

Tạm chia xu hướng học của bạn theo 2 hướng:

- Hướng hàn lâm (khai phóng): tìm tòi những cái mới, giải pháp mới, cải tiến các thuật toán để nó chạy hiệu quả hơn, tốt hơn

- Hướng ứng dụng: dùng các công cụ, công nghệ, giải pháp đã có để tạo ra các ứng dụng, sản phẩm phần mềm, đáp ứng được nhu cầu xã hội

Mỗi bạn sẽ có thiên hướng khác nhau giữa Hàn lâm và Ứng dụng, hoặc pha trộn giữa 2 lựa chọn này. Bạn hãy nhờ AI phân tích thêm để biết nên theo hướng nào, cái được cái mất khi theo mỗi hướng

Với điều kiện tại Việt Nam hiện nay (2026), nếu bạn sống, học và làm việc tại Việt Nam, thì theo hướng Ứng dụng vẫn hợp lý hơn.

Định hướng việc làm theo hướng ứng dụng

Dù chọn Python hay một ngôn ngữ lập trình bất kỳ, luôn có một số hướng ứng dụng, bạn có thể thử sức:

- Web

- Mobile

- Game

- Học máy

- Phân tích dữ liệu

- …

Con đường theo học Python còn nhiều nội dung thú vị ở phía trước, mời bạn kiên trì bước tiếp 

-----

Python (29) - Dự án kết thúc giai đoạn 1 (3)

Bài trước: Python (28) - Dự án kết thúc giai đoạn 1 (2)
-----

- Trong hàm hien_thi_bang_diem(danh_sach_lop) ở trên, chúng ta chưa tính được ĐTB MÔN và XẾP LOẠI, nên đã tạm gán giá trị 5.0 và Trung bình.

- Chúng ta sẽ viết hàm để tính ĐTB MÔN

ĐTB MÔN được tính bằng công thức: 

ĐTB MÔN = (Tổng các điểm tx + gk * 2 + ck * 3) / (số cột điểm tx + 2 + 3)

- Viết hàm tinh_dtb_mon(diem_mon) và hàm xep_loai(dtb) ở phía trên của hàm hien_thi_bang_diem

    except FileNotFoundError:

        return[]


# hàm tính ĐTB MÔN

def tinh_dtb_mon(diem_mon)

    tx = diem_mon.get("tx", [])

    gk = diem_mon.get("gk", 0.0)

    ck = diem_mon.get("ck", 0.0)


    tong_diem = sum(tx) + (gk * 2) + (ck * 3)

    tong_he_so = len(tx) + 2 + 3


    if tong_he_so > 0:

        return round(tong_diem / tong_he_so, 2)

    return 0.0


# hàm xếp loại

def xep_loai(dtb):

    """Xếp loại học lực dựa trên điểm trung bình môn"""

    if dtb >= 8.0:

        return "Tốt"

    elif dtb >= 6.5:

        return "Khá"

    elif dtb >= 5.0:

        return "Đạt"

    else:

        return "Chưa đạt"


# hàm hiển thị danh sách và bảng điểm

def hien_thi_bang_diem(danh_sach_lop):

- Sửa lại hàm hien_thi_bang_diem(danh_sach_lop): thay thế các giá trị gán tạm (dtb = 5.0, xl = "Trung bình") bằng việc gọi 2 hàm vừa viết.

- Chạy lại chương trình, để xem ĐTB MÔN và Xếp loại của lớp đã được cập nhật.

Lập trình chức năng Thêm học sinh mới

Để thêm học sinh mới, bạn cần thực hiện các công việc sau:

- Nhập mã học sinh và họ tên từ bàn phím

- Kiểm tra xem mã học sinh đã tồn tại trong danh_sach_lop hay chưa

- Nếu chưa tồn tại, tạo cấu trúc Dictionary cho học sinh mới, với bộ điểm rỗng {“tx”: [], “gk”: 0.0, “ck”: 0.0} và gắn vào cuối danh_sach_lop

- Bạn mở tập tin main.py và viết hàm them_hoc_sinh(danh_sach_lop) ngay phía dưới hàm main()

# hàm thêm học sinh

def them_hoc_sinh(danh_sach_lop):

    """Thêm một học sinh mới vào danh sách lớp"""

    print("\n--- THÊM HỌC SINH MỚI ---")

    ma_hs = input("Nhập mã học sinh (ví dụ HS004): ").strip()


    if not ma_hs:

        print("Lỗi: Mã học sinh không được để trống!")

        return


    # Kiểm tra xem mã học sinh đã tồn tại chưa

    for hs in danh_sach_lop:

        if hs["ma_hs"].upper() == ma_hs.upper():

            print(f"Lỗi: Mã học sinh '{ma_hs}' đã tồn tại trong danh sách!")

            return


    ho_ten = input("Nhập họ và tên học sinh: ").strip()

    if not ho_ten:

        print("Lỗi: Họ tên không được để trống!")

        return

    

    # Tạo bản ghi học sinh mới

    hoc_sinh_moi = {

        "ma_hs": ma_hs.upper(),

        "ho_ten": ho_ten.title(),

        "diem": {}

    }


    danh_sach_lop.append(hoc_sinh_moi)

    print(f"-> Đã thêm học sinh '{ho_ten}' (Mã: {ma_hs.upper()}) vào danh sách!")

- Cập nhật hàm main(), để gọi chức năng 2:

...

 if lua_chon == "1":

            hien_thi_bang_diem(danh_sach_lop)

        elif lua_chon == "2":

            them_hoc_sinh(danh_sach_lop)

        elif lua_chon == "0":

...

Lập trình chức năng Nhập điểm môn học

Để lập trình chức năng Nhập điểm môn học, bạn cần thực hiện các việc sau:

- Bẫy lỗi nhập điểm (nhap_diem_hop_le): kiểm tra điểm nhập vào, đảm bảo điểm là số thực, nằm trong khoảng 0.0 đến 10.0

- Tìm học sinh theo mã học sinh: cho người dùng nhập mã học sinh, nếu không tìm thấy thì báo lỗi

- Chọn môn học: hiển thị các môn học hợp lệ (Toán, Ngữ văn, Tiếng Anh, KHTN, Lịch sử_Địa lý)

- Nhập điểm: nhập điểm thường xuyên (nếu nhập nhiều điểm, mỗi điểm cách nhau bằng dấu chấm phẩy, giữa kỳ và cuối kỳ

Viết hàm nhap_diem_hop_le()

- Viết hàm ngay sau hàm main()

- Sử dụng khối try…except để yêu cầu nhập lại nếu người dùng nhập chữ hoặc số không nằm trong khoảng [0.0 đến 10.0]

# hàm bẫy lỗi nhập điểm

def nhap_diem_hop_le(prompt):

    """Yêu cầu nhập điểm từ 0.0 đến 10.0, bắt lỗi ValueError nếu nhập sai"""

    while True:

        try:

            diem = float(input(prompt))

            if 0.0 <= diem <= 10.0:

                return diem

            print("Lỗi: Điểm phải nằm trong khoảng 0.0 > 10.0!")

        except ValueError:

            print("Lỗi: Giá trị phải là một số (ví dụ: 6.0)!")

Viết hàm nhap_diem_hoc_sinh()

- Viết hàm nhap_diem_hoc_sinh() ngay sau hàm nhap_diem_hop_le()

# Danh mục các môn học (không thay đổi)(kiểu Set)

MON_HOC = {"Toán", "Ngữ văn", "Tiếng Anh", "KHTN", "Lịch sử_Địa lý"}


# Hàm nhập điểm cho học sinh

def nhap_diem_hoc_sinh(danh_sach_lop):

    """Nhập các loại điểm cho một học sinh, dựa theo mã học sinh"""

    print("\n---NHẬP ĐIỂM MÔN HỌC---")

    ma_hs = input("Nhập mã học sinh cần nhập điểm: ").strip().upper()


    # Tìm học sinh trong danh sách

    hoc_sinh = None

    for hs in danh_sach_lop:

        if hs["ma_hs"].upper() == ma_hs:

            hoc_sinh = hs

            break


    if not hoc_sinh:

        print(f"Lỗi: Không tìm thấy học sinh có mã '{ma_hs}'!")

        return


    print(f"Đang nhập điểm cho học sinh: {hoc_sinh['ho_ten']} ({hoc_sinh['ma_hs']})")

    print(f"Danh sách môn học hợp lệ: {', '.join(MON_HOC)}")

    mon = input("Nhập tên môn học: ").strip()


    if mon not in MON_HOC:

        print("Lỗi: Tên môn học không tồn tại!")

        return


    #Nhập các điểm thường xuyên, cách nhau bởi dấu ;

    print("Nhập các điểm thường xuyên, cách nhau bởi dấu chấm phẩy (;):")

    tx_input = input("Điểm TX: ").strip()

    tx_list = []

    if tx_input:

        for x in tx_input.split(";"):

            try:

                val = float(x.strip())

                if 0.0 <= val <= 10.0:

                    tx_list.append(val)

                else:

                    print(f"Cảnh báo: Điểm '{x}' Không hợp lệ (phải từ 0-10), đã bỏ qua.")

            except ValueError:

                print(f"Cảnh báo: Giá trị '{x}' không phải là số, đã bỏ qua.")


        # Nhập điểm giữa kỳ và cuối kỳ

        gk = nhap_diem_hop_le("Nhập điểm Giữa kỳ: ")

        ck = nhap_diem_hop_le("Nhập điểm Cuối kỳ: ")


        #Cập nhật vào cấu trúc dữ liệu của học sinh

        hoc_sinh["diem"][mon] = {

            "tx": tx_list,

            "gk": gk,

            "ck": ck

        }

        print(f"-> Đã cập nhật điểm môn '{mon}' cho học sinh {hoc_sinh['ho_ten']} thành công!")

- Sửa lại hàm main(), để chạy chức năng nhập điểm:

…

 print("2. Thêm học sinh mới")

        print("3. Nhập điểm môn học")

        # sau này bạn sẽ thêm các chức năng

…

elif lua_chon == "2":

            them_hoc_sinh(danh_sach_lop)

        elif lua_chon == "3":

            nhap_diem_hoc_sinh(danh_sach_lop)

        elif lua_chon == "0":

…

Lập trình chức năng Lưu dữ liệu ra file CSV

- Nếu bạn để ý, ở đầu chương trình, ngay trong hàm main(), chúng ta đã đọc dữ liệu (danh sách và điểm) từ tập tin CSV lưu vào biến danh_sach_lop. Sau đó, chúng ta thực hiện một số thao tác trên danh sách lớp này. Tuy nhiên, danh_sach_lop là một biết đang nằm trên bộ nhớ RAM, nếu tắt máy các thông tin mà chúng ta vừa cập nhật sẽ bị xóa. 

- Để lưu lại lâu dài, các thông tin vừa xử lý, bạn cần ghi thông tin vào đĩa cứng

- Chúng ta sẽ thực hiện lưu dữ liệu ra tập tin CSV

- Chúng ta sẽ viết hàm luu_file_csv(danh_sach_lop) ngay sau hàm main()

# Hàm lưu dữ liệu ra file CSV

def luu_file_csv(danh_sach_lop):

    """Lưu danh sách học sinh và điểm số vào tập tin CSV"""

    try:

        with open(FILE_PATH, mode="w", newline="", encoding="utf-8") as f:

            writer = csv.writer(f)

            writer.writerow(["ma_hs", "ho_ten", "mon", "tx", "gk", "ck"])

            for hs in danh_sach_lop:

                if not hs["diem"]:

                    writer.writerow([hs["ma_hs"], hs["ho_ten"], "", "", "", ""])

                else:

                    for mon, d in hs["diem"].items():

                        tx_str = ";".join(map(str, d.get("tx", [])))

                        writer.writerow([

                            hs["ma_hs"],

                            hs["ho_ten"],

                            mon,

                            tx_str,

                            d.get("gk",""),

                            d.get("ck","")

                        ])

            print("-> Đã lưu dữ liệu thành công vào đĩa cứng!")

    except Exception as e:

        print(f"Lỗi khi lưu file {e}")

- Sửa lại hàm main(), để chạy chức năng nhập điểm:

…

  print("3. Nhập điểm môn học")

        print("4. Lưu dữ liệu ra file CSV")

        # sau này bạn sẽ thêm các chức năng

...

 elif lua_chon == "3":

            nhap_diem_hoc_sinh(danh_sach_lop)

        elif lua_chon == "4":

            luu_file_csv(danh_sach_lop)

        elif lua_chon == "0":

27.4 Bài tập và câu hỏi

Bài 27a. Dựa trên Dự án mẫu của bài học, bạn hãy tự làm lại toàn bộ dự án, đồng thời hãy tạo một tập tin (trong Microsoft Word, hoặc Google Docs) để ghi chép toàn bộ quá trình làm dự án của bạn. 

Mục đích của việc ghi chép:

- Làm bằng chứng, chứng minh rằng bạn đã tự làm lại dự án

- Qua quá trình ghi chép bạn sẽ trải nghiệm thực sự những khó khăn, những lỗi lập trình, những đoạn mã xử lý kỳ ảo

- Giải pháp AI có thể cung cấp cho bạn, tuy nhiên, làm việc thực sự thì mới thấm và hiểu được mã nguồn, và quy trình làm một dự án lập trình

- Ghi chép làm tài liệu để làm các dự án tiếp theo

- Ghi chép và tự làm nhiều thì quen tay, và lên trình

- Phát triển thêm các chức năng cho ứng dụng này

Bài tập 27b. Bạn có thể tự nghĩ ra, hoặc nhờ AI gợi ý một dự án. Hãy tự mình thực hiện dự án đó. 

Yêu cầu kết quả:

- Sổ tay ghi chép toàn bộ quá trình làm dự án

- Mã nguồn dự án

-----
Bài sau: Python (30) - Tổng kết giai đoạn 1