Do not get carried away with tittle Mastering C++. This is a never-ending journey. Because ISOCPP is releasing the baby elephants every three years. With the standard covering almost 1500 pages currently, C++ is not the simplest language to learn and master. I have spent quite enough time in the industry. But still feel imposter sometimes. It’s been quite a while I was thinking of sharing my Modern C++ journey. Although, I am sharing the knowledge piece-by-piece through such articles. But, there are other things as well which helped me through this journey like online tools, books, courses, blogs, etc. So, following is the list of such items in an unordered way.

Some of the Best C++ Websites

C++ Books

Apart from classic & latest Effective series, there are some modern & pragmatic books I found useful.

If you see packt publishing & leanpub, there is a plethora of C++ book available targeting a different area of language pragmatically. Will keep adding this list in future. . .!

C++ Courses

If you see the structure & content of the above courses, they are mostly targeted to experienced C++ devs. It is certainly not for beginners. Though, I haven’t completed some of these courses. But I consider them a best & upto-date.

C++ Blogs/Bloggers

Same as book list. These are the blogs I have explored & enjoyed reading.

C++ Tools

Online Debugger

www.onlinegdb.com is an online compiler as well as debugger tool. It supports many languages but for C++ at the time of writing this article, it supports till C++17. The good feature of this tool that I like most about is code formatting(i.e. Beautify option) and the sublime keybinding.

Latest Compilers + Support Of Boost Library

https://wandbox.org: The less you say the better. One of my favourite tool. I test almost all my blog post code snippets here. wandbox has a variety of compiler with choice of selecting specific version. You can also pass the compilation flags & runtime arguments explicitly. Creating multiple file option is also there.

Analysing Performance Oriented C++ Code

http://quick-bench.com: Quick-benchmark is a handy micro benchmarking tool. Intended to quickly & simply compare the performance of two or more code snippets. Internally it uses google-benchmark.

A thing to note here is the benchmark runs on a pool of AWS machines whose load is unknown and potentially next to multiple other benchmarks. Any duration it could output would be meaningless. The fact that a snippet takes 100ms to run in quick-bench at a given time gives no information whatsoever about what time it will take to run in your application, with your given architecture.

Quick-bench can, however, give a reasonably good comparison between two snippets of code run in the same conditions. That is the purpose this tool was created for; removing any units ensures only meaningful comparison.

https://build-bench.com: is another similar platform. But rather than comparing the run time results. It compares the compile-time(i.e. build time) performance of two or more code snippets. This is quite useful while writing template metaprogramming or variadic template code. As we all know C++ is famous for its compile-time performance. ; )

Seeing Things Through C++ Compiler’s Eye

cppinsights.io

C++ Insights is a clang-based tool which does a source to source transformation. Its goal is to make things visible which normally, and intentionally, happen behind the scenes. It’s about the magic the compiler does for us to make things work. Or looking through the classes of a compiler.

This is the best tool to see things through compiler’s eye. I have understood the importance of this tool when I was writing article :"How C++ Variadic Template Works?".

Typical use case of this tool is to see the transformation of a lambda expression, range-based for-loop, auto, etc.

godbolt.org

This is an interactive tool that lets you type code in one window and see the results of its compilation in another window. Using the site should be pretty self-explanatory: by default, the left-hand panel is the source window and the right hand has the assembly output that shows How compiler converted your code into the assembly!.

Online Developer Documentation

If you are going to cppreference many times in a day through google, in a search of standard library functions. Then runebook.dev might be very useful to you. Its just compilation of cppreference in some sort of dictionary form. You can get whatever API you want with a single place search.

Jumping on New C++ Code Base

Sourcetrail is free and open-source cross-platform source explorer that simplifies navigation in existing source code by indexing your code and gathering data about its structure. Sourcetrail then provides a simple interface consisting of three interactive views, each playing a key role in helping you obtain the information you need:

  • Search: Use the search field to quickly find and select indexed symbols in your source code. The autocompletion box will instantly provide an overview of all matching results throughout your codebase.
  • Graph: The graph displays the structure of your source code. It focuses on the currently selected symbol and directly shows all incoming and outgoing dependencies to other symbols.
  • Code: The Code view displays all source locations of the currently selected symbol in a list of code snippets. Clicking on a different source location allows you to change the selection and dig deeper.

It also supports C, Java & Python apart from C++.

Code Sharing

codeshare.io

Codeshare enables developers to share code in real-time. Write or paste code in your browser, share the URL, code in real-time with friends and team mates. The only drawback of this platform is that you can not compile code. It just shares the code in real-time with audio-video support.

coliru

Compile, Link & Run. Clutter-free simple yet subtle code editor. This is just to share compilable code with an online code editor. You & your teammates can play around it.

repl.it

The repl(read-eval-print loop) is a simple yet powerful online compiler, IDE, interpreter and interactive environment for programming languages. As far as C++ is concerned this is limited till C++17. I use this platform mostly in conducting real-time interviews or to try out small code snippets. They are currently integrating GitHub. Maybe we can make use of a complete development environment online in the near future.

Attaching C++ Code Into E-Mail

As a developer, you have to collaborate with other developers. And there are a lot of tools already out there to collaborate in real-time. But when teams scattered globally, have to support multiple timezones & work asynchronously. Often you find yourself in playing mail games.

And if you have ever attached your code in the mail, you might understand the pain. Even if your mail has rich text format, your code snippet may look ugly. And ugly code demotivates other people to look into. In such a case, you can use tohtml, to generate HTML of your code with highlighted syntax according to your choice of programming language.

C++ Communities

Wrap-Up

Apart from all these online tools, there are many other offline(not considering proprietary) tools. Like profiler, linter, formatter, etc. Which I have not discussed as I consider them to be too specific. But those tools have certainly its place in stack & development cycle. Out of all these, I like clang-tooling(swiss army knife) the most.

Even after all this! To be perfectly honest, I am still learning or I would say Mastering C++ & getting better day-by-day. As I have mentioned in earlier, this is a never-ending journey, but the complexity of this language attracts me & gives me the drive to keep learning.

Note: There are many other books, blogs, courses, tools & tutorials available also to learn Modern C++. But, here I have mentioned the ones that I liked the most & helpful. If you feel that there are other things also I am missing or have any suggestions? You can always reach me from here.