Hướng dẫn bắt đầu học KHMT¶
Đây là các giáo trình tự học mà bạn có thể đọc, bài viết dưới đây sẽ là hướng dẫn của cá nhân mình cách bắt đầu tự học Khoa học máy tính dựa trên TeachYourselfCS. TeachYourselfCS ngắn hơn so với OSSU với đọc nhiều hơn nên đây sẽ là giáo trình mình lựa chọn (Tùy thuộc vào cách học của bạn mà có thể OSSU sẽ tốt hơn hoặc bạn muốn học hơn).
- TeachYourselfCS
- ossu/computer-science
- How to ACTUALLY learn CS - Một bài viết chia sẻ trải nghiệm tự học của người này dựa trên các giáo trình trên.
Hướng dẫn TeachYourselfCS¶
CẬP NHẬT: Mình thử tìm hiểu thêm thì thấy có khá nhiều vấn đề trong cách định hướng nên quyết định làm thêm mục dưới. Gợi ý của TYCS khá cô đọng, có đôi lúc bị nâng cao quá và ở một số phần mình thấy vẫn chưa cung cấp đủ các phần khác mà có thể bạn cần.
Tham gia cộng đồng tự học trên Discord để cùng trao đổi: Khoa học máy tính!
TYCS: TeachYourselfCS (Từ giờ trong hướng dẫn sẽ viết tắt như vậy)
1. Programming¶
Gợi ý của TYCS là cuốn Structure and Interpretation of Computer Programs.
Đọc hướng dẫn học cuốn sách này của romanbird: Structure and Interpretation of Computer Programs (Bao gồm cả Lab với Homework luôn). Hướng dẫn học này sẽ sử dụng cả bài giảng CS61A nữa (Còn kho bài giảng trên MIT nhưng TYCS gợi ý CS61A hơn).
2. Computer Architecture¶
Có hai lựa chọn cho mọi người:
- Nand2Tetris
- Có thể bạn sẽ muốn đọc nand2tetris: a book review and recap
- Trong trang chủ của Nand2Tetris thì sẽ được chia ra làm hai nửa: Hardware và Software. Phần Hardware là 6 chương đầu còn 6 chương còn lại là về Software. Bạn có thể đọc miễn phí 6 chương đầu trên trang chủ.
- 6 chương sau của cuốn sách có thể được học trong khóa Build a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course)
- CS:APP: Tui chọn Nand2Tetris vì nó miễn phí ;-;
- Bài giảng của Computer Systems: A programmer's Perspective trên Youtube.
- Một Repository hiếm hoi cho cuốn CS:APP: Zhenye-Na/CSAPP-Labs
In seeking simplicity and cohesiveness, Nand2Tetris trades off depth. In particular, two very important concepts in modern computer architectures are pipelining and memory hierarchy, but both are mostly absent from the text.
Đây là bài giảng cho memory hierarchy từ cuốn CS:APP.
For anybody that doesn't want the watch the entire series and have some programming background the most worth while lectures are:
- Lecture 10: Program Optimization,
- Lecture 16: System Level IO
- Lecture 20: Dynamic Memory Allocation Advanced Concepts
- Lecture 23: Concurrent Programming
(Cho những người xem Lectures của CS:APP ở trên).
3. Data Structure and Algorithms¶
TYCS gợi ý học cuốn The Algorithm Design Manual (Có thể đọc miễn phí trên trang web này)
Bạn có thể truy cập trang The Algorithms để tìm cách áp dụng thuật toán bất kì trong ngôn ngữ yêu thích của bạn.
Cho những người muốn xem video bài giảng, thì đây là bài giảng của Tim Roughgarden.
- Algorithms 1
- Algorithms 2
- Lấy slide bài giảng với các thông tin khác trên repo này: AlessandroCorradini/Stanford-University-Algorithms-Design-and-Analysis
For practice, our preferred approach is for students to solve problems on Leetcode. These tend to be interesting problems with decent accompanying solutions and discussions. They also help you test progress against questions that are commonly used in technical interviews at the more competitive software companies. We suggest solving around 100 random leetcode problems as part of your studies.
Finally, we strongly recommend How to Solve It as an excellent and unique guide to general problem solving; it's as applicable to computer science as it is to mathematics.
4. Toán¶
- Discrete mathematics: Đọc lecture notes by László Lovász
- Chuyển qua học đại số tuyến tính (Linear Algebra): Essence of linear algebra.
- For a more advanced treatment, we suggest Mathematics for Computer Science, the book-length lecture notes for the MIT course of the same name. That course's video lectures are also freely available, and are our recommended video lectures for discrete math.
Một số nội dung khác:
- Essence of calculus
- MIT 18.01 Single Variable Calculus, Fall 2007
- wmboyles/Math-Summaries - Medium length summaries of math subjects like multivariable calculus. Longer than a formula sheet, shorter than a textbook (Bao gồm: Single Variable Calculus, Differential Equations, Multivariable Calculus)
Well, "calculus 1" and "calculus 3" may refer to particular courses at your school, but they're going to be meaningless to most people. Not every place organizes classes the same way your school does! I can't know how your particular college organizes its classes.
That said, I'm going to interpret the question here as, "What's the difference betwen single-variable calculus and multivariable calculus?" or "What's so 'multivariable' about multivariable calculus? It sure seems like this 'single-variable calculus' I've learned often has more than one variable in it!"
The answer is that single-variable calculus (mostly) studies functions of one real variable, while multivariable calculus studies functions of multiple real variables. So in single-variable calculus you might, say, integrate the function f(x)=x2 from x=0 to x=1, but in multivariable calculus you might integrate the function f(x,y)=xy from x=0 to x=1 and y=0 to y=1.
5. Hệ điều hành¶
Theo gợi ý từ TYCS:
Operating Systems: Three Easy Pieces is a good alternative that's freely available online. We particularly like the structure and readability of the book, and feel that the exercises are worthwhile.
Đọc hướng dẫn cách học OSTEP (Viết tắt của Operating Systems: Three Easy Pieces) được viết bởi OSSU.
Các repository lưu trữ phần Code và bài tập của sách:
6. Cơ sở dữ liệu¶
Gợi ý của bên trang hướng dẫn là xem bài giảng CS186: CS186Berkeley
Vấn đề là định hướng học từ đâu và học thế nào thì không thấy đề cập trong trang, nên t sẽ bổ sung thêm là:
- Đọc Repo này trên Github để tìm Slide bài giảng các thứ: Learning materials for UCB CS186
- Tham khảo thêm lộ trình học khóa này (2024): cs186berkeley
- Các dự án trong khóa học: CS186 Projects
7. Mạng máy tính¶
Trong đúng một quyển là Computer Networking: A Top-Down Approach.
Our favorite book on the topic is Computer Networking: A Top-Down Approach. The small projects and exercises in the book are well worth doing, and we particularly like the "Wireshark labs", which they have generously provided online.
Tài nguyên học - Bạn có thể xem video bài giảng miễn phí của Computer Networking: a Top-Down Approach - Lecture notes của sách trên
8. Ngôn ngữ và Trình biên dịch¶
Nếu bạn hiểu cách ngôn ngữ và trình biên dịch thực sự hoạt động, bạn sẽ viết mã tốt hơn và học ngôn ngữ mới dễ dàng hơn.
Our suggested introductory text is the excellent Crafting Interpreters by Bob Nystrom, available for free online. It's well organized, highly entertaining, and well suited to those whose primary goal is simply to better understand their languages and language tools. We suggest taking the time to work through the whole thing, attempting whichever of the "challenges" sustain your interest.
Bạn có thể đọc thêm trên Repo chính thức của sách.
9. Hệ thống phân tán¶
Nếu bạn chọn đọc sách thì:
Our suggested book for self-study is Martin Kleppmann's Designing Data-Intensive Applications. Far better than a traditional textbook, DDIA is a highly readable book designed for practitioners, which somehow avoids sacrificing depth or rigor.
Một số tài nguyên khác:
Nếu bạn muốn học theo video bài giảng thì:
For those who prefer video, an excellent course with videos available online is MIT's 6.824, a graduate course taught by Robert Morris with readings available here.
Các học phần khác trong chương trình chính¶
Phần này được trích dẫn trực tiếp từ ossu/computer-science
CS Tools¶
Understanding theory is important, but you will also be expected to create programs. There are a number of tools that are widely used to make that process easier. Learn them now to ease your future work writing programs.
Topics covered: terminals and shell scripting
vim
command line environments
version control
and more
Courses | Duration | Effort | Prerequisites | Discussion |
---|---|---|---|---|
The Missing Semester of Your CS Education | 2 weeks | 12 hours/week | - | chat |
Core security¶
Topics covered Confidentiality, Integrity, Availability
Secure Design
Defensive Programming
Threats and Attacks
Network Security
Cryptography
and more
Courses | Duration | Effort | Prerequisites | Discussion |
---|---|---|---|---|
Cybersecurity Fundamentals | 8 weeks | 10-12 hours/week | - | chat |
Principles of Secure Coding | 4 weeks | 4 hours/week | - | chat |
Identifying Security Vulnerabilities | 4 weeks | 4 hours/week | - | chat |
Core ethics¶
Topics covered: Social Context
Analytical Tools
Professional Ethics
Intellectual Property
Privacy and Civil Liberties
and more
Courses | Duration | Effort | Prerequisites | Discussion |
---|---|---|---|---|
Ethics, Technology and Engineering | 9 weeks | 2 hours/week | none | chat |
Introduction to Intellectual Property | 4 weeks | 2 hours/week | none | chat |
Data Privacy Fundamentals | 3 weeks | 3 hours/week | none | chat |
Môn học cuối¶
Software Engineering: Introduction. Cần học Core Programming, và có một sizable project
Học sâu hơn về các định hướng cụ thể (Chuyên ngành hẹp)¶
Ban đầu mình có theo OSSU nhưng nội dung lộ trình khá là nặng, nhưng mình vẫn gợi ý theo Advanced CS của bên họ cho từng mảng mà bạn muốn theo: ossu/computer-science