Why is C++ Worth Learning Despite Fewer Job Opportunities?

As a language that has been around for over 40 years and still ranks second in the TIOBE index, C++ has a vitality that surpasses many “trendy languages.” Today, we will discuss its past and present, covering essential core knowledge points that you must understand when starting out, along with study suggestions to help you avoid detours.

1. What Makes C++ “Evergreen”? Let’s Look at Its Hard-Core Strengths

First, let’s throw out some data: In the June 2024 TIOBE index, C++ holds a steady second place with a share of 10.03%, second only to Python. Behind this is its irreplaceable application scenarios:

  • Low-level infrastructure: Operating systems (like the Windows kernel), compilers, and databases all rely on C++ for its efficient performance;

  • Audio and video development: The core libraries behind live streaming and short videos, such as FFmpeg and WebRTC, are all written in C++;

  • Game engines: The core logic of Unity, UE4/UE5 engines is all supported by C++;

  • Embedded systems and AI: Control programs for smart bands and in-vehicle systems, as well as machine learning frameworks (like the underlying TensorFlow), all have its presence.

In simple terms, in scenarios where “speed” and “stability” are required, C++ is almost the first choice. For example, in high-frequency trading systems, millisecond-level delays can directly impact profits, and this is where C++’s performance advantages come into play.

2. From 1979 to 2026: How Exciting is C++’s “Evolution History”?

C++’s story begins in 1979. At that time, Bjarne Stroustrup at Bell Labs felt that the C language was not “flexible” enough to easily handle complex projects (like simulation systems), so he added “object-oriented” features on top of C, which is the prototype of C++.

In 1983, it was officially named “C++” (the ++ is the increment operator in C, implying “a little more than C”), and its subsequent development can be described as “steady progress”:

Why is C++ Worth Learning Despite Fewer Job Opportunities?
  • 1998: The first international standard C++98 was released, introducing STL (Standard Template Library), allowing developers to avoid reinventing the wheel;

  • 2011: C++11 was a “revolutionary update,” adding lambda expressions, smart pointers, and thread libraries, modernizing C++ significantly;

  • 2020: C++20 introduced coroutines and modularity, addressing the long-criticized “code redundancy” issue;

  • 2023: C++23 added the print function (finally eliminating the need to write cout<<endl;), and optimized the container library;

  • Future: C++26 is currently being drafted, with the most anticipated “network library” possibly being launched (previously omitted from C++23 due to internal disputes, humorously referred to as “palace intrigue”).

Why is C++ Worth Learning Despite Fewer Job Opportunities?

In fact, each version update addresses real issues: for example, C++11’s smart pointers were introduced to reduce the long-standing problem of “memory leaks”; C++20’s modularity finally eliminated the need to write a bunch of #include in every file.

3. Why Learn C++?

3.1 Outstanding Performance

C++ is undoubtedly the best choice for meeting high-performance expectations. In program development that requires full utilization of hardware capabilities, it can provide maximum assistance. This is mainly because it is a software language close to hardware, allowing developers to benefit from all hardware functionalities according to their needs.

For example, in game engines, the engine is responsible for obtaining physics, collision testing, and rendering 2D images of a 3D environment, while also performing a large number of mathematical calculations in the background, such as matrix operations. In some complex scenarios, a 3D environment consists of millions of triangles, each represented by three points, meaning there is a massive amount of point data to process. To achieve smooth gameplay, all this heavy processing must be completed within 1/60 of a second, which requires the program to run at extremely high speeds, fully utilizing hardware resources. C++, with its direct access to hardware and efficient execution, has become the preferred language for game engine development. Many well-known game engines, such as Unreal Engine, are heavily developed using C++, providing players with an ultimate gaming experience.

Additionally, C++’s compilation method also makes its running speed stand out. Code written in C++ generates a directly executable application file during compilation, which contains native or machine code that can run without other programs or intermediaries. In contrast, languages like Java, C#, or Python generate intermediate code during compilation, which then requires other tools or programs to convert it into machine code, consuming various system resources and resulting in relatively slower running speeds. C++’s compilation method, which eliminates the intermediate conversion step, significantly improves compilation and running speed, reducing overhead.

3.2 Powerful Language Features

  • Object-oriented programming: C++ introduces the concept of object-oriented programming based on C, providing stronger data abstraction capabilities. Through classes and objects, developers can encapsulate data and operations together, achieving data hiding and protection, improving code maintainability and scalability. For example, when developing a graphics drawing program, a “Shape” class can be defined to encapsulate the properties of the shape (such as color, position, size) and the drawing methods within the class. Different shape objects (like circle objects, rectangle objects) can then be created to call the corresponding drawing methods to achieve the drawing of shapes. This object-oriented programming approach makes the code structure clearer and easier to understand and maintain.

  • Generic programming: C++’s template mechanism supports generic programming, allowing developers to write generic algorithms and data structures without having to write separate code for each data type. For example, the containers in the C++ standard library (such as vector, list, map, etc.) and algorithms (such as sorting algorithms, searching algorithms, etc.) are all implemented through templates. By using these generic containers and algorithms, developers can easily handle different types of data, improving code reusability and development efficiency. For instance, we can use the vector container to store integers, floating-point numbers, strings, and other types of data without defining a dedicated container for each data type.

  • Compatibility with C: C++ is a superset of C, meaning any valid C program is also a valid C++ program. This allows developers to easily reuse existing C code libraries in C++ projects while still enjoying the advanced features that C++ offers. For example, many low-level hardware drivers and operating system-related code are written in C, and these C functions and libraries can be directly called in C++ projects, avoiding redundant development and improving development efficiency.

3.3 Large User Community and Abundant Learning Resources

C++ has a large user community, which means that developers can easily get help and support when encountering problems during learning and usage. Whether asking questions on professional technical forums like Stack Overflow and C++ Forums, or searching for open-source projects on GitHub for learning and reference, community members are often responsive and helpful.

At the same time, abundant learning resources also provide convenience for beginners. There are many well-known online learning platforms, such as MOOC and NetEase Cloud Classroom, offering a wealth of C++ introductory and advanced tutorials, including video courses and online programming practice. Additionally, there are numerous books available, such as “C++ Primer” and “Effective C++”, which comprehensively and deeply explain C++ language from basic syntax to advanced programming techniques. These rich learning resources ensure that whether you are a beginner or an experienced developer, you can find suitable materials to help you continuously improve your C++ programming skills.

3.4 Wide Application Areas

C++ has a wide range of application scenarios, and different C++ career paths require different knowledge, but there will still be many overlaps. Friends who are learning C++ can take a look at the following core technologies shared in C++, which can help you avoid many detours.

C++ Syntax:https://www.bilibili.com/video/BV1JWp8zZE88/

Design Patterns:https://www.bilibili.com/video/BV1s5WVz9EwN/

Linux System Programming:https://www.bilibili.com/video/BV1Vr4wz7Exv/

Application Layer Protocol Design:https://www.bilibili.com/video/BV1JJ4XzeEr4/

Now let’s take a look at the various directions of C++, and what skills are required for each direction.

3.4.1 Backend/Server Development Engineer

C++ backend/server development is currently the main language for internet backend development, alongside Java and Golang. However, C++’s main advantage is its exceptional performance, which maximizes CPU utilization; Java and Golang are more suitable for writing business code. I know several Java experts who switched to Golang during campus recruitment. Backends with strict performance requirements will prioritize C++ development, as companies like Baidu and Tencent use C++ for backend development. I am also currently doing C++ backend development in the securities industry.

Backend development requires proficiency in C++, familiarity with operating systems, computer networks, Linux network programming, design patterns, databases, as well as common data structures and algorithms, and various backend middleware.

Regarding backend development, my previous shares have been updated based on the needs of this area, from the simplest C language basics to some algorithms, hoping to help everyone build a solid foundation so that they can learn more advanced topics later. Moreover, campus recruitment not only emphasizes fundamentals but also practical abilities, so I hope everyone does not fall behind in the basics.

[Backend Development]

  • Solid programming fundamentals, mastery of C/C++/JAVA and common algorithms and data structures;

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

  • Understanding of scripting languages like Python, Shell, Perl;

  • Understanding of MYSQL and SQL programming, knowledge of NoSQL and key-value storage principles;

  • A comprehensive and solid software knowledge structure, mastering operating systems, software engineering, design patterns, data structures, database systems, network security, and other professional knowledge;

  • Understanding of distributed system design and development, load balancing technology, system disaster recovery design, high-availability systems, etc.

Below is a company’s recruitment requirements for reference.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

Looking at the requirements for these two positions, not only are there educational requirements, but some also require relevant internship experience. This has already filtered out a large number of candidates, as most people complete their school tasks in a routine manner, and only those who have planned ahead in this direction are prepared.

Additionally, a solid foundation in data structures and algorithms is necessary; those with ACM experience or competition experience have an advantage. Therefore, if you are a freshman or sophomore, actively participate in such competitions, regardless of whether your school is prestigious, as it will be a great addition to your resume.

As for the language, it is essential to master it. If this is your first time seeing this article, I suggest you pay attention to previous articles, as they will definitely help you improve significantly.

Furthermore, TCP/IP knowledge is crucial; whether for development or testing, this content is definitely a must-ask in interviews for most companies.

Other tools like MySQL, Nginx, Redis, etc., are also essential for becoming an excellent backend development engineer, and learning them is a necessary path.

In conclusion, to excel in backend development, language proficiency is the most basic requirement. There are other learning materials available, which can be found in previous content.

3.4.2 Desktop Client Development Engineer

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

[PC Client Development]

  • Bachelor’s degree or above in computer software-related majors, a passion for programming, solid fundamentals, and understanding of algorithms and data structures;

  • Familiarity with memory management, file systems, and process/thread scheduling in the Windows operating system;

  • Familiarity with MFC/Windows interface implementation mechanisms, proficient in VC, mastery of C/C++, and experience in Windows network programming;

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

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

Why is C++ Worth Learning Despite Fewer Job Opportunities?

Similarly, language proficiency is fundamental. These positions are generally developed in Windows/Mac environments, using development tools like Visual Studio, and understanding the frameworks within it is also necessary.

Common tools like CMake are also essential in the client development process.

For operating systems and computer networks, regardless of the C++ position, these topics are always asked in interviews, and you must be proficient in them. Multi-process, multi-threading, and network programming are also indispensable.

In recent years, Qt has become a popular cross-platform C++ GUI application development framework. It can be used to develop both GUI and non-GUI programs, such as console tools and servers. Qt is an object-oriented framework that uses a special code generation extension (called the Meta Object Compiler, moc) and some macros, making it easy to extend and allowing for true component programming. If you are interested, you can study it, as job openings in this area are gradually increasing, and the prospects are promising.

Therefore, if you want to do C++ development but are not interested in backend work, you can also consider this direction. It does not require Java and Objective-C like Android or iOS; the main entry barrier is still learning C++.

3.4.3 Graphics/Game/VR/AR

The above categories can be considered as one.

For instance, a graphics development engineer position has a higher threshold than a general development engineer. The programming language is C++, but it requires a lot of mathematical applications, such as linear algebra, analytical geometry, calculus, etc., and an understanding of GPU architecture.

Common functionalities in graphics are generally provided by commercial game engines or renderers, and graphics development engineers mainly modify existing features or develop new specialized functionalities based on project requirements. Compared to other business-related jobs, this area is more challenging, resulting in fewer people entering.

Graphics are generally sensitive to performance, especially in real-time applications (like games), where there is a limit of only 16.6 milliseconds per frame, placing high demands on programming.

Additionally, you need to learn to use game engines like Unity, Cocos2d-x, UE4, etc., which also require a time investment.

[Game Client]

  • Bachelor’s degree or above in computer science/engineering-related majors, a passion for programming, solid fundamentals, and understanding of algorithms, data structures, and software design;

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

  • Experience with game engines (like Unity, Unreal) is preferred;

  • Understanding of specific game client technologies (such as graphics, audio, animation, physics, artificial intelligence, network synchronization) is preferred;

  • Passionate about innovation and solving challenging problems, with strong learning ability, analytical and problem-solving skills, and good teamwork awareness;

  • Ability to read technical documents in English;

  • Passionate about games.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

The above is a position developed by a game company. For game companies, effects and performance are highly pursued. For those participating in the autumn recruitment, this is not an easy task, as most schools do not offer this course. If you are very interested in this direction, you can switch languages or directions, but generally speaking, the threshold is not low.

3.4.4 Test Development Engineer

Some may ask whether test development is testing or development; essentially, it is still testing. Testing is the core, while development is the means.

Generally, test development positions require you to understand both development and testing, and also have a certain depth of work capability. Therefore, you need to know Java, Python, Shell, SQL, etc., which are the basic requirements, followed by business testing.

[Test Development]

  • Bachelor’s degree or above in computer science or related fields;

  • 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 testing;

  • Ability to implement automated systems;

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

  • Proactive, responsible, and possessing good teamwork spirit.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

Let’s take a look at the requirements for a certain position related to testing. For testing-related positions, a solid computer foundation is essential. During interviews, you are not required to speak fluently, but you should at least be able to answer 80-90% of the questions.

For students majoring in software engineering, schools will definitely offer courses related to software testing, such as black-box and white-box testing, which are the basics…

Some may misunderstand the test development position, thinking it is just about clicking the mouse (though I do know some friends who do that). The reality is that it requires not only a testing foundation but also a certain level of development knowledge; at least familiarity with Java is necessary, but being proficient in C++ also gives you an advantage.

Additionally, colleagues in the testing department need to have good interpersonal skills, as they will need to communicate across departments.

3.4.5 Network Security/Reverse Development Engineer

In fact, network security development engineers are a subdivision of the broader field of network security construction and implementation.

For network security development engineers, a solid understanding of computer organization principles and operating systems is essential, along with familiarity with basic knowledge of network security.

[Security Technology]

  • Passionate about the internet, with a fervent pursuit of operating systems and network security, regardless of major;

  • Familiarity with vulnerability discovery, network security attack and defense techniques, and understanding common hacking methods;

  • Basic development skills, proficient in C/C++;

  • Good grasp of databases, operating systems, and network principles;

  • Experience in software reverse engineering, network security attack and defense, or security system development is preferred.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

Let’s analyze the specific job requirements from a certain security company, which is focused on vulnerabilities. I have noticed that some companies have high requirements for security development engineers, often requiring candidates to be from top universities or have a master’s degree… which is quite normal.

Looking at the job requirements, it is clear that regardless of the position, programming languages, computer organization principles, computer networks, and operating systems are all required!!!

In modern terms, these are the default knowledge that development engineers must understand.

This security development position focused on vulnerabilities has many technical requirements, and it is clear that a master’s degree is often the starting point; undergraduates rarely have such detailed technical knowledge to study.

Having additional skills is always a plus, regardless of the position.

So, to succeed, you must be strong yourself!

3.4.6 Internet of Things/Embedded Development Engineer

This direction has become increasingly popular in recent years, with the Internet of Things and embedded systems being divided into software and hardware; the scope is broad, leading to many specialized directions. The Internet of Things is an industry category, while embedded systems are a technical category, both sharing the characteristic of requiring an understanding of both software and hardware.

In embedded systems, the focus is primarily on microcontroller software development. Students in computer science and technology and electronic information majors have likely worked with these in school, along with Linux software development, driver development, and embedded system software development, which are relatively closer to low-level development, thus requiring the use of C language. In addition to software learning, hardware knowledge is also necessary, including understanding timing diagrams, circuit diagrams, and assembly language, as debugging may involve using C language disassembly. FPGA and DSP software development are relatively higher-level hardware specialties, along with other industrial control software development.

Compared to other software development, embedded employment directions are broader and deeper, with better job opportunities and entry-level salaries than ordinary software engineers.

[Embedded Application Development]

  • Good programming foundation, proficient in C/C++;

  • Mastery of operating systems, data structures, and other essential software development knowledge;

  • Strong communication and understanding skills, along with good teamwork awareness;

  • Experience in Linux/Android system platform development is preferred.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

The above requirements for embedded development positions are clear and detailed.

As mentioned earlier, embedded development primarily involves C/C++, along with common data structures and algorithms. If you are fortunate enough to read this far, I encourage you to check out the previous summaries of data structures and algorithms, which will be very helpful for campus recruitment and for those with 1-3 years of experience.

Linux systems are also essential, as this type of development generally does not occur on Windows. Therefore, on Linux systems, knowledge of Shell is necessary, and efficient compilation often requires Makefile.

Later, multi-process and multi-thread programming are also topics I have detailed in previous sections. You can learn them at any time, and there will be ways to obtain the corresponding PDFs.

As for MCU-related knowledge, while it is acceptable for a campus recruit to lack experience in this area, having a solid foundation is still important, and this is generally acceptable to recruiters.

Overall, embedded systems are a very hot direction in recent years, and for those looking to enter this field, the prospects are very friendly, with quite good salary packages.

3.4.7 Audio/Video/Streaming/SDK

Let’s first talk about audio and video, which essentially aim to provide users with an ultimate auditory and visual experience by fully utilizing hardware terminals in extremely complex network environments. Therefore, the development process of audio and video is one that pursues extreme experiences.

[Audio/Video Codec]

  • Master’s degree or above in computer science, signal processing, mathematics, information, or related fields;

  • Solid foundation in video coding/decoding, familiar with common HEVC or H264, and a good foundation in digital signal processing;

  • Proficient in C/C++, strong coding ability, familiarity with at least one assembly language is a plus;

  • Strong ability to read English literature;

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

Why is C++ Worth Learning Despite Fewer Job Opportunities?

This is a position in the audio and video direction at a certain company, but honestly, there are educational requirements. Positions with educational requirements often mean that if you only have a bachelor’s degree, you may not be considered; certain companies have strict requirements in this regard.

As a master’s degree holder, you will not only be assessed on your research direction but also on your foundational knowledge of languages, operating systems, and computer principles.

Having additional skills in specific areas is indeed a plus, and you can refer to the previous sections for more details on these.

Audio/Video Learning Path:https://www.bilibili.com/video/BV138DoY7E74/

3.4.8 Computer Vision/Machine Learning

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

However, these positions generally require a master’s degree, and undergraduates rarely enter these fields unless they are exceptionally talented. Therefore, ordinary undergraduates should avoid this direction, while master’s students should definitely consider learning more.

Why mention this direction? Because most of the work in this area is still done using C++, and Python is also a very good choice.

[Computer Vision Research]

  • Undergraduate degree or above in computer science, applied mathematics, pattern recognition, artificial intelligence, control, statistics, operations research, bioinformatics, physics/quantum computing, neuroscience, sociology/psychology, etc., with research directions related to image processing, pattern recognition, and machine learning; PhD preferred;

  • Familiarity with basic algorithms and applications related to computer vision and image processing;

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

  • Publication of papers in academic conferences or journals related to computer vision, pattern recognition, or winning awards in relevant international competitions, and having related patents is preferred.

Why is C++ Worth Learning Despite Fewer Job Opportunities?

3.5 Good Career Prospects

  1. Relatively low competition: Although languages like Java and Python have become popular in recent years, with many universities adopting them as mainstream teaching languages, C++’s higher learning difficulty means that there are relatively fewer developers who truly master it. This results in C++ developers having lower competition in the job market, providing more job opportunities. Many companies find it challenging to recruit suitable C++ developers, creating a broad employment space for C++ developers.

  2. Generous salary: Due to C++’s irreplaceable role in high-performance fields, companies are willing to offer higher salaries to developers proficient in C++. Under equal technical levels, C++ programmers generally earn more than those in other languages. Moreover, as experience and skills increase, the salary ceiling for senior C++ programmers far exceeds that of programmers in other languages. For instance, in large internet companies and financial institutions, senior C++ development engineers can earn annual salaries of hundreds of thousands or even more.

Leave a Comment