C++ Developer Resources
Introduction to C++
Object oriented programming (OOP) is one of the most powerful tools for software development. C++ was one of the first widely available object oriented languages. It is highly portable and finds use in large number applications. Today it is found in everything from computer graphics to flight controllers.
It has managed to remain popular among developers even as new languages emerge every year. As a compiled language derived from C, C++ performs computation very quickly and can be used for almost any purpose.
Early OOP languages like LISP and ALGOL helped establish the concept of member functions. This idea was expanded by Simula 67 "classes" for maintaining event records. Then concepts went on to influence many other languages. This included C++, which is based upon the highly popular procedural language C. Using the syntax and structure of the C language, the purpose of C++ was to take the power and re-usability of C, and add classes to make it more useful for software development.
Short History of C++
In 1983, Bjarne Stroustrup started developing the C++ language, originally called "C with Classes." This new language was part of his PhD thesis at the University of Cambridge, as a means to make software development faster and easier than by use of Simula or BCPL. With experience at AT&T Bell Labs, he was familiar with C and could thereby extend it to build a programming language that was both highly portable and very powerful at manipulating objects.
The language advanced throughout the 1980's, being renamed to the now familiar C++. (The ++ refers to the increment operator in C — so C++ is C+1.) During these updates, many things were added: function and operator overloading, type checking, and single line comments. The first compiler also emerged, called Cfront.
By 1985, the language was ready for commercial release, and the first edition reference book was released. By 1989, C++ 2.0 came along, adding inheritance, namespaces, casting, and boolean types. The language evolved a lot slower after that, becoming an ISO standard in 1998. Small revisions have been released every 3-4 years since.
What can I use C++ for?
Learning C++ can be a very different experience depending on what your first use of the language will be. Coding with such an established language means that there is a lot of existing code. Most of what you want to do will have already been done. In many cases, libraries will be available which can be used to make your coding experience easier. Some applications even have an Application Program Interface (API) which includes certain functions, classes, types, capabilities, and macros which cut down on the amount of effort required to succeed at your goal. With that in mind, here are a few different industries that rely on C++ heavily:
- Device drivers & embedded software
- Game engines & game programming
- Advanced image or audio processing software
- Telecommunications systems & networking
- Interpreters — compiled binaries for 'Interpreted Languages' (eg, Python)
Some of these industries have found ways to use more abstracted scripting languages. But for any detailed work, knowledge of C++ will be critical. The performance gains from C++ are substantial — especially over interpreted languages like PHP and Perl. So projects with very resource intensive computations will tend to use C++ — often with some multi-threading libraries.
If you already know where you're starting, that's half the battle. If you're just learning the language to know it, consider finding a project you enjoy to help make the learning experience more engaging.
Basic Conceptual Learning
Before jumping into an online class or tutorial series, you may want to familiarize yourself with the core concepts of C++ and Object Oriented Programming (OOP). Understanding classes, objects, abstraction, data types, inheritance, and polymorphism are all helpful to know before writing any code.
- C++ Object Orientated Programming Concepts - TutorialsPoint.com
- C++ Language Tutorials - Cplusplus.com
- A Quick Introduction to C++ - University of Washington Computer Science Department (pdf)
- Introduction to Object Oriented Programming - Codeproject.com
Learning How to Code
There is no best way to learn how to code. Authoring software is a highly complex process. For every new use of a language there will be some kind of learning curve. Different people also learn in different ways. There are online videos, online instructor lead classes, demo code, ebooks, and many other ways to learn. Here are just a few from each category to get you started:
Massively Open Online Courses (MOOCs)
- EdX Introduction to C++ by Microsoft
- Lynda.com C++ Tutorials & Training (registration required)
- C++ Results on Udemy
- C++ Results on Coursera
Online Environments & Compilers
- cpp.sh - an online C++ shell and compiler for testing code
- codechef.com - has an IDE and competitions
- codingground - part of tutorialspoint
Useful Books & eBooks
- Programming: Principles and Practice Using C++ — by C++ Creator Bjarne Stroustrup
- C++ Primer by Lippman, Lajoie, and Moo
- The C++ Programming Language (3rd Edition) — reference by Stroustrup
General C++ Forums
Resources for Certain Applications
There are also great resources C++ programmers. Once you understand the basics of programming, you can start writing the sort of applications you are most interested in. This is the best way to get good at programming C++. There are different resources depending upon the kind of coding you want to do:
C++ for Devices, Drivers & Embedded Systems + Telecom
- Arduino and C++ (for windows) - Arduino is open source hardware that is a great starting place for learning how to program for devices.
- Driver Development at codeproject.com
- Linux Device Drivers, 3rd Edition
- Getting started with Windows Drivers
- Efficiently Coding Communication Protocols in C++ (pdf)
Game Engines & Game Programming
With game programming, you can use existing game engines. Or you can write your own, and code directly with DirectX or OpenGL.
- Learning C++ by Creating Games with UE4
- Cprogramming.com Game Programming in C & C++
- Beginning C++ Through Game Programming
- C++ Forum for Unreal Engine
- Getting Started with OpenGL Wiki
Data & Image Processing
- An Image Processing Application in C++
- OpenCV Tutorial C++
- Soundfile++: A soundfile read/write library in C++
Creating Interpreted Languages
- Writing a Scripting Language - SolidusCode (video)
- Create Your Own Programming Language - Codeproject
Where to go next?
The resources provided here are but a small sampling of the available universe of coding materials and support. Eventually, you want to get to the point where you can specialize. Find a community that supports what you are working on; participate and expand your skills.
Don't be afraid to get help from places like StackOverflow. Or find a forum where you feel comfortable. From there, keep finding new projects. The best way to learn is by doing! Good luck!