Technology development direction for C/C++ programmers (highly recommended!!)

Hello everyone, my name is Ah Q.

Today's article is dedicated to students who are still confused and don't know what direction they want to develop in C++.

When you look back in a few years, you will definitely thank yourself for your hard work!

As a very popular object-oriented language nowadays, C++ has many applications. There must be one that you like and is suitable for you.

The development direction of C/C++ is very broad, including but not limited to the following directions, for reference only! ! !

picture

1. Backend/server development engineer

C++ backend/server development, because the main languages ​​​​for Internet backend development now are C++, Java, and Golang. However, the main advantage of C++ is that its performance is very good, and it squeezes the CPU to the extreme; Java and Golang are more suitable for writing business code, I know Several of the big Java guys in the company switched to using Golang when they went to the company during the school recruitment. Backends with strict performance requirements will be developed in C++ first. The backend development of large companies such as bd and tx are all developed in C++ language. In the field of high-frequency trading, quantitative private equity companies and securities companies are also using C++ language for back-end development. The blogger himself is also doing C++ back-end development in the securities industry.

Back-end development must first be proficient in the C++ language, and must also be familiar with operating systems, computer networks, Linux network programming, design patterns, databases, common data structures and algorithms, and various back-end middleware.

Regarding back-end development, my previous sharing basically updated the article based on the needs of this area, from the simplest C language basics to some subsequent algorithms. I hope everyone can lay a good foundation and learn more later. Advanced things can have a better foundation; and now school recruitment not only values ​​the basics, but also your practical ability, so I hope everyone will stop suffering from the basics.

【Back-end development】

  • Solid basic programming skills, master C/C++/JAVA and other development languages, commonly used algorithms and data structures;

  • Familiar with TCP/UDP network protocols and related programming, and inter-process communication programming;

  • Understand scripting languages ​​such as Python, Shell, and Perl;

  • Understand MYSQL and SQL language and programming, and understand NoSQL and key-value storage principles;

  • Comprehensive and solid software knowledge structure, mastering professional knowledge such as operating systems, software engineering, design patterns, data structures, database systems, and network security;

  • Understand distributed system design and development, load balancing technology, system disaster recovery design, high availability system and other knowledge.

Below are the recruitment requirements of a certain company for your reference.

picture

Take a look at the requirements for the two positions above. Not only are academic qualifications required, but some also require relevant internship experience. This has already filtered out a large number of people, because most people complete school tasks step by step in school, and only some students who have planned in advance in this direction are making arrangements in advance.

You also need to have a good foundation in data structures and algorithms. Those students who have ACM experience or competition experience will have an advantage, so if you are a freshman or sophomore, you should actively participate in competitions like this, regardless of whether your school is Very ok, that is a very good resume.

For language, it is definitely necessary to master it. As for C++, if this is the first time you see this article, I suggest you pay attention and read the previous articles. It will definitely improve you a lot. .

Then there is TCP/IP. Whether it is development or testing, as long as the company you are interviewing for is similar, this content will definitely be asked.

There are other uses, such as MySQL, Nginx, Redis, etc. If you want to become an excellent back-end development engineer, learning them is the only way.

Therefore, if you want to do the back-end, language ability is the most basic requirement. There are other learning contents, you can read the previous contents.

2. Desktop client development engineer

This type of client product mainly refers to applications on personal computers. There are Windows client development engineers and Mac client development engineers respectively, mainly focusing on interface and logic development on Windows and Mac.

[PC client development]

  • Bachelor degree or above in computer software related major, love programming, solid foundation, and understanding of algorithms and data structures;

  • Familiar with the memory management, file system, and process thread scheduling of the Windows operating system;

  • Familiar with MFC/windows interface implementation mechanism, proficient in using VC, proficient in C/C++, proficient in using STL, and experience in network programming under Windows;

  • Proficient in Windows client development and debugging, experience in Windows application software development is preferred;

  • Passionate about innovation and solving challenging problems, with good algorithm foundation and system analysis capabilities.

picture

Again, language is fundamental. This type of position is generally developed in a Windows/Mac environment. The development tool used is Visual Studio, and some frameworks in it also need to be understood.

Some commonly used tools, such as Cmake, etc., are also essential in the client development process.

Regarding operating systems and computer networks, no matter what position you are working in, C++ is a must-have question in the interview, and it is definitely something you must know. Multi-process, multi-thread, and network programming are also indispensable.

In recent years, QT has gradually become popular as a development framework for cross-platform C++ graphical user interface applications. It can be used to develop both GUI programs and non-GUI programs, such as console tools and servers. Qt is an object-oriented framework. Using special code generation extensions (called Meta Object Compiler (moc)) and some macros, Qt is easy to extend and allows true component programming. If you are interested, you can also study. Now the recruitment of this position in the market is slowly increasing, and the prospects are good.

So if you want to develop C++ but don’t want to be involved in the backend, you can also do this if you are interested in the client direction. It is not like Android or IOS that requires Java and object-c. The threshold for entry is mainly the learning of C++.

3. Graphics/Games/VR/AR

The above ones are considered to be in the same category.

For example, graphics development engineer, this position has a higher threshold than ordinary development engineers. The programming language is C++, but to learn more mathematical applications, such as linear algebra, analytic geometry, calculus, etc., you also need to understand the GPU architecture.

Some of the more common graphics functions are already provided by commercial game engines or renderers. Graphics development engineers mainly make some modifications according to project needs, or develop some special new functions. Compared with other business-related jobs, this area is more difficult, so there are relatively few people coming in.

Graphics is generally sensitive to performance, especially real-time applications (such as games). Each frame only has an upper limit of 16.6 milliseconds, and the programming requirements are still quite high.

There is also the need to learn to use some game engines, such as Unity, cocos2dx, UE4, etc., and it takes some time to use them.

【Game Client】

  • Bachelor degree or above in computer science/engineering related majors, love programming, solid foundation, and understanding of algorithms, data structures, and software design related knowledge;

  • Master at least one programming language commonly used in game development, with C++/C# programming experience preferred;

  • Applicants with experience in using game engines (such as Unity, Unreal) are preferred;

  • Applicants who understand certain aspects of game client technology (such as graphics, audio, animation, physics, artificial intelligence, network synchronization) will be given priority;

  • Passionate about innovation and solving challenging problems, strong learning ability, analytical and problem-solving ability, and good sense of teamwork;

  • Ability to read technical documents in English;

  • Love games.

picture

The above is a development position for a game company. For game companies, effects and performance are highly pursued. It is not an easy task for those who are recruiting in the autumn, because most schools do not offer this course. If you are very interested in this direction, you can also change the language or direction, but generally The threshold is not very low.

4. Test development engineer

Some people may ask whether test development is testing or development. In essence, it is still testing. Because testing is the core and development is the means.

Generally speaking, the position of test developer must require you to understand research and development, understand testing, and have a certain ability to work in depth. Then you need to know Java, Python, Shell, SQL, etc., these are the most basic, and then conduct business testing.

【Test development】

  • Bachelor degree or above in computer or related major;

  • One to two years of programming experience in C/C++/Python or other computer languages;

  • Ability to write test plans, test cases, and implement performance and security tests;

  • Have the ability to implement automated systems;

  • Ability to locate and investigate product defects and debug defects at the code level;

  • Be proactive, responsible, and have a good team spirit.

picture

Let's take a look at these job requirements for a certain position. For testing-related positions, computer basics are also a must. You don't need to talk during the interview. At least you have to answer the questions nine times out of ten.

For students majoring in software engineering, the school will definitely offer courses related to software testing. Black-box and white-box testing are the most basic...

Some people may also have misunderstandings about the test development position, thinking that it is just a click of the mouse (but I do have friends who do that kind of testing). This is not the case. It not only requires testing basics, but also has certain requirements for development. Yes, you must at least be familiar with Java, but you also have opportunities and advantages if you are familiar with C++. There are many other technologies, and you need to learn a lot based on the specific job requirements of the people the company wants to recruit.

In addition, students in the testing department also need to have better personalities, because they need to communicate across departments, and you have to judge your own taste. . .

5. Network security/reverse development engineer

In fact, network security development engineer is a subdivision of network security construction and implementation positions under the general direction of network security.

So for network security development engineers, you still need to be familiar with computer composition principles and operating systems, and you also need to be familiar with some basic knowledge of network security.

【safety technology】

  • Love the Internet and have a fanatical pursuit of operating systems and network security, regardless of major;

  • Be familiar with vulnerability mining, network security attack and defense technologies, and understand common hacker attack techniques;

  • Master basic development capabilities and be proficient in using C/C++ language;

  • Have a good grasp of database, operating system, and network principles;

  • Applicants with experience in software reverse engineering, network security attack and defense or security system development will be given priority.

picture

Let’s analyze it based on the specific job requirements of a security company. This is a vulnerability direction. In fact, I have also seen that some companies have quite high requirements for security development engineers. They must have 985, 211 or a master's degree... There is nothing you can do about it, it is normal.

Let’s take a look at the job requirements. Some of the subdivided skills are still relevant. Just looking at the first two, have you noticed that no matter what position, there are requirements for programming languages, computer composition principles, computer networks, and operating systems! ! !

In terms of current understanding, these are things that development engineers must understand by default.

The security development of this vulnerability direction does not require one or two other technical requirements. In fact, it does not matter if you are a graduate student. How can an undergraduate student have such a detailed technology for you to study and study? ?

There are also bonus points. I think if you have these bonus points, it will be a bonus no matter which position you are in, haha. . .

Therefore, you have to be tough when you are forging iron!

6. Internet of Things/Embedded Development Engineer

This direction has become more and more popular in recent years. Both the Internet of Things and embedded technology can be divided into software and hardware. The scope is very wide, so there are many subdivided directions. The Internet of Things is an industry category, and embedded is a technology category. Their common feature is that both software and hardware need to be learned and understood.

As for embedded, I mainly do some microcontroller software development. Students majoring in computer science and technology and electronic information must have played with that in school. There are also Linux software development, driver development, and embedded system software development. Relatively speaking, it is more It is close to the underlying development, so the language used must be C language. In addition to software learning, there are also hardware aspects. You must understand timing diagrams, circuit diagrams, and assembly language, because C language disassembly may be used during debugging. FPGA and DSP software development are relatively soft among the upper-level hardware majors, and there are also some other industrial control software developments.

Compared with other software development, the direction of embedded employment is broader and deeper, and the employment opportunities and entry benefits are better than those of ordinary software engineers.

[Embedded application development]

  • Have a good programming foundation and be proficient in C/C++ language;

  • Master the necessary knowledge for software development such as operating systems and data structures;

  • Have strong communication and understanding skills and good sense of teamwork;

  • Applicants with development experience on Linux/Android system platform will be given priority.

picture

In the above, the job requirements for embedded development are still very clear and relatively detailed.

As mentioned before, the embedded area is mainly C/C++, as well as our common data structures and algorithms. If you are lucky enough to see it here, you may wish to follow the blogger and take a look at the data structures and algorithms summarized earlier. The content related to algorithms is still very helpful for the school to recruit students with 1-3 years of experience.

The Linux system is also essential, and development like this is generally not done on Windows. On a Linux system, you must know Shell, and Makefile is indispensable for better and faster compilation.

There is also multi-process and multi-thread programming later. In fact, I have introduced these in detail in the previous chapters. Everyone can learn at any time, and those who need PDF will have corresponding ways to obtain it.

The latter part is more vertical, and you need to know MCU related things, but in fact, as a school recruitment, if you don’t have experience in this area, it will be fine. If the foundation in the front is better, this aspect is still OK for the recruiter. Accept the inexperienced.

Generally speaking, embedded is a very popular direction in recent years. It is very friendly to students who want to enter this field, and the salary and benefits are quite good.

7. Audio and video/streaming media/SDK

Let’s talk about audio and video first. Its essence is to make full use of hardware terminals in extremely complex network environments to bring users the ultimate auditory and visual experience. Therefore, the audio and video development process is a pursuit of the ultimate experience.

[Audio and video codec]

  • Master's degree or above in computer, signal processing, mathematics, information and related majors and directions;

  • Have a solid foundation in video coding and decoding, are familiar with commonly used HEVC or H264, and have a good foundation in digital signal processing;

  • Master C/C++ and have strong coding skills. Familiar with an assembly language is a plus;

  • Strong English literature reading ability;

  • Strong learning ability, teamwork spirit, and strong ability to withstand pressure.

picture

Look, this is the audio and video direction of a certain player, but to be honest, there are still academic requirements. There are often academic requirements for positions. If you have a bachelor's degree, don't even think about it. Some jobs have very strict requirements for academic qualifications.

So as a master's degree, not only the direction of your own research, but also some basic languages, operating systems, and computer principles need to be examined. . .

The bonus points do include verticality. You can also look at the previous bonus points. They are all more vertical and more about having an in-depth understanding of a certain subdivision direction. . .

8. Computer Vision/Machine Learning

In fact, computer vision is a field of artificial intelligence (AI), which enables computers and systems to obtain meaningful information from images, videos and other visual inputs, and take actions or provide recommendations based on this information. If artificial intelligence gives computers the ability to think, then computer vision gives them the ability to discover, observe and understand.

However, these positions generally start with a master's degree, and undergraduates rarely work in these directions unless they are particularly outstanding. Therefore, we ordinary undergraduate students should try not to touch this direction. If you are a master's degree student, it is still necessary to study.

Why do we say this direction? Because most of their things still need to be completed in C++, and Python will also be a very good choice.

【Computer Vision Research】

  • Computers, applied mathematics, pattern recognition, artificial intelligence, automatic control, statistics, operations research, bioinformatics, physics/quantum computing, neuroscience, sociology/psychology, etc., research directions related to image processing, pattern recognition, and machine learning , bachelor degree or above, doctoral degree is preferred;

  • Proficient in basic algorithms and applications related to computer vision and image processing;

  • Strong algorithm implementation ability, proficient in C/C++ programming, familiar with at least one programming language Shell/Python/Matlab;

  • Priority will be given to those who have published papers in academic conferences or journals such as computer vision and pattern recognition, won awards in relevant international competitions, and have relevant patents.

picture

Take a look, you are right. This direction not only requires academic qualifications, but also requires in-depth research on other aspects of knowledge. If graduate students want to find a job in this direction, they still need to work hard.

Generally speaking, school recruitment and social recruitment are much more difficult now than they were back then. Today I look at the cy here, and tomorrow I look at the cy there. It’s harmful.

However, external factors are not a problem. The biggest problem is yourself. As the saying goes, "You need to be strong to make iron." Only when you are strong, the external environment is just the external environment. Don't go to a certain pulse every day to see this or that, creating anxiety for yourself, just do your own thing seriously and it will be ok. .

Also, if you lower your expectations appropriately, you will find a better world. You see all kinds of non-nutritious things every day. What you see on a certain channel are basically people who are at least 40 or 50 years old and live in anxiety forever. , does it make sense to be inferior to others? ? ?

Work hard everyone, the next offer harvester in the autumn recruitment is you!

Guess you like

Origin blog.csdn.net/liuxing__jacker/article/details/133191878