The Learning Path You Need for C and C++!

The Learning Path You Need for C and C++!

Let’s Discuss Some Interesting Questions:

These questions are frequently asked in private messages and were some of my own confusions during the learning process.

1. Why is it that after learning C or C++, I still can’t create anything?

Answer: If you can create something just by learning a programming language, you must be a genius! Mastering a language only represents completing the “minimum” part; there is still a significant gap between that and actually getting hands-on work done. This gap is represented by the four fundamental programming basics + practical application programming that will be detailed below.

2. Why is everything written in C/C++ command line? Is this really useful?

Answer: Hehe, who says programs running in the dark command line are useless! Our famous Linux system interacts with users through the command line, and many powerful tools in Linux run in that dark command line!

3. From a technical learning and practical application perspective, what are the differences between C/C++ and Java?

Answer: C/C++ is indeed quite different from Java. C and C++, especially C++, have fine granularity and many mechanisms. Although performance is high, the language itself carries a heavy burden, and we prefer to call it a “wheel-making” language! It is precisely because C and C++ have good performance and fine granularity that they can do anything. Java, on the other hand, is a language designed for internet software development (backend and client development) and has a clear concept of an “ecosystem,” making its application areas very distinct. Personally, I think programming in C and C++ is more challenging than in Java, as Java is purely application-layer, while C and C++ require a higher level of capability from programmers.

The Learning Path You Need for C and C++!

1. C/C++ Beginner Stage

When starting out, we mainly focus on developing programming thinking and hands-on skills, deeply understanding procedural and object-oriented methodologies, which are crucial for a future programming career!

Thus, learning the language is more important.

Learning C Language:

Data types, variables, memory layout, basic pointers; strings, one-dimensional arrays, two-dimensional arrays; first-level pointers, second-level pointers, third-level pointers, N-level pointer concepts, pointer arrays, and array pointers; structures, file usage; dynamic library encapsulation and design; function pointer callbacks.

Learning C++ Language:

Object-oriented programming concepts; class encapsulation, constructors and destructors, static members, object management; class constructors (parameterized constructors, default constructors, copy constructors, default constructors) and destructors; dynamic management of objects, friend functions, friend classes, operator overloading; analysis of C++ compiler object management model; dynamic management of class objects (new/delete); friend functions and friend classes; operator overloading (unary operators, binary operators, difficulties in operator overloading, operator overloading in project development); class inheritance, multiple inheritance and its ambiguity, virtual inheritance; polymorphism (concept, significance, principle analysis, polymorphism examples); virtual functions, pure virtual functions, abstract classes (case studies in programming with abstract classes); function templates, class templates, template inheritance.

C++ type conversion; C++ input/output streams (standard I/O, file I/O, character stream I/O); C++ exception handling (exception mechanisms, exception types, exception variables, exception hierarchy, standard exception library); using various IDE development tools: such as VC series on Windows platform: VC++6.0 (quite old); Visual Studio 2013, Visual Studio 2015, Visual Studio 2017, Visual Studio 2019; XCode series on Mac platform, as well as CodeBlock, along with some advanced editors like Notepad++, EditPlus, UE, and common settings and shortcuts for these development tools.

The Learning Path You Need for C and C++!

2. C/C++ Development Advancement

The second stage of learning is quite important; advancing in C/C++ development is a key to securing a well-paying job.

C++ Advanced STL:

STL = Standard Template Library, which is an excellent tool for improving development efficiency. Through this stage, you should master generic programming techniques, understand the application patterns of container classes in C++, and become proficient in using all STL classes.

C++ Advanced Design Patterns:

The most crucial factor determining a project’s success is its overall design. Through this stage of learning, you will grasp an important aspect of object-oriented programming, which is the modeling techniques before coding. Singleton pattern; factory pattern; proxy pattern; iterator pattern, etc., are all things you need to master.

C++ Advanced Data Structure Basics:

This is one of the most essential parts to learn in all programming languages, forming the foundation of programs. Sequential storage, linked storage, circular linked lists;

doubly linked lists, stacks (sequential and linked), queues (sequential and linked);

applications of stacks, basic concepts and traversals of trees, binary trees;

sorting algorithms, merge algorithms, selection, insertion, quick, shell.

Do you know all of the above content?

The Learning Path You Need for C and C++!

3. Advanced C++ Development

The third stage involves mastering the technologies necessary to earn a high salary in the C/C++ field; lacking these skills would only classify you as a junior engineer.

C++ Advanced QT Development:

Master the QT library architecture, graphical interface development model;

Master QT development techniques, message mechanisms, graphical processing;

Master QT network programming, UDP, TCP usage;

Master QT file handling methods, serialization;

Master QT porting techniques across different platforms such as Windows, Linux, iOS, and Android.

C++ Advanced Windows/Linux Network Server:

Master Unix/Linux platform development methods;

Proficient in using system calls;

Proficient in Unix/Linux memory management, process, and thread scheduling;

Master MFC interface development, network programming;

Familiar with network server development methods, proficient in writing TCP and UDP network service programs;

Master the use of synchronous/asynchronous IO models in network programming.

C++ Advanced Database Development:

Master practical skills in SQL language.

Usage of Oracle and MySQL databases.

If you can proficiently master the skills listed above, possess the ability to solve complex problems and technical challenges, and can independently develop some relatively complex functional modules, then a monthly salary exceeding ten thousand is a small matter!

The Learning Path You Need for C and C++!

Mastering the above technologies is what makes a programmer a top talent. The currently sought-after full-stack development engineer understands both frontend and backend. Quickly locating and solving problems is a piece of cake for them; they are often referred to as the mysterious top talent, only seen during technical breakthroughs in the company.

1. The knowledge and skills required for software development at this stage are relatively difficult, and the coding proficiency and standards of senior software engineers need to meet certain requirements;

2. Possess certain project capabilities (including debugging, documentation writing, testing abilities, etc.) and comprehensive technical qualities (including understanding the software lifecycle, understanding design patterns, and essential industry knowledge and experience);

3. Understand mainstream backend technologies and frontend-backend collaboration methods, and be able to comprehend the entire lifecycle of a project from a global perspective.

WeChat Official Account: Programming Technology Planet
Programming Technology Planet

WeChat ID: GGJCPP

Scan to follow for more content

The Learning Path You Need for C and C++!

Give a thumbs up if you like it the most!

Leave a Comment