Theoretical knowledge can be said to be the most essential knowledge of the subject of computer science, and the bottom of the things, the more difficult to change, carefully study, understand the logic and thinking behind it, will let you benefit. Whether it’s learning a new skill, solving a problem, or reading someone else’s source code, you can be inspired or inspired by this knowledge. It may take 5, 10 or more years to learn the basics well, but it’s the only way to become an expert, and it can help you learn more and get less.

Learning is divided into passive learning and active learning.

Passive learning: such as listening, reading, audio-visual, presentation, the average retention rate of learning content is 5%, 10%, 20%, and 30%.

Active learning: by discussing, practicing, and teaching others, the retention rate of passive learning increases from 5% to 50%, 75%, and 90%.

Learning is not about trying to read more books, blindly pursuing the speed and quantity of reading, which creates a sense of low-level diligence and growth. It’s just brute force. To think, to practice, to summarize and conclude, otherwise, you just mechanically repeat something, and there will be no qualitative growth.

Use knowledge maps when you study, not to memorize the facts, but to find a map of knowledge where you can follow the critical path to the answer you want.

There are three steps to learning.

  • Knowledge acquisition. The source of information is very important. Obtaining the source of information, understanding the intrinsic nature of surface information, and verifying multiple data are the key to this step.
  • Knowledge suture. Suturing is the knowledge that organizes information into a structure. Here, connecting memory, logical reasoning and knowledge combing are three important parts.
  • Skills transfer. Translate your knowledge into your own skills through analogies, practice and practice, and teaching. This skill can take you to the next level.

Finally, I listed the points of knowledge that need to be systematically studied to become a master.

Basis:

  • The Construction and Interpretation of computers, a classic of the classics, a must read.
  • Computer composition and design
  • Understanding Computer Systems in Depth
  • Unix Advanced Environment Programming
  • Unix Programming Arts
  • Unix Network Programming, volume 1 socket API, volume 2 interprocess communication —- Classic must-read, introduces five I/O models. Blocking I/O 2. Non-blocking I/O 3. Multiplexing (SELECT and poll) of I/ OS 4. Signal driven I/O (SIGIO) 5. Asynchronous I/O (POSIX AIO_functions)
  • TCP/IP Volume I Protocol
  • “TCP/IP Network Programming”
  • Wireshark Packet Analysis In Action
  • This book is not just about TCP/IP. It should be called Computer Networking. It is mainly for people who want to get started quickly.
  • Linux system programming is also worth a read, and while it is similar to Unix Advanced Environment Programming, it highlights some of the key Linux technologies and related system calls.
  • Linux tutorial —– optional
  • “Bird brother’s Linux private house dishes” —– selected
  • HTTP document
  • All you need to know about character encoding
  • Git graphic tutorial and detailed explanation
  • Modern Operating Systems
  • Computer Network
  • Principles of Compilation
  • Understanding Computer Systems in Depth
  • The Thing about TCP (PART 1) and the Thing about TCP (Part 2)
  • The Definitive guide to HTTP —- optional
  • Read the Linux source code

algorithm

  • Introduction to Algorithms is a textbook for American undergraduates. It should also be a textbook for Chinese computer students.
  • “The algorithm”
  • Diagram of algorithms
  • Programming Abas
  • LeetCode
  • Data Structure and Algorithm Analysis

Design patterns

  • Head First Design Mode (Chinese version)
  • Design Patterns: The Foundation of Reusable Object-oriented Software is a classic book on object-oriented design.
  • Refactoring code Bad smells and best practices for corresponding code.
  • Domain-driven Design

coding

  • It’s a bit dated and thick enough to stand on a monitor, but it’s a classic.
  • The Way of Programmer Practice is also quite classic, I think it is your guiding light.
  • The Myth of the Man-month may also be a bit dated. But it’s still a classic.
  • The Code Clean Way is about efficiency, perfection, and simplicity in the details.
  • C Programming Language
  • Modern Methods of C Programming
  • C Pitfalls and Pitfalls
  • C++ Primer Chinese version
  • Exploring the C++ object model in depth
  • Two books in C++ that could not be More classic. You may find C++ complex, but the way these books explore code stability is helpful, because that way of thinking can be applied elsewhere.
  • Effective Java is also a classic.
  • Java Core Technology (Volume 1) An introduction to Java
  • Ideas for Java Programming
  • The Definitive Guide to Java Performance
  • In-depth Understanding of the Java Virtual Machine
  • The Manual of Garbage Collection Algorithms is a mediocre translation, some say a poor one
  • Java Concurrent Programming

Front end:

  • React
  • The definitive guide to HTML 5 for beginners and mid-level Web developers
  • HTML 5 Canvas core technology, a must read if you want to make HTML 5 games.
  • ECMAScript introduction to 6
  • Introduction to Browser Rendering
  • High Performance Website Building Guide: The Essence of Front-end Engineering Skills
  • Front-end Authoritative Performance Guide (Chinese version)
  • JS Functional Programming Guide Chinese version
  • Awesome React, this is a great list of React related resources.
  • Vue Official Documentation (Chinese version)
  • Awesome Vue, Vue. Js is a great list of Awesome Vue resources.

other

  • The Training of an Effective Programmer
  • Software Capriccio
  • Analysis Patterns
  • Domain-specific Languages
  • The Road to Technical Leadership
  • The Effective Manager