What is C++?
C++ is an enhanced C language typically used for object oriented programming. It traces its origins back well over thirty years. Although it’s far from the oldest computer language, it’s one of the older ones that is in common usage today – so you might say it gets an A for its ability to adapt to changing technological times.
C++ was developed by Bjarne Stroustrup, who did the first development work as part of his PhD project. During the early years, he called the language “C with Classes”. He had begun developing a new language because he felt that no existing language was ideal for large scale projects. Later, when he was working at AT&T Bell Labs, he again felt limited. He dusted off his “C with Classes” and added features of other languages. Simula had a strong influence; AlLGOL 68 played a role. Ultimately, a lot more than classes got added: virtual functions, templates, and operator overloading.
C++ has grown far beyond a one man operation. The name actually came from another developer, Rick Mascitti. It was partly a play on the name of the “++” operator and partly a reference to the enhancement; two pluses may have been a bit of a joke.
The language was first standardized in 1998. Standards were again issued in 2003, 2007, and 2011. C++ is maintained by the ISO, a large standards committee. The current version is C++11. According to Stroustrup, the biggest improvement is in abstraction mechanisms. Among the other goals of the most recent revision: to make C++ a better language for embedded systems and to better support novices.
Development has been guided by certain ideals. C++ strives to be portable; there is an attempt to avoid reliance on features that are platform-dependent.
The standard, of course, isn’t all there is; there are libraries that exist outside it.
Why learn C++?
C++ is a powerful language, though personally its not my choice of programming language (I prefer Python), but I must admit it is like the mother of all modern programming languages (C being the father) like: Java, C#, JS, etc. It is fast, it is powerful, it is also awesome for a lot of people.
There are other features of C++ because of which one should learn it, and they are:
Since C++ is rather lower level, the language is huge and you will need to handle a lot of complex things such as memory management and more. You also need to write a lot of code before you can get a working prototype if you’re planning on building an app from scratch. Since it will be difficult to grasp how all features in C++ works, you can easily shoot yourself in the foot.
As such, since it’s easy for a coding beginner to go astray when learning C++, we strongly recommend learning C++ with a mentor. In addition, C++ has a longer history with game development in general, so there are a lot of proven good practices a C++ mentor from the gaming community can teach you.
C++’s greatest strength is how scalable it could be, so apps that are very resource intensive are usually built with it. Graphics require a lot of resource, which is why the most beautiful 3D games you happily feast your eyes on are often built with C++.
As a statically typed language, C++ is generally more performant than dynamically typed languages because the code is type-checked before it is executed. Java is gaining ground in terms of speed, but in the end, depending on how talented the C++ developer is, C++ can still be faster than Java.
As mentioned before, since you have a lot of control over how your app uses resources, your app can take up very little resource. All in all, since C++ can be very performant in the right hands, enterprises often use C++ to code functions that have a critical reliance on speed and resource usage.
Not Easy to Maintain
C++ needs a lot of code, which means you need a large team to scale a C++ app, and from a time and financial investment point of view, C++ not easy to scale. Also, since you have to do a lot of things manually with C++, it’s easy for less experienced or less skilled developers to introduce errors into the code base. Java was developed because so many professional developers were making mistakes, so in terms of talent-recruiting, a very skilled and experienced C++ developer may be hard to find and also expensive to afford, which is why C++ is not so scalable.
Of course, if your goal is to build a game using a game engine, this may still be a problem but less critical.
First of all, community size is important, because the larger a programming language community is, the more support you’d be likely to get. As you step into the programming world, you’ll soon understand how vital support is, as the developer community is all about giving and receiving help. Moreover, the larger a community, the more people will be building useful tools to make development in that particular language easier. As of now, there are over 600 notable programming languages world-wide.
So, with that context in mind, let’s get into the details of the C++ community.
Highest Overall StackOverflow Answer rate
StackOverflow is a programming Q&A site you will no doubt become intimate with as a coding beginner. While some may argue C++ questions are more likely to be answered because C++ users are more advanced and know how to phrase their questions better, an 83.6% overall answer rate is still quite the feat. C++ is also the 6th most used and followd tag on StackOverflow, with over 69k followers.
Small Meetup Community
At meetups, you can generally network and learn from fellow developers. Meetups often offer mentorship to those who want it as well. The C++ meetup community is somewhat smaller, so if you’re looking to connect with C++ game developers you can check out Game Development Meetups too.
6th Most Popular Language on GitHub
Although much of C++ projects on GitHub might not have been used for C++ development itself, C++ has a long history of being used to develop games and graphics-related programs. The Unreal Game Engine, which was used to develop many AAA title games, is known to have very powerful tools that will make your life easier. It is also particularly good for developing FPS games.
What are the career opportunities as a C++ developer?
If you want to develop mainstream games, chances are you’d need to use C++. Many mobile best-seller games were built with Cocos2d-x, which is a free, open-sourced and cross-platform game engine. Cocos2d-x games are developed with C++, though Cocos2d also supports other languages now. However, as the support for other languages is a relatively recent addition, you’d likely find better documentation for Cocos2d-x.
Furthermore, large companies such as Facebook also may need C++ developers to help optimize their apps or work on their products.
What are the application of C++?
C++ overrides the complexities of 3D games, optimizes resource management and facilitates multiplayer with networking. The language is extremely fast, allows procedural programming for CPU intensive functions and provides greater control over hardware, because of which it has been widely used in development of gaming engines. For instance, the science fiction game Doom 3 is cited as an example of a game that used C++ well and the Unreal Engine, a suite of game development tools, is written in C++.
2. Graphic User Interface (GUI) based applications:
Many highly used applications, such as Image Ready, Adobe Premier, Photoshop and Illustrator, are scripted in C++.
3. Web Browsers:
With the introduction of specialized languages such as PHP and Java, the adoption of C++ is limited for scripting of websites and web applications. However, where speed and reliability are required, C++ is still preferred. For instance, a part of Google’s back-end is coded in C++, and the rendering engine of a few open source projects, such as web browser Mozilla Firefox and email client Mozilla Thunderbird, are also scripted in the programming language.
4. Advance Computations and Graphics:
C++ provides the means for building applications requiring real-time physical simulations, high-performance image processing, and mobile sensor applications. Maya 3D software, used for integrated 3D modeling, visual effects and animation, is coded in C++.
5. Database Software:
C++ and C have been used for scripting MySQL, one of the most popular database management software. The software forms the backbone of a variety of database-based enterprises, such as Google, Wikipedia, Yahoo and YouTube etc.
6. Operating Systems:
C++ forms an integral part of many of the prevalent operating systems including Apple’s OS X and various versions of Microsoft Windows, and the erstwhile Symbian mobile OS.
7. Enterprise Software:
C++ finds a purpose in banking and trading enterprise applications, such as those deployed by Bloomberg and Reuters. It is also used in development of advanced software, such as flight simulators and radar processing.
8. Medical and Engineering Applications:
Many advanced medical equipments, such as MRI machines, use C++ language for scripting their software. It is also part of engineering applications, such as high-end CAD/CAM systems.
A host of compilers including Apple C++, Bloodshed Dev-C++, Clang C++ and MINGW make use of C++ language.
C and its successor C++ are leveraged for diverse software and platform development requirements, from operating systems to graphic designing applications. Further, these languages have assisted in the development of new languages for special purposes like C#, Java, PHP, Verilog etc. As updating of these languages, particularly C++, continues on a periodic basis, their utilization for robust applications is likely to expand as well.
What are the best way and resources to learn C++?
These are the steps you should follow in order to learn C++ in a better way:
1) Get your basics right. Learn the language’s basic constructs(for, while, switch, arrays, strings, struct etc), STL and OOP concepts(ploymorphism, inheritance, composition etc) . Understand how and why these are used or employed in solving a particular real life problem, for eg. where would you prefer composition over inheritance. There are tons of resources available on internet for this. Learn C++ is my favorite and has all the necessary topics explained to the point. Once you have mastered the contents of the site, you could refer to a more exhaustive book as you write non-trivial programs.
2) Develop a project from end to end. Reinvent the wheel and may be implement a web crawler, XML parser, source control system or whatever you feel interested in. Think how you can use your C++ knowledge to build a product. Refactor your code and write unit and integration tests. This will help you to consolidate and increase your knowledge of C++.
3) Contribute to an open source project. Try submitting patches to an open source project written in C+. The size of these projects is much larger than what you develop in college and helps you develop skills that you can’t acquire from the (1) and (2). You will be amazed to see in what different ways C++ is used to solve real world problems.
There are various good online courses available to get started with C++ and become a master in it, some of the best online courses are:
All these courses mentioned are awesome, but the one’s with are (awesome)².
- C++ Tutorial for Complete Beginners (Udemy [Free])
- C++: From Beginner to Expert (Udemy)
- C++ Essential Training (Lynda)
- C++: A General Purpose Language and Library Jump Start (MVA [Free])
- Learn Advanced C++ Programming (Udemy)
- Learn C++ From Scratch: A Complete C++ Course For Beginners (Udemy)
- Learn C++ Programming from beginners to advanced (Udemy)
- Up and Running with C++ (Lynda)
- Introduction to C++ (edX [Microsoft])
- Learn and Understand C++ (Udemy)
Best books to learn C++ are:
**Clicking on the book will take you to your local Amazon store.
My recommendation for other good resources to learn,practice and be updated with C++ are:
- Hacker Rank
- Hacker Earth
- Tutorial Point
- Solo Learn
- Google C++ Style Guide
- Quora C++
- Geeks For Geeks
- C Plus Plus
I want to make this blog a platform for the learners to find best resources and Online Courses available for particular technologies, So I request you all to please share any new resources you know of and will be helpful for everyone, in the comment section below and I will add the same in the article.