Learning-of-Computer-Science
0. Basic/Introduction
- CS50: Introduction to the intellectual enterprises of computer science and the art of programming.
- CS106B Programming Abstractions: this is a basic/introductory course from Stanford whose content includes knowledge of object-oriented programming, data structures (collections, graphs, etc.).
- Computer Organization & Systems: CS107 is the third course in Stanford’s introductory programming sequence. The CS106 courses provide you with a solid foundation in programming methodology and abstractions, and CS107 follows on this to build up and expand your breadth and depth of programming experience and techniques. The course will work from the C programming language down to the microprocessor to de-mystify the machine.
- Mathematical foundations of computing: This course is about mathematical techniques that are useful in computer science, to analyze algorithms and prove impossibility results. The course has four parts: (1) introduction to the kind of discrete mathematics that is useful in computer science, including sets, graphs and proofs by induction; (2) finite automata, which model simple linear-time algorithms and capture the power of regular expressions — we will be able to understand the power and limitation of this class of algorithms inside out; (3) turing machines and undecidability, in which we study the power of arbitrary algorithms that are allowed arbitrarily large running times — we will show that there are several important problems that are unsolvable even under such conditions; (4) complexity theory and NP-completeness, which is concerned with the study of what we can do with efficient algorithms.
1. Mathematical Background
1.1 Calculus
- Thomas Calculus: Thomas’ Calculus helps students reach the level of mathematical proficiency and maturity you require, but with support for students who need it through its balance of clear and intuitive explanations, current applications, and generalized concepts. In the 14th Edition, new co-author Christopher Heil (Georgia Institute of Technology) partners with author Joel Hass to preserve what is best about Thomas’ time-tested text while reconsidering every word and every piece of art with today’s students in mind. The result is a text that goes beyond memorizing formulas and routine procedures to help students generalize key concepts and develop deeper understanding. This course (Course Link) could definitely help you intuitively get a better understanding of Calculus and it is really the best course I have ever taken.
1.2 Linear Algebra
- MIT Linear Algebra: This course parallels the combination of theory and applications in Professor Strang’s textbook Introduction to Linear Algebra. The course picks out four key applications in the book: Graphs and Networks; Systems of Differential Equations; Least Squares and Projections; and Fourier Series and the Fast Fourier Transform. This course (Course Link) could definitely help you intuitively get a better understanding of Calculus and it is really the best course I have ever taken. Moreover, this interactive book (Book) could help you learn Linear Algebra more interestingly.
1.3 Probabilistic
- MIT RES.6-012: Probability is the science of how likely events are to happen. At its simplest, it’s concerned with the roll of a dice, or the fall of the cards in a game. But probability is also vital to science and life more generally. I really recommend this course from MIT, and this book (Book) is the most comprehensive dictionary of probability and statistics I have ever seen.
Besides, as the course is too long, people have to spend a lot of time following it, there are some lecture notes which could help you have an overview of probalistic quickly.
- Probability Theory: STAT310/MATH230
- Probability for first year mathematicians at Cambridge in winter 2015
1.4 Statistic
This course from MIT, named Statistics for Applications (video). This course offers an in-depth the theoretical foundations for statistical methods that are useful in many applications. The goal is to understand the role of mathematics in the research and development of efficient statistical methods. And for people who prefer slides, this Site may could help you, and chinese version blog.
2. Core Course in Computer Science
2.1 Operating system
- CS 140: Operating Systems (Spring 2020): This class introduces the basic facilities provided by modern operating systems.
2.2 Compiler
- CS143 compilers
- Compiler Explorer: Compiler Explorer is a handy website that lets you quickly write C code and see its assembly translation.
2.3 Computer network
2.4 Algorithm
- DESIGN AND ANALYSIS OF ALGORITHMS: This course will cover the basic approaches and mindsets for analyzing and designing algorithms and data structures. Topics include the following: Worst and average case analysis. Recurrences and asymptotics.
- fucking-algorithm: Crack LeetCode, not only how, but also why.
2.5 Computer/Digital system design/architecture
2.6 Database
- Data Management and Data Systems: This course covers how to use databases in applications, first principles on how to scale for large data sets and how to design good data systems.