C ++ has been around for nearly 30 years since its birth. It is undeniable that it is more difficult to learn than other languages. Its learning difficulty mainly comes from its complexity. Currently, C ++ is much less widely used than before. java, C #, python, and other languages can replace C ++ in many ways. However, many other languages are completely irreplaceable, mainly in industries with high operational efficiency, such as games and efficient servers.
Currently, the number of students studying java, C #, and other languages is much higher than that of C ++. The main reason is that the entry threshold for C ++ is too high. After learning for a while, you may not be able to do anything, as a result, confidence is greatly affected, and thus give up.
I would like to share my experience with you and hope to help new people avoid detours.
Here, we will not discuss specific technical details, but only what we should learn.
I. Technical capability
1. Language
We want to become a programmer and learn a lot of things, but we must start learning from the language at the beginning. The most important thing to learn a language is to choose a book, and the school textbooks should be ignored, I did not write well at all. C ++ Primer is a grand recommendation here. This book is thick and rich in content. The explanation of knowledge is not just superficial. If this book can be read with patience, there will be no major language problems, and it will lay a good foundation for future studies. (Note: The fourth edition of this book also provides answers: C ++ Primer exercises.)
2. GUI
There are many types of GUI Libraries in C ++, such as MFC, WTL, wxWidgets, and QT. These GUI Libraries have their own characteristics. In fact, we only need to first understand one. If we have a deep understanding of a GUI library, it is enough to learn others when necessary, basically, it's almost easy to get started. Although there are many problems in the design of MFC, it is still good to get started, and there are a lot of learning materials, and it can solve problems.
3. data structures and algorithms
Many people have neglected the knowledge of data structures and algorithms, especially the libraries of some programming languages, and almost do not need to implement some data structures and algorithms on their own, as a result, many programmers do not pay attention to or even ignore this knowledge. However, this knowledge is very important when we want to make our programs run faster and occupy less memory. Many programmers do not pay attention to this knowledge at the beginning, but they have been learning this knowledge after several years of work.
You may not need to learn too much at first, but you must know the basic data structures and algorithms.
We recommend "data structure (C language version)". We recommend that you do not focus on Object-Oriented skills when learning data structures and algorithms, this will focus more on the content of the algorithm itself.
4. Database
We recommend that you use mysql instead of encapsulated interfaces. Instead of using the database APIs provided by mysql, you may have a better understanding of the database.
5. Parallel
Cpu clock speed can no longer follow Moore's Law. The trend of cpu development is multi-core. Both multi-thread and multi-process are designed to better utilize cpu performance and provide a better user experience. This requires that if we want to write efficient applications, we must involve parallel computing. If you spend more time on parallel computing, there will be a wealth of returns.
6. Network Programming
Network Programming refers to socket programming. Many C ++ applications are currently developing servers. We need to consider how to develop a high-concurrency, high-throughput, and high-stability server.
7. Design Mode
The design pattern is not a specific technology, but more about how to make the code easier to read, better scalability, and more easy to use.
8. database usage
The C ++ Standard Library only provides some basic functions, so we often introduce some third-party libraries. The most famous is probably the boost library called the quasi-standard library. It provides various technologies used in programming, such as text processing, algorithms, networks, multithreading, and image processing, almost all-encompassing. Others also have some monographs on some aspects of the library, such as ACE for network communication, TinyXML for parsing xml, and OGRE for graphic rendering.
9. Operating System Knowledge
The knowledge of the operating system that programmers need to know is different from that of common users. A master must have a deep understanding of all aspects of the operating system, rather than staying at the usage level. As for what knowledge should be learned, go to "windows core programming" on windows, and go to "a deep understanding of linux kernel" on linux, you should be able to know what you should learn.
2. Project Experience
If all the above content is proficient, it is also a very good programmer. But for programmers, project experience is more important. A good project allows you to use various technologies comprehensively and learn new knowledge. For example, when playing games, you need to learn graphics and decoder knowledge.
Many programmers will ignore the project experience and simply talk about technical capabilities. This is wrong. In fact, this is the relationship between theory and practice. Technology is theoretical knowledge, and project is practice. theory has a role in practice. Practice can deepen our in-depth understanding of theory.
3. Communication Skills
Communication skills are soft power that a Senior Programmer must possess.
The communication skills I want to talk about here are not generally talkative. It is a communication capability built on the technical basis.