Các môn học ngành Computing tại trường CCDS, Đại học NTU
Chương trình Cử nhân Tin học (Danh dự) ngành Khoa học Máy tính (BCG CSC) tại Đại học Công nghệ Nanyang (NTU)
Tác giả bài viết là Hoàng Phạm Việt Quang, cựu học sinh Hexagon đã đạt điểm AAAA Cambridge A level và năm nay Quang đạt Dean's list NTU 2025. Chúc mừng các em Đinh Quang Anh, Tống Khánh Vân, Nguyễn Phương Thùy (cựu học sinh đạt AAAA Cambridge A level) cũng lọt danh sách Dean's list năm nay tại NTU.
Trường Khoa học Máy tính và Dữ liệu (CCDS) là một trường thành viên của Đại học NTU. Tại CCDS, chương trình học trong hai năm đầu tập trung vào xây dựng các kỹ năng nền tảng về tin học, toán học, lập trình và các lĩnh vực liên ngành, bao gồm các khóa học giáo dục tổng quát và phát triển chuyên môn.
Thông tin dưới đây dựa trên cấu trúc chương trình học cho niên khóa AY2025/26 và các khóa sau.
Sinh viên thường học từ 18–24 Đơn vị Học trình (AUs) mỗi học kỳ, và một số khóa học có điều kiện tiên quyết hoặc đồng hành.
Phân loại khóa học
- Core: Các khóa học bắt buộc về tin học hoặc chuyên ngành.
- C-Core: Các khóa học giáo dục tổng quát của trường.
- Professional Series: Các khóa học về kỹ năng giao tiếp và nghề nghiệp.
Năm 2 Học kỳ 1 (Tổng: 21 AUs)
| Course Code | Course Title | AUs | Type |
|---|---|---|---|
| SC2001 | Algorithm Design & Analysis | 3 | Core |
| SC2005 | Operating Systems | 3 | Core |
| SC2203 | Automata. Computability and Complexity | 3 | Core |
| SC2006 | Software Engineering | 3 | Core |
| SC2008 | Computer Network | 3 | Core |
| CC0007 | Science & Technology for Humanity | 3 | C-Core |
| CSL Part 1 | Communication & Social Learning (Part 1) | 3 | CSL |
Ghi chú
- SC2001: Yêu cầu SC1007 và MH1812.
- SC2005: Yêu cầu SC1006 và SC1007.
- SC2203: Yêu cầu SC2001 (đồng hành).
- SC2006: Yêu cầu SC2002 (đồng hành).
- SC2008: Yêu cầu SC2000 và SC1004.
- CC0007: Không có điều kiện tiên quyết.
- CSL Part 1: Tiếp tục ở Học kỳ 2.
Tóm tắt Khóa học và Giáo trình
SC2001: Algorithm Design & Analysis
Tìm hiểu các thuật toán nâng cao, phân tích độ phức tạp và kỹ thuật như chia để trị và lập trình động.
Giáo trình:
``Introduction to Algorithms'' bởi Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, và Clifford Stein.
Nội dung:
Bắt đầu với các thuật toán sorting như một nền tảng vững chắc cho algorithm design và complexity analysis. Sau đó những thuật đoán đồ thị (Dijkstra, Kruskal, Union-Find) được giải thích. Sau đó, những kĩ thuật phân tích thuật toán căn bản (asymptotic analysis) được giới thiệu. Cuối cùng Dynamic Programming, String Matching và NP lần lượt được giới thiệu.
Assessment:
Bao gồm 3 Lab Assignment và Final Exam. Lab Assignment yêu cầu implement algorithm và phân tích complexity của chúng.
Đánh giá chung:
Một môn khá quan trọng, là nền tảng cho nhiều môn nâng cao hơn và quan trọng hơn là giúp xây dựng cách tiếp cận một vấn đề trong Computer Science.
SC2005: Operating Systems
Tìm hiểu các khái niệm hệ điều hành như tiến trình, quản lý bộ nhớ và hệ thống tệp.
Giáo trình:
``Operating System Concepts'' bởi Abraham Silberschatz, Peter B. Galvin, và Greg Gagne.
Nội dung:
Khoá học xây dựng trên môn Computer Systems and Architecture, sử dụng kiến thức về cách vận hành và tiềm năng của phần cứng để xây dựng một lớp trừu tương hoá bằng phần mềm cho người dùng tương tác dễ dàng hơn. Nội dung đi từ process và thread, đề cập đến các vấn đề cốt lõi như synchronization và scheduling. Sau đó Memory system được giới thiệu, với khái niệm memory allocation và virtualization. Cuối cùng cách mà file system được represent và implement và I/O interface được quản lý được giới thiệu.
Assessment:
Bao gồm 4 Lab, Lab Quiz và Concept/Algorithm Quiz. Lab sẽ đào sâu vào những kiến thức đã dạy, và cho thấy một cái nhìn cụ thể hơn về cách những khái niệm đã dạy được implement trên thực tế. Cứ 2 Lab lại có Lab Quiz hỏi về những chi tiết ở trong Lab. Cuối cùng có Concept/Algorithm Quiz tương đối khó, đòi hỏi phải nắm thật chắc kiến thức.
Đánh giá chung:
Giống với Algorithm Design & Analysis và Database, đây là một trong những môn học quan trọng nhất trong chương trình học. Với những khái niệm khá mới lạ, khoá học đòi hỏi học sinh phải biết cách tạo ra một cái nhìn mới về hệ thống máy tính. Phần lớn những khái niệm trong OS được sử dụng để tạo ra và duy trì các hệ thống máy tính lớn trên thế giới.
Ghi chú:
Đã chuyển về kì 1 năm 2.
Nổi bật:
Một phương pháp quản lý bộ nhớ ảo (Virtual Memory) tên là Demand Paging đã truyền cảm hứng cho vLLM engine, được sử dụng rộng rải để serve LLM với throughput cao. Về cơ bản Memory được chia làm Page, và khi nào cần một Page nhất định hệ thống sẽ lookup Page Table trước, nếu đã có Page đó rồi thì sử dụng luôn. Nếu không hệ thống triển khai Page Replacement Algorithm để tìm Page để eject, nhường chỗ cho Page khác vào.
SC2203: Automata, Computability and Complexity
Giới thiệu lý thuyết ngôn ngữ hình thức, automata, tính toán và độ phức tạp tính toán (ví dụ: NP-completeness).
Giáo trình:
``Introduction to the Theory of Computation'' bởi Michael Sipser.
Ghi chú:
Chương trình mới
SC2006: Software Engineering
Bao gồm vòng đời phát triển phần mềm, phương pháp luận (ví dụ: Agile) và công cụ cho các dự án quy mô lớn.
Giáo trình: ``Software Engineering'' bởi Ian Sommerville.
Nội dung:
Khá rời rạc, được chia làm 2 phần không liên quan đến nhau lắm. Một phần là Lecture, Tutorial và Final Exam, tập trung chủ yếu vào các phương pháp planning trong Software Development, bao gồm các loại biểu đồ, các process được sử dụng khi develop software (Waterfall, Agile). Sau đó khoá học đề cập những Design Pattern nổi tiếng, mục đích để giải quyết các vấn đề trong System Design như coupling, scalability, maintainability. Khoá học cũng đề cập đến phương pháp test software.
Assessment:
Phần có giá trị nhất của khoá học là Lab Project, có một cho cả khoá. Học sinh phải làm việc theo nhóm để develop một software application, với đề bài không gập khuôn. Vì thế, học sinh được phép tự do nghĩ về đề tài mà họ muốn dùng software engineering để giải quyết. Final Exam đòi hỏi phải nghĩ về vấn đề một cách thực tế, trên khuôn mẫu là các process được dạy trong lecture.
Đánh giá chung:
Để có thể hoàn thành Project tốt, học sinh cần biết bố trí thời gian, và bắt tay vào implement system sớm hơn so với lịch trình đã định của khoá học. Việc thảo luận cũng rất quan trọng, vì trong quá trình thảo luận sẽ nhận ra những suy luận/kế hoạch lúc trước không hoàn toàn hợp lý và cần được cập nhật xuyên suốt cả kỳ. Để làm tốt Final Exam, cần hiểu rằng không có khuôn mẫu logic quá cụ thể, và các bài toán cần được tiếp cận với một góc nhìn thực tế.
Ghi chú:
Đã chuyển về kì 1 năm 2.
Nổi bật:
Quan trọng nhất cả kì phải kể đến Strategy Pattern, một Design Pattern tất yếu trong Software Engineering. Đề cập đến Pattern này ở đây có lẽ sẽ chưa thoả đáng do tính hữu ích của nó sẽ chỉ hiện rõ khi vấn đề tương ứng trong software architecture xuất hiện trong project thực tiễn. Tuy vậy, điều thú vị về Pattern này là nó dường như là một cách để thay thế polymorphism trong OOP, giảm decoupling và sử dụng dependency injection thay vì inheritance.
SC2008: Computer Network
Học về cấu trúc nhiều lớp của mạng máy tính và các giao thức để đảm bảo độ tin cậy và hiệu quả.
Giáo trình:
``Computer Networking: A Top-Down Approach'' bởi James F. Kurose và Keith W. Ross.
Nội dung:
Nếu Operating System dạy cách quản lý resource trong một máy tính riêng lẻ, thì Computer Network dạy cách các máy tính giao tiếp với nhau. Vì Computer Network được cấu trúc bằng những lớp trừu tượng chồng lên nhau (abstraction layer), khoá học giới thiệu chúng lần lượt từ dưới lên (bottom-up approach), với các giao thức (protocol) đi cùng. Tóm gọn lại, chúng bao gồm Physical Layer (đường dây mạng), Data Link Layer (quản lý 1 link) Network Layer (quản lý mạng lưới), Transport Layer (trừu tượng hoá kết nối giữa 2 thiết bị), Application Layer (cho người dùng).
Assessment:
Mặc dù môn học này đáng lẽ ra rất phức tạp về mặt bản chất, assessment lại khá dễ. Bao gồm 4 Lab, hơi thiếu đồng điệu với lecture và 1 Final Exam, với format không thay đổi nhiều qua các năm.
Đánh giá chung:
Có lẽ là một trong những môn khó hiểu nhất, nhưng không phải bởi vì topic khó, mà bởi vì nội dung của ngành Networking tương đối rời rạc. Mặc dù Internet là một trong những phát minh quan trọng nhất trong lịch sử của Computer Science và có lẽ là nhân loại thời đại mới, dường như tầm quan trọng của chúng không còn được nhấn mạnh trong chương trình CS ngày nay. Để học tốt, đọc sách bổ sung là một cách hiệu quả không ngờ.
Nổi bật:
Mặc dù chỉ được giới thiệu sơ qua, thuật toán kiểm soát lỗi Jacobson trong quá trình truyền dữ liệu trên Transport Layer, khi sử dụng giao thức TCP, dựa trên một khái niệm có tên exponentially weighted average.
Đáng chú ý là khái niệm này cũng được sử dụng trong những lĩnh vực khác trong Computer Science, ví dụ như dùng để implement momentum và adaptive learning rate trong thuật toán tối ưu hoá Adam.
CC0007: Science & Technology for Humanity
Tìm hiểu tác động xã hội của khoa học và công nghệ, nhấn mạnh các cân nhắc đạo đức.
Giáo trình:
Không có giáo trình tiêu chuẩn; tài liệu bao gồm bài báo và nghiên cứu tình huống.
Nội dung:
Có thể thay đổi theo từng kì, nhưng mục đích là để cho những người học ngành Humanities biết được một số vấn đề trong STEM và để người trong ngành STEM biết được societal impact của các STEM topic. Cấu trúc tương tự CC0006
Assessment:
Giống CC0006, ngoại trừ việc không có Quiz.
Đánh giá chung:
Như những môn ICC khác, khoá này đòi hỏi am hiểu về Humanities topics, bởi vì khoá học nhấn mạnh vào societal impact của Science and Technology thay vì đào sâu vào những khái niệm trong STEM.
CSL Part 1: Communication & Social Learning (Part 1)
Phát triển kỹ năng làm việc nhóm, giao tiếp và học tập xã hội; tiếp tục ở Học kỳ 2.
Giáo trình:
Không có giáo trình tiêu chuẩn; tài liệu do giảng viên cung cấp.
Ghi chú: Chương trình mới
SC2000: Probability & Statistics for Computing
Giới thiệu lý thuyết xác suất, phương pháp thống kê và ứng dụng trong tin học (ví dụ: học máy).
Giáo trình:
``Probability and Statistics for Computer Scientists'' bởi Michael Baron.
Nội dung:
Khoá học đi từ descriptive statistics, bao gồm những phương pháp summarize data. Sau đó, kiến thức cơ bản về probability được giới thiệu, bao gồm axiom of probability, conditional probability, etc. Kết thức nửa đầu khoá học với random variable và các distribution thường thấy. Nửa sau khoá học tập trung tìm hiểu inferential statistics, bao gồm sampling distribution (CLT), point/interval estimation, hypothesis testing.
Assessment:
Không có Final Exam, chỉ có 2 Quiz kiểm tra về hai nửa khoá học.
Đánh giá chung:
Sử dụng giáo trình thường thấy cho undergraduate Probability & Statistics, nhưng không đào sâu. Khoá học không đề cập đến cách Probability & Statistics được sử dụng trong Machine Learning. Những kiến thức được dạy không đủ để học cao lên những môn Machine Learning.
Ghi chú:
Đã chuyển về kì 2 năm 1.
Nổi bật:
Để kể về những kiến thức mà khoá không đề cập nhưng sẽ có ích sau này, bao gồm có Multivariate Distribution/Model, Moment Generation Function, Maximum Likelihood Estimation, Analysis of Variance, Regression.
SC2002: Object Oriented Design & Programming
Tập trung vào lập trình hướng đối tượng nâng cao, mẫu thiết kế và nguyên tắc phát triển phần mềm bằng C++ hoặc Java.
Giáo trình:
``Design Patterns: Elements of Reusable Object-Oriented Software'' bởi Erich Gamma và cộng sự (bổ sung).
Nội dung:
Được chia làm 2 nửa. Nửa đầu sử dụng Java để giới thiệu những construct cơ bản của Object Oriented Programming như abstraction, encapsulation, inheritance và polymorphism. Nửa sau giới thiệu cách OOP được implement trong C++ và giới thiệu Object Oriented Design Principle, bao gồm SOLID principle, UML class diagram, etc.
Assessment:
Bao gồm 2 Quiz, Lab Assignment. Lab Assignment yêu cầu làm việc nhóm để tạo ra một chương trình quản lý và tương tác với dữ liệu trong hoàn cảnh thực tế (e.g. bệnh viện hoặc cửa hàng) theo nguyên tắc OODP. Quiz 1 thi trên giấy, Quiz 2 thì trên máy tính lab.
Đánh giá chung:
Nội dung khoá khá dài, nhiều khái niệm trừu tượng và hơi khô khan, đôi lúc có thể khó nhận ra khi nào có thể áp dụng lên thực tế. Lab Project là phần nặng nhất, đòi hỏi lượng lớn thời gian so với những môn còn lại.
Ghi chú:
Đã chuyển về kì 2 năm 1.
Năm 2 Học kỳ 2 (Tổng: 22 AUs)
| Course Code | Course Title | AUs | Type |
|---|---|---|---|
| SC2207 | Introduction to Databases | 3 | Core |
| CC0006 | Sustainability: Society, Economy & Environment | 3 | C-Core |
| SC3xxx/SC4xxx | Major Prescribe Elective (Choose within SC3xxx/SC4xxx) | 3 | MPE |
| SC3xxx/SC4xxx | Major Prescribe Elective (Choose within SC3xxx/SC4xxx) | 3 | MPE |
| Broadening and Deepening Elective | 3 | BDE | |
| CSL Part 2 | Communication & Social Learning (Part 2) | 3 | CSL |
Ghi chú
- SC2207: Yêu cầu SC2001.
- SC3xxx/SC4xxx: Elective (tự chọn nâng cao). SC3000 Artificial Intelligence là một ví dụ
- Broadening and Deepening Elective (tự chọn không chuyên ngành): Là cơ hội để học sinh tìm hiểu những ngành khác.
- CC0006: Không có điều kiện tiên quyết.
- CSL Part 2: Tiếp tục từ Học kỳ 1.
Tóm tắt Khóa học và Giáo trình
SC2207: Introduction to Database
Dạy thiết kế cơ sở dữ liệu quan hệ, SQL và hệ thống quản lý cơ sở dữ liệu.
Giáo trình:
``Database Systems: The Complete Book'' bởi Hector Garcia-Molina, Jeffrey D. Ullman, và Jennifer Widom.
Nội dung:
Cơ sở dữ liệu là một khái niệm khá xa lạ với học sinh tại thời điểm bắt đầu học môn học này. Khoá học bắt đầu với khái niệm relational database với ER diagram, functional dependencies, anomalies. Sau đó một khái niệm quan trọng trong database: Normal Form, được giới thiệu, và được sử dụng như một tiêu chuẩn khi xây dựng relational database tốt. Nửa sau của khoá học tập trung vào SQL, ngôn ngữ dùng để query relational database.
Assessment:
Bao gồm 1 Lab được chia thành nhiều Assignment xuyên suốt, đi từ xây dựng mô hình relational trừu tượng đến schema design và cuối cùng là tạo dựng SQL database và kiểm tra kỹ năng SQL query. Ngoài ra còn có 1 Mid-term Quiz, với thời gian tương đối giới hạn và 1 Final Exam tương đối khó.
Đánh giá chung:
Một trong những môn có Final Exam khó nhất trong kì này, khó nhất trong Final Exam có lẽ là những SQL query tương đối phức tạp. Nửa đầu của môn học khá trừu tượng, còn có thể coi là theoretical computer science. Nửa sau khá giống toán tư duy, và kỹ năng sử dụng SQL thường được so sánh ngang hàng với coding interview.
CC0006: Sustainability: Society, Economy & Environment
Xem xét các vấn đề bền vững, tích hợp các góc nhìn xã hội, kinh tế và môi trường.
Goáo trình:
Không có giáo trình tiêu chuẩn; tài liệu đọc do giảng viên cung cấp.
Nội dung:
Bao gồm online recorded lecture và chiếm nhiều thời gian hơn là những tiết Tutorial khá dài. Mỗi tiết học sinh phải tham gia những hoạt động và thảo luận về nhiều khía cạnh của Sustainability.
Assessment:
Bao gồm 2 project nhóm, 1 giữa kì (proposal) và một 1 cuối kì (presentation). Ngoài ra còn 1 Quiz closed-book thi trên máy tính.
Đánh giá chung:
Khoá học đòi hỏi góc nhìn từ những ngành Humanities. Những người học tốt môn này thường tích tham gia bàn luận tutorial và phải am hiểu về những vấn đề môi trường và xã hội.
CSL Part 2: Communication & Social Learning (Part 2)
Tiếp tục từ Phần 1, nhấn mạnh các dự án hợp tác và kỹ năng giao tiếp.
Giáo trình:
Không có giáo trình tiêu chuẩn; tài liệu do giảng viên cung cấp.
Ghi chú:
Chương trình mới
SC3000: Artificial Intelligence
Sự tiếp xúc đầu tiên với Artificial Intelligence dưới góc nhìn của Reinforcement Learning và Symbolic Reasoning.
Giáo trình:
(Kinh điển) Sutton & Barto's Reinforcement Learning: An Introduction hoặc series bài giảng của David Silver từ Google Deepmind.
Nội dung:
Đặc biệt, nửa đầu dạy Reinforcement Learning, một trường phái trong AI để giải các bài toán có sự tồn tại của agent và environment. Từ những định nghĩa căn bản nhất của Markov Decision Process cùng với phương pháp value iteration và policy iteration, cho tới thực tế transition probability không được cho trước với những phương pháp model-free như Monte-Carlo và Temporal Difference. Cuối nửa đầu là lúc Game Theory được giới thiệu qua, với định nghĩa của Nash equilibrium. Nửa sau, có thể nói là kém đặc sắc hơn, xây dựng trên Set Theory để tạo ra một hệ thống suy luận kém linh động hơn và không sử dụng cái nhìn xác suất.
Assessment:
Bao gồm 2 Assignment, yêu cầu sử dụng những model đã dạy để hoàn thành AI task. Final Exam có format khá ổn định, nhưng không trừ được khả năng sẽ kiểm tra những kiến thức chưa được dạy.
Đánh giá chung:
Một khoá rất đáng học, vì Reinforcement Learning trong nửa đầu là một trong những đề tài hay nhất trong Artificial Intelligence.
Ghi chú:
Một gợi ý cho MPE module. Nội dung có lẽ đã thay đổi để thêm các phương pháp Policy Gradient, sử dụng Machine Learning để model và update policy.
Nổi bật:
Lại một lần nữa nhắc đến khái niệm moving average , đã được sử dụng trong kỹ thuật bootstrapping hay Temporal Difference, để loại bỏ sự cần thiết của việc đợi cho đến khi hết một chu kỳ rồi mới approximate được value function. Thay vào đó, mỗi timestep update value function ngay lập tức, giúp cho việc học trở nên nhanh hơn.
Ghi chú
Các khóa học này cung cấp nền tảng vững chắc về lập trình, thuật toán, cơ bản phần cứng và kỹ năng mềm. Sinh viên có thể linh hoạt chọn các môn tự chọn ở các học kỳ sau, nhưng Năm 1--2 chủ yếu là các môn cốt lõi bắt buộc. Để biết thông tin cập nhật nhất hoặc các biến thể (ví dụ: cho chương trình kép hoặc chương trình học bổng), vui lòng tham khảo trang web chính thức của Trường Cao đẳng Khoa học Máy tính và Dữ liệu NTU.