The articles are updated every week, and your “three companies” are the biggest affirmation for me. You can search the public account “Back-end Technology School” on wechat to read it for the first time (usually one or two posts are updated earlier than the blog).

Recently, I am often invited to answer questions about how to learn C++ and what basic skills should be stored in the background development of C++.

I am engaged in the background development of C++ and currently responsible for the background development of social products in Tencent. Therefore, I am writing this article to share my learning path and clicked skill tree of C++ background development, hoping to give some reference to students who want to engage in background development, and it will be better if it can help you avoid some dettour.

At the end of the article, you can get the learning route resources.

Good books can get twice the result with half the effort. Therefore, AFTER each skill point, I will recommend some books that I have read and have a good reputation for reference.

What IS shared is my learning path. If you can follow this learning path and learn it carefully, I think you have a good accumulation of skills in backstage development technology, and there is no problem for you to pass most of the interviews of big factories with project practice.

Computer based synthesis

Students who have taken CS or software engineering graduate students may be familiar with this title, yes, I am talking about the professional course code-named 408 computer basic synthesis. This specialized course includes data structures, computer composition principles, computer networks, and operating systems.

Why mention this course? Because the basics are so important! This is the biggest difference between the undergraduate course and the training course. Theoretical knowledge may not be immediately applied to the project, but when discussing a technical problem with others, you can know its deep-seated reasons and have a more comprehensive and systematic view of the problem.

For example, you may have heard of a stack, but do you know how it is structured and different? You know, data structures; You know that computers add, subtract, multiply and divide, but how exactly do they do it? The principle of composition will tell you; Do you know how to distinguish between instruction address and data address during program execution? The operating system will tell you.

So if you are not a computer related major in college, or this major is not completely understand the basics, it is strongly recommended that you make sure to take the time to learn these courses.

Recommendation:

Computer foundation is integrated recommend the computer major teaching material that sees an university is ok: network of data structure, computer composition principle, computer, operating system.

  • The data structure

1. Textbook: Data Structure, Weimin Yan, Tsinghua University Press

2. Tutorial book: “Algorithm and Data Structure Postgraduate Examination questions Analysis (second edition)” China Machine Press

  • Computer composition principle

Textbook: Computer Composition Principle, Tang Shuofei Higher Education Press

Coach book:

Guidance for postgraduate examination of computer Composition Principle, Aiping Xu, Tsinghua University Press

Composition of computer – Learning guidance and Problem Solving, Tang Shuofei Higher Education Press

  • The operating system

Textbook: Computer Operating System (revised edition), Tang Zi ying xi ‘an University of Electronic Science and Technology Press

Tutorial book: Operating System postgraduate entrance examination Tutorial (Computer professional postgraduate entrance Examination quanzhen question solution), University of Electronic Science and Technology of China Press

Operating system postgraduate entrance examination guide, Tsinghua University Press

  • Computer network

Textbook: Computer Network (5th edition), Xie Xiren Electronic Industry Publishing House

Tutorial book: Computer Network knowledge points and Exercises analysis, Harbin Engineering University Press

Video teaching material

I have listened to some of the courses, which are the basic contents of the computer major. If you have not systematically learned or not learned well, it is very recommended to brush through the video course.

Wuhan University – Data Structure MOOC Online course

Huazhong University of Science and Technology – Principles of computer composition

University of Electronic Science and Technology of China – Principles of Computer composition

Huazhong University of Science and Technology – Principle of operating system

Harbin Institute of Technology – Computer Network

This section is a bit too much, because the basics are so important! The difference between professional and non-professional courses is not who has learned more programming languages, nor who has used the framework fluently. The essential difference is the difference in theoretical knowledge reserve and the ability to use CS thinking to analyze and solve problems independently.

C++ and C syntax basics

Syntax is the foundation of a language, and the basic statements and syntax of C++ are very similar to THAT of C. The biggest differences are in class and exception handling mechanism, as well as the application of templates. Therefore, if you have C foundation, you can learn grammar quickly. After reading the hot after class exercises to type again and their own compilation is finished.

Recommendation:

C++ Primer Chinese (5th edition) is a classic introduction to the book, do not take the university textbook XX strong to compare, is not a level.

Standard library STL learning

STL provides a rich algorithm library support and a variety of containers, C++ standard library provides including the most basic standard input and output iostrem, a variety of containers vector, set, string, master the standard library, do not have to repeat the wheel (except for the wheel training purpose) to write more C++ code.

Recommendation:

C++ Primer Chinese version (5th edition)

STL Source Code Analysis

C + + advanced

After learning the above C++ foundation is only able to use, to use well also need to continue to learn more advanced, standing on the shoulders of giants to write more robust and efficient code, you did not step on the pit predecessors have stepped over, about some language details and better coding habits, there are many excellent books to learn.

recommendation

55 concrete ways to improve your programming and design in Effective C++ are worth a look at and can make the difference between an expert and a novice!

More Effective C++

More Effective C++(35 Effective ways to improve programming and design) is a sequel to Effective C++ by the same author, Scott Meyers in 1996. There are fewer articles, but there are more pages, because this time the material is more advanced than “one episode,” especially chapter 5. Meyers titled this chapter Technology.

The book Inside the C++ Object Model is also available in Chinese with a high quality translation.

C + + 11 new standards

The new standard provides a more elegant, C++ implementation to solve existing problems. Most of the current C++ software is still C++98 standard, the first C++ standard, after so many years of development, Much of the expanded support for C++ that you used to need from the Boost library (a quasi-c ++ standard from the C++ ’98’s) has been incorporated into the C++11 and even C++2X newer standards. Keep up with The Times and pick up the more advanced production tools, and the tool is efficiency.

Recommendation:

In-depth understanding of C++11

Linux system basics and shell scripts

Almost all Internet services today run on Linux. I know nothing about Linux system, so I have to learn Linux system operation first, not as good as file management, system commands, file systems, rights management, system services, etc.

Shell scripts are like Windows batch scripts, and trust me, you’ll need them sooner or later if you’re working on Linux, so learn them early.

Recommendation:

“Bird elder brother Linux private house dish foundation study article” this series also has a server set up article, the preliminary study personal feeling does not need to see

Linux Shell Scripting Guide

Shell Script Learning Guide

Advanced programming for the Linux environment

Ordinary users only need to understand system operation, software developers also need to understand programming interfaces. In the previous stage, you have been able to skillfully operate the Linux system, know some common system commands and services, and can use shell script to write some small tools to improve the efficiency of daily development.

Our goal is to become a software engineer. As a software engineer, we need to master the programming skills of Linux system more deeply, learn system programming interface, system call API, memory management and interprocess communication (IPC), which is the learning purpose of this stage.

Recommendation:

Advanced Programming in the UNIX Environment is a must-see APUE for Linux programming. It is highly recommended to read it thoroughly, and it is worth reading it again and again.

“Linux/UNIX system programming Manual” this book and APUE a little repeat, I read APUE this jumped to see, usually can look up the directory.

Linux network programming socket

There are many ways to communicate between processes (IPC) on the same machine, through message queues, FIFO, shared memory, and so on. Network programming socket: programs distributed on different machines connect processes on different machines across the network through the network communication interface provided by the system to achieve cross-machine network communication. There are UDP sockets, TCP sockets, Unix domains, and of course, SCTP sockets are familiar if you are a communications practitioner.

Recommendation:

UNIX Network Programming Volume 1: Socket Networking apis (version 3)

UNIX Network Programming Volume 2: Interprocess Communication (2nd edition)

Database and Storage

Program running data is stored in volatile memory, and a database is needed for persistent storage. A background service system generally needs to consider the problem of data landing and persistent storage, then it will involve the selection and application of database, database is divided into relational database and non-relational database.

Relational databases refer to databases that use a relational model to organize data, represented by MySql. A relational model is a two-dimensional table model, and a relational database is a data organization composed of two-dimensional tables and their relationships.

Non-relational databases are stored by key-value pairs, and the structure is not fixed. Each tuple can have different fields, and each tuple can add some of its own key-value pairs according to the need. It is not limited to a fixed structure, which can reduce some time and space overhead. On behalf of Redis, memcached, Tencent internal component CKV is also a non-relational database.

Recommendation:

SQL Must Know must Know

High Performance MySQL

Redis Official Redis Chinese website

There are many applications about Redis, such as the application of distributed lock based on Redis, high concurrency grab red envelope model, etc., this can write an article about the principle and application of distributed lock.

Algorithm based

A computer algorithm is a solution to a problem written in a programming language that a computer can understand.

A good algorithm can solve problems more succinctly and efficiently. Nowadays, whether it is for school or social recruitment, the written examination of big factory will examine the algorithm. Even if it is not for the written examination, as a software practitioner, you should often practice the algorithm and keep your hand feeling. Learning algorithm is a general method of learning to solve problems which helps to improve logical thinking ability.

Learning methods

From my personal experience, it is not recommended to study algorithms by directly hitting books. It is recommended to read books and brush online programming algorithms.

Specific: while reading data structure or algorithm introduction, you can brush questions on Niuke or Leetcode, because reading books is too boring and it is easy to lose patience. The advantage of online brush questions is that you can set goals every day and enjoy the pleasure of passing each question. With positive feedback, it is easier to stick to it.

Architecture ability

** Architectural capability is the ability to use existing knowledge to design the entire backend service system. ** Not only requires to master the dimension of skills but also depth, need to be able to develop different design schemes according to different requirements and system constraints.

There are many more things to consider, including the design of the service model: multi-process or multi-thread or even coroutine microthreading, distributed or centralized;

Storage selection: Which database selection to consider? It needs to be differentiated according to the data characteristics and application scenarios. If the data of social applications is stored in a non-relational database, it may be better to store the data of e-commerce orders in a relational database.

Of course, there are other aspects of the backend system that need to be considered, just to name a few.

More practice

** said so much, the most important thing is practice practice practice. In the era of mobile Internet, the fragmented information we are exposed to is too mixed and messy. My personal experience shows that the essence of high concentration of knowledge still needs to be absorbed from the books of masters. Therefore, reading is the most correct and fast learning path, and there is no shortcut.

But just reading is not good, programming ability and technology is also a modern handicraft, but also need daily polishing skills, as the 10,000-hour law:

The reason why a genius is remarkable in people’s eyes is not that he is superior in talent, but that he has made continuous efforts. 10,000 hours of practice is necessary for anyone to go from mediocre to world-class. It takes 10,000 hours to become an expert in a field, which is proportionally: if you work eight hours a day, five days a week, it takes at least five years to become an expert in a field. This is the 10,000-hour rule.

How to polish and improve programming skills? Find a project, find something you’re interested in and implement it in code, interest is the best teacher, and this applies to programming and technical learning as well.

People tend to do things that give them instant pleasure, like playing a game for 30 minutes. On the contrary, the improvement of technology fragments is a long-term process, and the three-minute heat is certainly difficult to succeed.

So use technology to do interesting things and interesting programming, such as writing a crawler small program to grab website data or write a small game, or build their own wheels for their own use, and never tired of optimizing the wheels. In this way, each step can get a sense of achievement, encourage themselves to continue to go on, slowly will be a qualitative leap.

A web site

This website must tell everyone, the website is a C++ encyclopedia, similar to Linux man manual, ordinary development check forgot function name or container usage direct search is very convenient, I downloaded the offline version.

Website: C++ reference: cppreference

To be continued

Writing it down in one breath is certainly not perfect, the article will keep updated and revised, think of it.

I sorted out the e-books and video textbooks mentioned and recommended in the article, which were collected during the learning process of these years. I searched the public account “Back-end Technology School” and replied “1024” to share them with you for free.

Original is not easy, see here move a finger, your “three even” is the biggest support for my continuous creation.

More and more

You can search the public number “back-end technology School” on wechat and reply to “information” with all kinds of programming learning materials I prepared for you. This article is updated every week, and we’ll see you next time!