/Self-learning-Computer-Science

the resources I use to learn computer science in my spare time

Self-learning-Computer-Science

I'm an undergraduate student majored in Computer Science in Peking University. Tired of the boring courses, I began self-learning totally after my fresh year. This repository contains all the resources I used to self-learning. The links below will take you either to another repository which contains my solution for homework and course projects or to the course website where you can get full guidance.

If you feel quite painful to take the courses in unversity, trust me, there is high possibility that it's not your duty. Computer-Science is so interesting and everyone should enjoy it if you have a good teacher to teach you a good course.

All the courses in this repository are developed in MIT, UC Berkeleys, Princeton, Harvard ...... , and I guarantee you will have a completely different experience to take these courses !

Let's self-learning together and get better together !

Math courses


I'm a fan in math, so I take many math courses which CS students are not obligated to take, feel free to take the ones you like !

Basics

Calculus and Linear Algebra

Think you have already been expert in these three courses ? Trust me, spend some time to read the course notes, it will deepen your understanding !

basics of Information theory

This course is designed for freshman in MIT, I strongly recommend you take it to understand some basic concepts in information theory.

Intermediate

Probability theory
Differential equations
Numerical thinking

You may feel tired to learn purely math, Don't forget that we are majored in computer science, we can use computer to calculate for us !

Don't worry, many MIT maths courses use Julia language to help you understand maths concepts and deal with the maths problems in real life !

In this course, you will master julia and do some basic but interesting labs, e.g. image processing, ray tracing, climate simulation and so on !

After that, there are so many courses you can take to use julia to learn math and programming together !

I personally find this course a little easy, so I also take the numerical analysis course for graduate students.

Advanced

I haven't finished all of them, but I highly recommend the last two courses !

Programming Basics


There are many programming courses to freshman, I find all of them interesting !

This course will teach the stuffs which a mature programmer use every day, but you may find there are no official course will teach you. Personally I start to use vim and git after taking this course.

Have you heard about SICP? but that book use the language "Scheme" which is not so popular today. This course use Python to teach you the same idea! Isn't that cool ? Trust me, after this course, you will be expert in python!

CS50 is the most popular courses in Havard University, the first course you will learn C and SQL, the second course you will use python to learn some basic concepts about AI !

Data structures and Algorithms


Now you may have quite more experience in programming, but the art of programming is not programming itself, but to use it to solve problems !

In this course you will learn Java and use it to implement many data structures and algorithms, I highly recommend you take the Spring 2018 version which you can use the Gradescope to self-grade your code, see the course website for more details !

These two coursera courses are so great ! Those projects are very interesting and you can sharpen your Java programming in these two courses !

In this course you will learn more advanced algorithms like dynamic programming, Network Flow and tackle some NP problems.

Electronical Engineering Basics


As a CS student, it does not harm to learn some EE lessons to deepen your understandings on the hardware. I find these basic EE lessons will help you learn more advanced CS courses about computer architecture.

These two lessons are the introduction courses for freshman in UC Berkeley majored in EE. You can learn the basic ideas about circuits and some data analysis methods. You can also make your hands dirty in its labs.

Signal and systems is a very important course which will change your views of the world ! MIT 6.003 course is a little bit hard but it provides all the lecture videos and homework with solutions. I highly recommend you watch the videos of 6.003 and read the notes of EE120, personally I think the notes about Fourier transform are quite clear and great. Also, EE120 has some very interesting labs where you can use python to process real signals and solve practical problems.

Computer Architecture


This course got 5.0 score on coursera ! In this course, you will use logic gates to implement a computer and create a new language called Jack and write the compiler and virtual machine to run the Jack code on the computer you made! It's so cool !!

All the labs and projects and fantastic. In this course, you will learn C programming language and RISC-V assembly language, understand how the computer run your code, write a MNIST classification neural network in RISC-V, build your own CPU to run RISC-V, and finally, you can write a naive, but quite powerful numpy in C to accelerate the matrix manipulation. The best architecture course I've ever taken !

  • CMU CS15213: CASPP

This course is so well-known but some of its labs are hard, I take this course at school, but you can search for many online resources to complete this course.

Machine Learning and Deep Learning


There are so many good resources on the Internet you can use to learn AI, machine learning and deep learning, below are just some courses which I prefer.

Introduction courses

I recommend this 2018 version which you can use the gradescope. This course will teach you the basic ideas in AI, such as search, CSP, MDP, RL, BNs, NN, logistic regression and so on.

In this course you will learn the basic neural network such as CNN, RNN, GAN, VAE, and learn to use tensorflow in the labs.

Machine Learning

This course is taught by Andrew Ng (吴恩达). This couse is maths heavy. If you feel painful, you can take the coursera Machine Learning course which is also taught by Andrew. I finished the coursera course's labs too, they are quite interesting !

Deep Learning

Computer Systems


This course is lab-driven, you will implement many features of a real operating system based on xv6 (a toy operating system which is designed for teaching). After finishing 11 labs, I'm sure you will have a deep understanding of the operating system.

I'm focusing on the course during my winter holiday. Wonderful labs !!

In the fall 2020, the authors of this wonderful book make online videos which you can use to supplement your learning. Also, the standford course has a great lab which you will implement a TCP stack.

I heard of this great course, but I don't have time to start learning it.

Wonderful course! Bufferoverflow, cryptography, web security, network security ... ...