In last week’s poll, people were most concerned about improving technology, so let’s talk about that today.


Previously, I mainly shared algorithms and data structures (to continue after the New Year), because I think algorithms and data structures are the most important internal work of programmers, but not the only one.

As a non-technical programmer myself, AND observed the performance of “these two types” of engineers in my work, I think the biggest difference between the technical students and non-technical students is: the technical students know what to learn, but they know where they have knowledge holes. You don’t know what you don’t know.

(Solution: build a systematic knowledge system, seek advice from the boss and Tech lead, quickly supplement the foundation and learn repeatedly.)

Therefore, in this article, I want to talk about the general learning route that an engineer needs to master in a superficial way. It is more introductory and does not involve specific work direction. You are welcome to share your learning experience at the end of this article, as Plato said:

Only by discussing it with others can one know whether our experience is real or not.

The article is a little long, if you don’t have time to read it, I suggest you pull it to the end of the article to participate in the lottery to send books ~

If learning is compared to practice, I divide my learning content into:

  • Practice “external power” : partial application
  • Practice “internal skill” : partial foundation

Both cooperate, can fight sword to go!

A, external work

1. Linux

For students who want to do development, if they are still young and ask me what the first thing they should do, I would strongly recommend learning Linux operating system first, because Internet companies basically deploy most of their business framework on Linux operating system.

I think the key to learning Linux is to learn how to combine powerful commands.

One is that we often need them in our work, such as analyzing various log files and writing scripts to drive machines to help us do our work.

Second, the interview will often give you a requirement scenario for you to write related combination commands, such as counting the number of various IP addresses in a log.

I recommend a Bible for Linux.


For the second year in a row, Birdman’s Linux Cuisine remains the most popular Chinese Linux book.

For those of you who want to take the development route, or the Internet technology route, learning Linux is definitely a must.

This is a reference book that will help you get started and keep it handy. What’s even more special is bird’s writing style, which is very colloquial and reads like someone is talking to you in real time.

It is recommended that students who want to study can save an electronic copy for reference at any time. First-time readers may be intimidated by its thickness, but there’s no need to read it word for word. Just go through the first ten chapters quickly and you’ll get a feel for Linux. You can always check the commands and knowledge you need in the future.

2. Learn a language and framework

Once you have a certain understanding of the Linux operating system, you can choose a programming language and its general framework to learn and develop.

Language learning and framework can use a lot of information, everyone’s habits are different. For those of you who like to learn by video, you can go to MOOCs and Geek Time, which have lots of great value for money classes. In addition, I recommend you to join some communication groups, such as my reader communication group, and the official websites of some frameworks or languages will have the contact information of their own communities and communication groups, and there will be a lot of essence posts to share with Daniu.


Speaking of myself, at that time, the entry language was C++, and I had to use it for graduate courses, so I had to stick to it without foundation.

But many C++ courses and books start with C, such as C++ Primer, where the first few chapters are written in C, so that’s ok.

Later, I felt it was troublesome to brush the questions in C++, so I chose Java after listening to my friend’s advice. I really appreciate his advice. Here I also suggest that if you don’t know what language you should choose and you don’t have a special preference, you should choose Java without thinking.

Because Java market learning materials are very much, both domestic and foreign large factory Java employment is very wide, for the new is a very safe choice.

Of course, if you are not sure, you can check the job requirements of various languages on any recruitment website, as long as it is not a very narrow language, I think it is no problem to learn. Jobs like Go, Python, C++, etc.

Now, I think all three languages need to be learned:

  • Java is a language with strong comprehensive ability. Many large frameworks or open source projects of Internet companies are based on Java, because it has a very complete set of wheels, which can quickly help enterprises solve business problems.
  • C language is low-level, a lot of software is written in C or has an indirect relationship with it, learning C can help you better understand the computer;
  • Although C++ is a bit complicated, it is very irreplaceable in some application scenarios. Many companies are still developing core architectures with C++, such as Tencent, baidu and Google.

How do you learn? Take Java as an example.

A. Basic part

Recommended books:


At the same time, I recommend this free course of B station Still School, which can be said to contain all the content of Java.

https://space.bilibili.com/392179313

My own article on Java collections:

👉 Java Collections framework this article is enough

I think Effective C++ is much better, but there is a section on Effective Java in this book. For more details, see this video:

B. Actual combat

In my opinion, the best way to learn a language and framework is to do projects, which not only exercise our development ability, but also serve as a good entry point to interview interviewers when looking for internships and jobs.

The Java Spring framework is a must. The book “Spring In Action” is recommended.


Spring IoC and AOP are at the core.

👉 Spring IoC in one minute

You can find projects that interest you on Github to start with, or follow along with course videos.

For example, we are used to blogging system, you can experience the whole process of doing a blog.

Interview questions are often asked:

  • What were the highlights of your project?
  • What was the most difficult problem you solved?

These questions are meant to test the depth of your knowledge, so think about interesting points when you’re working on a project, or internalize something from someone else.

For example, I used several different caching technologies to greatly reduce the response time. Next, I will talk to the interviewer about my implementation ideas and in-depth understanding of caching technologies, so that “young people come prepared”.

Students who do development often joke that their work is “adding, deleting, checking and modifying”, so naturally, adding, deleting, checking and modifying cannot do without the use of database, so we have to learn the use of database when doing projects.

3. The database

Although I am a full stack programmer, most of my work is on back-end issues, and databases are really, really used.

Before I became a “professional” programmer, I used to use databases in financial companies. After all, the downstream of a trading system must be a database, and data is also the premise of all models.

Beginners are advised to learn how to use it first.

The recommended book, MySQL Must Know, Must Know, is a slightly thicker booklet that does not cover much of the underlying principles of the database, but provides a clear and concise introduction to the basics that beginners should master.

Sit down for an evening and you’ll find that you have a very systematic understanding of how SQL statements are written.

Interviewers often ask you to write SQL statements for a requirements scenario.

For example, I encountered a problem in the interview: write a SQL: table(Sno, Sname, classId, grade) to find the top three students in each class?

But mastering basic SQL statement writing is not enough.

“Add, delete, check and change” there are also universities ask, the same is add, delete, check and change, some people can play the database performance to the extreme.

Want to play to the extreme nature is inseparable from our grasp of the underlying principle, which is also the interview time interviewers like to investigate the content, the following two books and database underlying principle related.

MySQL Technology Insider: InnoDB Storage Engine is written by senior MySQL experts in China. The content of this book is not focused on basic grammar teaching, but through the analysis of the underlying data structure of the database, the working mechanism, tell us how to write SQL statements is efficient, tell us how to use the index can play the best effect.

To name a few common interview questions, why do joint indexes match left-most? How is the isolation level of the database implemented? Can find the answer in it, the database is absolutely the focus of the development for the interview investigation. This book is illustrated by a large number of examples and illustrations, which will leave a very intuitive impression.

There is also a book about Redis.


Redis is one of the most popular non-relational databases in the world and is often used as a cache in conjunction with MySQL.

Redis grammar itself is not complicated, students can find a lot of grammar teaching materials in this area.

Why is Redis so fast? If you just answer because it’s a memory-based database, the interview will be cold. The real key lies in the design and implementation of Redis, and reading this book you will find that Redis uses a series of underlying designs to ensure fast access performance.

Second, the internal work

1. Algorithms and data structures

I think algorithms and data structures are the most important things in computers.

Program = data structure + algorithm.

What is the use of learning algorithms? Why does Dachang like to investigate algorithms? Check out my article:

👉 brush question after all what use? Well, that’s not gonna work

There is a lot of complexity to analyze, and a lot of performance problems rely on algorithms and data structures to solve them, which can lead to a change in the way you think. Whether you learn algorithms or not determines whether you can come up with the optimal solution.

Algorithms are also the foundation of computers, and any software or framework you use must have algorithms and data structures in it. For example, database indexes use B+ trees.

Algorithms + Data Structures = Programs


Utilitarian point of view, the algorithm is necessary to enter the factory.

Foreign companies, no matter big or small, domestic like Bytedance, basically every round of interview will ask you to “tear” the code, because this is the most direct test of our ability to write code.

The interview abroad

For the preparation of foreign interview, you can read my own experience of preparing for the exam written before:

👉 from small white to 6 offers, how on earth did I brush the question?

At the same time recommend pulis grandpa algorithm class, version B standing there are handling: https://www.bilibili.com/video/av50599771/

Here is the author of this book, PhD of Stanford university.


Domestic interview

For the domestic interview, I suggest starting from the book “Sword Finger Offer”, and then go to Niuke.com or Leetcode to start your brush test journey.


Through more than 50 algorithm questions as cases, the author of this book explains the thinking of the interviewer’s investigation and the application of some basic data structure algorithms. Reading this book, we will feel that a senior interviewer is giving me good guidance, pointing out our common mistakes and the direction of learning.

After finishing this book, you can continue to look for various types of topics to learn on Leetcode. I personally feel that for the interview, if you can brush 200 medium topics proficiently, it is enough to find a good job.

I’ve written a lot about algorithms and data structures, and I’ve got a breakdown on Github for you to use:

My Github:https://github.com/xiaoqi6666/NYCSDE

2. Design patterns

Design patterns are the key to writing high-quality code.

I learned design patterns very quickly before I came on board, and when I came on board it was a lot easier to look at code, and a lot of design if you don’t know the pattern you can’t understand why you’re doing it.

In my opinion, learning design patterns is a process of cultivating one’s “aesthetic” ability. Different from paintings and music, the aesthetic standards of the computer world are relatively uniform, so we need to know the rules of the game first, and then we can upgrade.

Recommended book design Patterns:


It is not enough to look at it once, nor is it necessary to look at it completely.

During this year, I read this book repeatedly and went to it when I encountered different problems. As the amount of code accumulated, my understanding of the design pattern changed.

At the same time, some colleagues will give me suggestions in code review, which can promote my progress.

Therefore, for students who have not yet worked, I do not recommend spending a lot of time on this, because there is no one to give you feedback, the effect may be limited, and this internal skill is a lifelong practice, there is no need to rush.

3. Operating system

Speaking of which, we have learned Linux operating system, learned a language and general framework and made a small project, learned a common relational database and non-relational database, algorithm and data structure also passed the test, should be no problem to get the offer.

So what else do we need to learn about computers for back-end development?

Recommend CSAPP: Computer Systems: A Programmer’s Perspective


Long before I was in the book is recommended in the video, it explained the underlying principle the computer is very thorough, CMU also has form a complete set of course: http://csapp.cs.cmu.edu/3e/courses.html, importance is self-evident.

Of course, the book is very thick and difficult to read. Here are the key chapters for you:

One, two, three, six, seven, eight, nine chapters

Can’t read it down? Join the study room and let’s punch in!

So what’s the use of understanding computer systems?

It’s hard to say exactly what it does, but it’s everywhere, like performance optimization at work.

If development is regarded as a kind of kung fu, these aspects are like internal work. Only when internal work is solid, can the development be more stable and the project can be reliable. For us as individuals, we can go further.

4. Computer networks

What else do you like to test in an interview?

For example, a classic interview question is often asked: ** What happens from entering a URL to appearing on the page? ** If you have studied computer networking you will have at least a general idea of the problem.

So what’s the use of this question? For example, when you visit the Web page, there is a “white page” (web page blank) such a fault, how do you troubleshoot? If you just look at your code and the server and don’t know what’s going on in the whole request link, you can’t do anything with a slightly more complex failure.

Whether a student of computer science or not, I strongly recommend learning computer networks well.

Of course, if more “utilitarian” point, I think directly to search the relevant “face book” to see what questions are most frequently asked, the relevant plate of knowledge to understand thoroughly, form their own answer, see if they can clearly answer.

  • How about TCP three handshake?
  • Why three handshakes? What about two or four times?
  • What is the HTTP protocol layer?
  • How do you go from URL to page?

Recommended book: Computer Networking: Top Down


Recommended course: CS 144 Computer Networking, Stanford University

B station link: https://www.bilibili.com/video/av96841516/

5. Computer History

The last one, which I am interested in, I recommend to you by the way.

Computer is a very, very interesting subject, very interesting subject, from the earliest Turing machine, to today’s desktop computer, notebook computer, and recently I played raspberry PI, are very, very interesting.

Learning these things is a way to stimulate my enthusiasm for learning and keep my curiosity.

Recommended video: Crash Course Computer Science – Translation called “Crash Course Computer Science”, but not “Crash Course”.

B stand in both Chinese and English version: https://www.bilibili.com/video/av21376839/

Lot of subtitle group: https://github.com/1c7/Crash-Course-Computer-Science-Chinese

Each episode is only 10-12 minutes, there are 40 episodes, the speaker is very passionate, you can feel her passion for computer science across the screen, it has a great influence on me.


Three, step into the rivers and lakes

If you can do a relatively good project, to all kinds of face knowledge can answer seven or eight, algorithm questions to do 200, I suggest you can start the interview, then really stepped into the river’s lake.

After stepping into all corners of the country, we still need to practice oneself ceaselessly repeatedly “external merit” and “internal merit”, improve oneself ceaselessly ability, even if be same book, read in the different stage of the job, can have different experience certainly.

Of course, these are only hard power in the workplace, and the wind in the river’s lake, must also be inseparable from the extraordinary soft power.

However, soft power must be built on hard power. It can only be icing on the cake rather than providing timely help.

Of course soft power is not needed if hard power is strong enough, but not for 99% of the people.

I have all the books mentioned in this article organized and put in the background

To obtain: first click in the lower right corner of the look, and then reply [05].

The sun is just on the way, wish every step into the rivers and lakes of the young can be xiaoxiao Sasa, the sword to go!