Hello everyone, I am Xiaolin.
Many students who are currently job hunting in the autumn recruitment have given me feedback that finding a job with C++ is quite difficult. Among those who reached out to me, many have good educational backgrounds, including graduates from 985 and 211 universities. They have applied for numerous backend development positions at major internet companies, but the interview opportunities are scarce. Even when they do get an interview, they are often told that they are not familiar with common backend components or that their projects lack complexity, leading to rejection.
I have reviewed many resumes of C++ students, and almost everyone has a Webserver project based on Linux network programming. However, backend development positions do not require you to write low-level network programming.
The most commonly used components in backend work are MySQL, Redis, and message queues, but many C++ students have a weak understanding of these backend components, and the projects they have worked on do not utilize these components. As a result, they may feel that their technical stack does not align with backend positions, putting them at a disadvantage compared to Java and Go students.
There are basically no C++ backend positions in internet companies; the mainstream backend languages are Java and Go. Major internet companies that primarily use Java include Alibaba, Meituan, Kuaishou, and JD.com, while those that primarily use Go include ByteDance, Tencent, Didi, and Baidu.
The only major company with C++ backend positions is Tencent, but as you know, getting in is quite challenging. Moreover, many of Tencent’s projects are starting to transition to Go, and the existing C++ backend projects are quite old. Therefore, there are not many companies where you can apply for C++ backend positions, resulting in fewer interview opportunities. This year, Meituan has been offering a lot of positions, but they primarily focus on Java backend development, so overall, Java students have a much better experience in this year’s autumn recruitment compared to C++ students.
Some students might say, isn’t it true that major companies do not place much importance on programming languages and mainly focus on potential?
Yes, that statement is correct. There are indeed C++ students who have transitioned to Java at Meituan. I have also seen resumes of students who managed to enter internet backend positions using C++. Their resumes include projects that involve MySQL, Redis, and message queues. Although there is a mismatch in language, there is a match in backend experience, so the key is to let the interviewer know that you have backend development capabilities, not just C++ development skills.
However, it is still rare for someone to enter an internet backend position using C++. Since a language transition is required, recruiters are certainly more inclined to hire candidates who are already familiar with Java or Go. After all, training new hires incurs time costs, and hiring someone who matches the language can lead to quicker onboarding.
Is There No Opportunity for C++?
This discussion focuses on the lack of advantages for C++ in job hunting for backend development. If you are specifically aiming for backend development positions, I recommend transitioning to Java or Go, as these two are the mainstream programming languages for backend development.
Additionally, C++ students can also apply for internet client development positions, which do not require backend knowledge. The interview content mainly revolves around C++, network protocols, operating systems, and algorithms, which are areas that most C++ students are familiar with.
While C++ does not hold an advantage in backend development positions, its employment scope is still quite broad. There is a demand for C++ developers in the embedded industry, gaming industry, network security, and industrial software sectors. However, the projects prepared for different directions need to be tailored accordingly. For job hunting in the embedded industry, you need to have experience with microcontrollers and embedded projects, such as smart cars or intelligent robots. For the gaming industry, you need to focus on network or game-related projects. For industrial software positions, you need to emphasize QT client development.
Therefore, while C++ is indeed versatile, you need to work on industry-related projects based on your C++ foundation to enhance your competitiveness, rather than relying solely on a webserver project.
Java vs C++
A significant portion of C++ students’ learning time is spent on language features. They may have read books like “C++ Primer,” “Effective C++,” “STL Source Code Analysis,” and “Deep Exploration of C++ Object Model” to better grasp C++ features and low-level implementations. These books are quite thick, and only a few can persist in reading them all.
An interesting phenomenon may arise where C++ students spend several months still learning language features, while Java students may have completed 1-2 projects. This is largely due to the fact that the Java ecosystem has developed over many years, with many standard frameworks available for immediate use, significantly reducing the cost of project development. In contrast, the cost of developing a project in C++ remains high. If a project involves MySQL and Redis components, you also need to include these dynamic libraries during compilation, which can be a bottleneck for many students.
To vent a little, writing SQL in C++ can be quite challenging, often involving direct string concatenation (which is also the case in major companies). In contrast, both Java and Go have mature ORM frameworks that separate SQL from business code, resulting in better code style and a lower barrier to entry.
Because C++ can directly manipulate Linux system programming and network programming functions, it is more suitable for low-level interactions. Conversely, the application framework ecosystem for C++ is not as mature as that of Java and Go, making C++ less suitable for upper-level business-type development.
Only major companies like Tencent dare to use C++ for backend development because they have invested significant manpower to develop their own framework. Other small and medium-sized companies do not have the resources or time to create such systems, so they primarily use Java or Go as backend languages. Java has open-source frameworks like Spring, Spring Boot, MyBatis, and Spring Cloud, while Go has frameworks like Gin, Gorm, and Go-Zero, which are ready to use and very suitable for backend business development.
Students with good academic backgrounds can also enter communication companies like Huawei and ZTE using C++, as these companies focus on performance and low-level software development rather than backend business development. Therefore, there is nothing wrong with learning C++. However, if you only know C++ and have not learned much about the backend development tech stack, it will be challenging to enter backend positions in internet companies, regardless of your academic credentials. For those looking to develop in backend roles, I still recommend learning Java, as it is a language specifically designed for the backend industry. Even if you cannot enter an internet company, you can still seek positions in state-owned enterprises and banks, which also primarily use Java.
For students without strong academic backgrounds who want to move towards backend development, do not focus on C++. Major companies are hard to enter, and there are few C++ backend positions in small companies, which can make job hunting quite difficult. Backend positions in small and medium-sized companies are mainly Java-based, so learning Java will provide more opportunities for interviews.
Of course, C++ is not limited to backend development. If you want to pursue embedded systems, audio and video development, image processing, game development, or industrial software, then C++ is still the way to go.
While there are many positions available for C++, students should not rely solely on a webserver project for job applications, as this could lead to poor outcomes. Instead, they should:
- Combine C++ with backend projects (projects using MySQL, Redis, and message queues) when applying for backend development positions.
- Combine C++ with embedded projects (projects using STM32 microcontrollers and robotics) when applying for embedded development positions.
- Combine C++ with audio and video projects (projects using FFmpeg and video encoding/decoding) when applying for audio and video development positions.
- Combine C++ with game projects (projects using Unity and Unreal game engines) when applying for game development positions.
- Combine C++ with QT client projects (projects using QT) when applying for industrial software development positions.
In conclusion, there is no hierarchy among programming languages; any mainstream language, whether C++ or Java, can lead to success with effort.
Each language is suited to different industries, so when choosing an industry, it is best to do your homework and see what the mainstream languages are in that field, rather than just using the language you learned in school to apply for all development positions.
Related Historical Articles:
We have achieved results again!
Please take your resume seriously.
I was forced to sign, and I am quite anxious.
Stopped at Tencent’s second interview, a bit regrettable…