C++ background development, in my opinion

Today, when I am about to return to work at the company after the Spring Festival, I will also enter the golden three and silver four period. I will talk about some of my personal views on back-end development. I hope to be able to talk to students at school or those who have just come into contact with C++ back-end development. Kind of help.

        I still remember what I always paid attention to when I was in school: programming language + data structure and algorithm. Yes, for a computer major in school, this is a very important aspect. However, this is often not enough, perhaps because I have not entered the company for internship before graduation, so that I did not do enough about my future career planning before graduation, and I didn’t know what direction I would do in the future. At that time, I was broad and confused. The positioning is that as long as it is a software development job, I am OK. After graduation, I mainly engaged in C++ background development. After working for a period of time, I knew what I was good at and what I was interested in.

        What do you like about front-end and back-end?

When it comes to front-end, everyone will think of html+javascript+css, maybe this is the most basic thing of the web front-end. I personally call the end that directly interacts with the user the front end. In addition to the front end in the traditional sense mentioned earlier, I will also call the app developed by android and ios the front end. At present, the iteration speed of various front-end frameworks is quite fast, and it is not so simple to keep up with the pace of various NB frameworks. Although after work, I have not done front-end projects, and more often cooperate with front-end engineers FE, but I know that there are many things to learn in the front-end field, and because the front-end things can directly see the development results by themselves, they may be working Zhonghui has a sense of accomplishment, so never feel that the things done by front-end engineers have no technical content. Turnips and vegetables have their own loves. Any field, as long as you go deep, have technical content. The key lies in whether you like it or not. not good at. Personally, I prefer back-end development. The main reason is that I have been learning C++ when I was in school, and I have been working on back-end projects after work. I did not directly participate in front-end projects. Since God has assigned me a direction, I should do in-depth research in this direction.

        What is background development?

The first time I heard that the position of back-end development was on Tencent’s recruitment website, there was a position called back-end development. I personally feel that back-end development is also very wide, and there are many development languages, such as: php, node.js, java, C/C++, go, each company has its own main language, such as the back-end development of Tencent and Baidu, C++ is used more, of course PHP is also used more, Ali and Meituan, and Java are used more. Of course, language is only an implementation tool, and one cannot singlely think that the language is good and the language is not good. There is no best, only the most suitable. Back-end development is relative to front-end development. I personally feel that all development that directly interacts with the front-end can be considered back-end development. In the enterprise, except for the front-end development position, is it the back-end development? of course not. This is what I want to say, hoping to give students a little thought. In Internet companies, there are UE engineers with very good aesthetics. They often take aesthetics from the user's perspective, improve user experience, and can make various demos before the product is actually launched; products with market research and demand analysis Manager PM, with rigorous logical thinking and good communication skills; with the aforementioned front-end engineer FE, who is responsible for sending user-submitted requests to the back-end, and receiving the results returned by the back-end for display; software R&D engineer RD , Need to have certain R&D capabilities, bug location and repair, system performance optimization capabilities, etc.; have test development engineer QA, the final check before going online; also do operation and maintenance OP, responsible for maintaining and monitoring online stability; have operations Yes, large shopping festivals such as Double Eleven generally require strong operational support; there are big data frameworks such as hadoop+spark+storm; some do infrastructure; some do algorithm analysis. . . There are more positions.

        What do I need to master for C++ background development?

This topic is a bit big, and a side dish like me can only be used as an inspiration. Language is only the basis, and you cannot blindly study syntactic sugar. I remember when I was in school, I especially liked to study syntactic sugar. Thinking about it now, I wasted a lot of time. Of course, as a C++ back-end R&D engineer, you first need to master the basic grammar of C++, and the libraries and algorithms commonly used in STL . If you think this is not enough, you can learn about the boost library systematically . If you don't have a good one, just look at C++11. Many of the new things are from the boost library. Of course, just mastering the language is not enough. When C++ is used for background development, in addition to calling each other through the lib library or the so library, the module and the module directly call each other through the network interaction. At this time, you need to master Basic knowledge of multi-threaded programming and network programming, of course, due to the need for development efficiency, now you do not need to build a network service framework from scratch, such as: ACE, boost's asio and libevent. Of course, there are various open source RPC frameworks, such as google-rpc. You can send and receive network packets by calling local functions, so easy! So how is the format of the network communication packet defined? The client and server need to agree in advance? Data interaction formats, commonly used include: js on, xml, and protobuffer . Usually the front-end and back-end interactions will use json, and the interaction of the back-end modules, you can choose whatever you want; for the interaction of the HTTP protocol, I use more json, and tcp protocol, I use protobuffer more often. Of course, the server platform is very important. The domestic background development is basically running on the Linux system, so you need to master the commonly used commands of the Linux system so that you can use it freely on the Linux system. So, if you want to engage in Or you are about to engage in C++ background development, please temporarily leave the C++ learning under VS, from now on, turn to C++ development under the Linux platform, there areYou need the compiler GCC/G++, the gdb used for debugging, if you want to compile all files with one command in turn, please learn how to write a makefile. Well, with a programming language, with a method of compiling and debugging, you can put your application on your Linux system to listen to client requests. What if your program is out of core one day? You have to learn to find out if the bug, in addition to the previously mentioned gdb, in larger applications inside, you have to learn how to master the chase bug, this time, you have to learn to play log , print log and hierarchical, so a If you have a problem, you can quickly locate the problem . With the log, the program can run normally, so how do you calculate the performance or revenue of your program? Therefore, you need to learn to write a scripting language . I personally recommend you to master shell scripts and python scripts . The scripting language can be executed and compiled at the same time. It has a relatively high development efficiency. You don’t need to compile before each execution. If you master the script, you don’t need to So busy anymore, haha.

         Improve your technical hard power . The bottleneck of technology is the problem of cognition. Cognition is not about knowing its name. It is also necessary to know its cause, and even more importantly, to know its origin. This topic is bigger, but suitable for many technical positions. At work, you can't just deal with the business logic of the project, otherwise you will feel that what you are doing is becoming less and less interesting and less technical. You should have a feeling of open source. You should find a relatively NB open source software, such as redis, zookeeper, nginx, etc., to read the source code. Of course, you can also upload some libraries you wrote to gitlab for everyone I give you suggestions, I believe that open source makes progress ; you can go to gitlab to download and learn a variety of interesting open source libraries, which will bring you more sense of accomplishment. At the same time, you have to learn to use various resources to solve various problems you encounter , such as segmentfault, stackoverflow and other famous foreign websites.

For those who are in school and want to switch to C++ background development, self-study takes a long time, high cost, imperfect technology stack, unstructured architecture, and poor self-discipline. Learn to advance, improve the technology stack system, improve yourself, change jobs and raise salaries, and develop to a higher level.

I recommend you to watch this video. The content includes C/C++, Linux, Nginx, ZeroMQ, MySQL, Redis, MongoDB, ZK, streaming media, Linux kernel, P2P, K8S, Docker, TCP/IP, coroutine, DPDK and more High-level knowledge points. Video link: C/C++Linux server development/Linux background development architect-learning video

You can also +C/C++ Linux background server development advanced architecture qun: Jumping

Video content:

 

 

 

 

Guess you like

Origin blog.csdn.net/Linuxhus/article/details/113994124