C++ senior programmer growth path

  • 2020-05-05 11:41:35
  • OfStack

C++ has been around for nearly 30 years. Admittedly, it is more difficult to learn than other languages. The difficulty of learning it mainly comes from its complexity. C++ is now much less widely used than before, and java, C#, python and other languages can replace C++ in many ways. But there are also many places that no other language can replace, mainly in the need to run more efficient industries, such as games, efficient servers.

Now, the number of people learning java, C# and other languages is much higher than C++. The main reason is that the threshold of C++ is too high, so they may not be able to do anything after learning for a period of time, which leads to a big blow to their confidence and then give up.

I would like to share my own experience with you, in the hope of helping newcomers to take less detours.

We will not discuss the specific technical details here, just say what we should learn.

I. technical capability

1. Language

We want to become a programmer, learn a lot of things will be very miscellaneous, but the first must learn from the language, and the most important thing to learn language is to choose a good book, the school textbook even, not written well. Here I solemnly recommend C++ Primer, which is very thick and rich in content, and the explanation of knowledge does not stay on the surface. If you have the patience to finish reading this book, there will be no major problems in the language and it will lay a good foundation for future study.

2.GUI

There are many GUI libraries for C++, such as MFC, WTL, wxWidgets, QT. These GUI libraries have their own characteristics, in fact, we only need to understand one of them, as long as we have a thorough understanding of one of the GUI library, when we need to learn the other is enough, in essence, they are all the same, we can quickly start. Although MFC has a lot of problems in design, it is still a good introduction, and there are a lot of learning materials to solve problems.

3. Data structures and algorithms

A lot of people have ignored the knowledge of data structure and algorithm, especially some programming language libraries do very well, almost do not need to implement some data structure and algorithm, resulting in now many programmers do not pay attention to or even ignore this knowledge. But this knowledge is very, very important when we want our programs to run faster and use less memory. A lot of programmers don't pay attention to these things at first, but they come back to them after a few years.

It may not be necessary to study too much at first, but the basic data structure and algorithm must be known.

I recommend "data structure (C language version)", in the study of data structure and algorithm, it is best not to pay attention to the object-oriented skills, using C language to achieve, so that more attention to the content of the algorithm itself.

4. Database

Learn the basic knowledge of database, and master the use of a database, mysql is recommended to use, and it is best not to use some encapsulated interface, but should directly use mysql database api, may be more in-depth understanding of the database.

5. Parallel

The main frequency of cpu no longer obeys Moore's law, and now the trend of cpu is multi-core. Whether it is multi-threaded or multi-process, it is to better utilize the performance of cpu and provide a better user experience. This requires us to write efficient applications that involve parallel computing. Pay more attention to parallel computing and it will pay off handsomely.

6. Network programming

By network programming, I mean socket programming. Now many C++ applications are doing server development, how to develop a high concurrency, high throughput, high stability of the server is we have to consider.

7. Design mode

Design patterns are not specific techniques, but rather ways to make code easier to read, better to extend, and easier to use.

8. Use of libraries

The C++ standard library only provides basic functionality, so we often introduce third-party libraries. Perhaps the most famous is the boost library, known as the quasi-standard library, which provides virtually every aspect of our programming techniques, including text processing, algorithms, networks, multithreading, image processing, and so on. There are other libraries that focus on one area: ACE for network communications, TinyXML for parsing xml, OGRE for graphics rendering.

9. Operating system knowledge

Programmers need to understand the operating system knowledge is not the same as the average user, a master is to understand all aspects of the operating system, rather than stay at the level of use. As for what you should know, those on windows should read windows core programming, and those on linux should read in-depth understanding of linux kernel to know what you should learn.

Project experience

If the above content is proficient, is also a more powerful programmer. But for programmers, project experience is more important. A good project allows you to combine various techniques and learn something new. For example, game players need to learn about graphics, players need to learn about codecs.

It is a mistake for many programmers to ignore project experience and talk about technical capabilities. In fact, this is the relationship between theory and practice, technology is theoretical knowledge, doing projects is practice, theory has a known effect on practice, practice can deepen our understanding of the theory.

3. Communication skills

Communication skills are the soft power of an advanced programmer.

What I want to talk about here is not the ability to talk, to talk, to talk. It's the ability to communicate based on technology.


Related articles: