SoFunction
Updated on 2025-03-02

What can C++ bring to us

C++ is precisely an intermediate language, between assembly and high-level language, requiring programmers to understand the internal data storage of computers. Personally, I think that as a student, I still spend my time learning C++, because the courses such as "Design Patterns" and "Data Structures" are basically better coping with C++ (my personal experience). Learn C++, carefully read C++ primer, and then cooperate with The ADAPTIVE Communication Environment (ACE) to understand the design pattern. If you look at "In-depth and easy-to-understand STL", you will find that other languages ​​are the same, and the thoughts themselves remain unchanged.

In the following fields, C++ has fundamental advantages: low-level system programming, advanced system programming, embedded programming, numerical scientific computing, general programming, and hybrid system design, etc. Let's expand and describe it slightly:

1. Low-level system programming: C++ is by far the best low-level programming language.

2. Advanced system programming: including operating system core, network management system, compilation system, email system, text layout system, image and sound arrangement system, communication system, user interface, database system, etc.

3. Embedded systems: including cameras, cars, rockets, telephone switches, cars, etc.

4. Numerical/scientific calculation: including simulation, real-time data acquisition, database access, etc.

On Bjarne's personal homepage, there is a page of applications, which lists some (all or most) systems, applications, and libraries written in C++. Here are some examples:

1. Adobe Systems: All major applications are developed using C++, such as Photoshop & ImageReady, Illustrator and Acrobat.

2. Maya: Do you know what software do you use to make computer stunts of "Spider-Man" and "Lord of the Rings"? That's right, it's Maya.

3. : Use C++ to develop large-scale e-commerce software.

4. Apple: Some important "parts" are written in C++.

5. AT&T: The largest telecommunications technology provider in the United States, with its main products developed in C++.

6. Google: Web search engine is written in C++.

    7. IBM:OS/400。

8. Microsoft: The following products are mainly written in C++ (Visual C++):

        Windows XP
        Windows NT:NT4、2000
        Windows 9x:95、98、Me
        Microsoft Office:Word、Excel、Access、PowerPoint、Outlook
Internet Explorer, including Outlook Express
        Visual Studio:Visual C++、Visual Basic、Visual FoxPro
The .NET Framework class library is written in C#, but the C# compiler itself is written in C++.
        Exchange
        SQL Server
        FrontPage
        Project
All games
        ......

    9. KDE:K Desktop Environment(Linux)。

10. Symbian OS: One of the most popular cellular phone OSs.

I usually use C++ for high-end program development.

The term "usually" has nothing to say, sometimes it is just for company culture or personal hobbies, and uses another language instead of C++, or the other way around. What I mean by "high-end" means: key business processing, extremely high efficiency requirements, high real-time requirements, etc.

I saw that almost all serious industrial control system software and real-time data acquisition, processing and performance (mainly graphics) software are written in C++ (or C, a small number of them are written in Java).

As far as I know, almost every institute I used to use C++ (and some other languages) to varying degrees.

Think about it, what kind of development language is the most commonly used in various variants of modern Unix operating systems so far? (C/C++)

C++ language

C++ language is flexible, but first we need to see if the user can exert its flexibility; C++ language is powerful enough, but we need to see if the user has the ability to exert its powerful functions.

It is not difficult to write a fast program using C++ and a compiler, but it is not that easy to write a robust and efficient large program.

The difference between languages ​​is by no means just the difference between curly braces and begin, end or Sub or End Sub. Once you choose a language, you choose a way of thinking and a programming idea. To break out of the constraints of language, you must first have a deep understanding and thorough grasp of language. Some master-level figures in the world often do not hide their preference for a certain language (I do not specifically refer to C++). Some people have only a little understanding of language, so they talk about breaking out of the constraints of language - you don't need to jump out, because you haven't gone deeper.

Pure technical (academic) research can always bring people pure happiness. C++ is extremely complex and highly researchable, but generally speaking, it is impossible to truly master C++ without 3 to 5 years of continuous learning, thinking and use.

I am not a linguistic or instrumentalist, but I oppose erasing the differences between different languages ​​and different development tools. If a person who holds this view is not ignorant, he has ulterior motives. This is just like the most yelling brand laptop manufacturers like to yell "laptops have entered the homogeneous era". How can miscellaneous brand computers be compared with IBM?

Choosing C++ or choosing Java depends on your personal hobbies and future plans. Although it is just a linguistic difference, the employment areas determined by this are indeed different.

No matter what technical route you take, no matter whether you use it for development or not, learning C++ will always bring long-term benefits. If a developer who is familiar with C++ is not a paranoid, it will be much easier to learn Java or C#.

C++ is just a programming language, and we always use it to solve practical problems, so we need to learn development tools (such as Visual C++), understand operating systems (such as APIs), be familiar with domain knowledge (such as power systems), master other software technologies (such as databases), etc. The ability to write real code and solve practical problems is the only criterion for measuring whether a programmer has a real level.

Design patterns and unified modeling language

Design Patterns and Unified Modeling Language (UML) are two different concepts. The former's main goal is to provide reusable object-oriented software design solutions, while the latter is a standard language for describing software blueprints.

Of course, UML can be used to describe the structure of the design pattern.

The models described in UML can be mapped into C++, C#, Java and other language codes, and can even be mapped to relational databases. The mapping process can be bidirectional and generally has corresponding software tools (or plug-in) support.

Different languages ​​have different characteristics, which will somewhat affect the implementation of the design pattern in the language (method, difficulty). For example, if C is used to describe design patterns, then characteristics such as inheritance, encapsulation, and polymorphism become design patterns that need to be studied, but in any object-oriented language, this is purely redundant.

There are no decent books on the market that use C# as a means to talk about design patterns (I haven't seen them), but this doesn't matter. If you are interested, you can read the book "Design Patterns: Elements of Reusable Object-Oriented Software" (Chinese version of "Design Patterns" Machinery Industry Press), although it mainly uses C++ and Smalltalk languages ​​as explanation methods.

The design pattern itself doesn’t matter whether it is good or bad. Choose the appropriate design pattern according to the target problem you want to solve.

System architecture

In enterprise-level software development, architecture is the most important thing. If the architecture is flawed, the system will have flaws. Excellent architecture comes from excellent design. There is no doubt about this.

Any successful software, even if it does not explicitly use modeling ideas and architectural methods, has good design ideas and architecture in its core and subconscious mind.

Only after writing a lot of code and doing some enterprise-level projects with sufficient amounts can you develop a clear understanding of the software architecture. It is hard to imagine a person who has never written a few lines of decent code, but has a deep understanding of program ideas and architecture. This kind of person is probably a person who talks about the war on paper.

We see this situation from time to time, and the software design is not too bad, but programmers either don’t know how to write implementation code, or the code is written inefficiently or not strong enough, and sometimes even the "architecturalist" themselves are at a loss about it.

We often hear some voices, don’t be too focused on language (technical) details, we should look at the big picture, have a view of the overall situation, and how important the architecture is. These are all truths. However, the reality is often that many programmers are not too focused on language (technical) details, but they are far from mastering language (technical) details.

The importance of book knowledge is unquestionable, but don’t think that after reading two books, you will become an awesome architect, designer or modeling expert.

The previous software development practice was focused on but lacked the necessary theoretical guidance. Now it is becoming more and more towards another extreme: the design manuscripts are becoming more and more pictures and texts, and the software developed is much worse than before. What is the significance of this superficial article?

database

Most software has to deal with databases, not only MIS software. Database knowledge is almost necessary, but it is just a difference in depth and breadth of use. So far, every project software I have to access the database, and there is a program that even deals with two databases (Oracle and SQL Server).

If you have taken any course on basic database theory, or have read any book on basic database theory seriously, you may not have to buy more (similar) books. For more than 20 years, the stability of relational database theory has far exceeded that of C++ language:)