Skip to content

Billy1900/Learning-of-Computer-Science

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Learning-of-Computer-Science

First, I prefer to have a overview of a new topic I am ready to learn. This picture illustrates almost all of the areas related to computer science and there is a short video talking about it. image Besides, one well known subject classification system for computer science is the ACM Computing Classification System devised by the Association for Computing Machinery from the Wiki.

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. I think it is very important to grasp that how to write paper mathematically by reading these two--Mathematical Writing and Some Remarks on Writing Mathematical Proofs
  • Simple overview of Computer Science: this video is a simplistic introduction of computer science, short but comprehensive, very friendly to beginners.

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.

  • Matrix Cookbook: a good handy tutorial on calculating matrix.

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.

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. This repo is Python implemented Statistical Leanring Methods, Li Hang the hard way.

1.5 Applied Mathematics for computer science

In some ways, computer science is an overgrown branch of applied mathematics. While many software engineers try—and to varying degrees succeed—at ignoring this, we encourage you to embrace it with direct study. Doing so successfully will give you an enormous competitive advantage over those who don’t.

The most relevant area of math for CS is broadly called “discrete mathematics”, where “discrete” is the opposite of “continuous” and is loosely a collection of interesting applied math topics outside of calculus. Given the vague definition, it’s not meaningful to try to cover the entire breadth of “discrete mathematics”. A more realistic goal is to build a working understanding of logic, combinatorics and probability, set theory, graph theory, and a little of the number theory informing cryptography. Linear algebra is an additional worthwhile area of study, given its importance in computer graphics and machine learning.

For a more advanced treatment, we suggest Mathematics for Computer Science, the book-length lecture notes for the MIT course of the same name.

2. Core Course in Computer Science

2.1 Operating system

2.2 Compiler

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.

My preferred approach is to solve problems on Leetcode, some instructions are as follows:

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

2.5 Computer/Digital system design/architecture

  • CS110 Principles of Computer Systems: Principles and practice of engineering of computer software and hardware systems. Topics include: techniques for controlling complexity; strong modularity using client-server design, virtual memory, and threads; networks; atomicity and coordination of parallel activities. Besides, I also recommend to use this book--Computer Systems: A Programmer's Perspective

2.6 Database

One paper particularly worth mentioning for new students is “Architecture of a Database System”, which uniquely provides a high-level view of how relational database management systems (RDBMS) work. This will serve as a useful skeleton for further study. And for courses,

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

3. Complementary

Makefile

  • A simple Makefile tutorial: Makefiles are a simple way to organize code compilation. This tutorial does not even scratch the surface of what is possible using make, but is intended as a starters guide so that you can quickly and easily create your own makefiles for small to medium-sized projects.
  • Makefile Tutorial By Example

Git

System Design

  • 5 Common System Design Concepts for Interview Preparation
  • system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
  • Grokking system design: System design questions have become a standard part of the software engineering interview process. Performance in these interviews reflects upon your ability to work with complex systems and translates into the position and salary the interviewing company offers you. And I take some notes which might be helpful.
  • Blog.Core is an enterprise-class back-to-back separation framework for.NET Core5.0 API + Vue 2.x + RBAC.

Coding Style

Computer Architecture

  • Simple Computer: Starting from NAND gates, and moving up through to registers, RAM, the ALU, the control unit and adding I/O support, I eventually ended up with a fully functional machine. For a write up about this project, see blog post about it here