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
Học khóa 15-213: Intro to Computer Systems: Schedule for Fall 2015 và sử dụng sách Computer Systems: A programmer's Perspective)
Có đính kèm video bài giảng trên trang luôn. Học mọi người có thể xem trên Youtube cho tiện: Computer Systems: A programmer's Perspective
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). Cá nhân mình thích xem
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.
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.
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