Bỏ qua

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).

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:

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.

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

  1. Discrete mathematics: Đọc lecture notes by László Lovász
  2. Chuyển qua học đại số tuyến tính (Linear Algebra): Essence of linear algebra.
  3. 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:

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à:

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