Michael Safyan

Resources

C++ Resources

Tutorials

Fundamentals

Advanced Concepts

Reference

General

Language

Standard Library

System Libraries

Libraries

General

  • Boost C++ Libraries for a collection of popular, high-quality C++ libraries covering a variety of functionality
  • Qt Project for a collection of libraries also covering a wide variety of functionality

Logging

  • Google Glog (my personal preference) for logging debugging information during program execution
  • Log4Cxx for an alternative, also high caliber, debug logging framework for C++

Testing

  • Google Test for writing C++ unit tests
  • Google Mock for easily defining mock objects and mock expectations for use in C++ unit tests

Serialization

  • Protocol Bufers for cross-language/cross-platform data serialization supporting backwards compatibility
  • Flat Buffers an alternative to protocol buffers optimized for efficiency over safety and ease-of-use
  • Cereal for serialization of C++ objects to/from JSON, XML, and C++ binary format (not cross-language)
  • MessagePack for cross-language / cross-platform binary serialization (backwards compatibility not builtin)

Parellelization

Parsing

  • Flex for generating a lexer scanner (a.k.a. tokenizer)
  • Bison for parsing the tokens generated by Flex
  • GFlags for parsing commandline flags

Networking

Numerical Processing

Encryption

Note that I have not have used any of these, and crypto is hard... use at your own risk

  • OpenSSL is a widely used (and likely to be heavily scrutinized) library for implementing SSL/TLS encryption
  • Crypto++ is a well-reputed and seemingly popular library, but I have no first hand knowledge
  • libgcrypt provides a C interface for very similar functionality to the above
  • GnuPG Made Easy provides a C API to GPG, supporting asymmetric encryption

User Interface

  • CTemplate for generating HTML in C++ (which is how UIs should really work)
  • Wt also for generating HTML, but using a widget library rather than manipulating raw HTML
  • Qt for a well-written, easy-to-use, cross-platfrom desktop GUI library (but UIs should be web apps, right?)
  • WxWidgets an alternative to Qt that has a more permissive license but is not as high caliber

Image Processing

  • Magick++ for image loading and proceessing in C++
  • CImg for simple, light-weight loading, manipulating, and saving of images
  • OpenCV for advanced image processing (though also somewhat difficult to use)
Tools

Compilers

  • GNU Compiler Collection (GCC) for a battle tested, cross-platform compiler that generates machine code
  • Clang for a very promising (but not as heavily tested) compiler that generates LLVM byte code

Build Systems

  • Bazel (my recommendation) for Google's general-purpose, open source build system
  • CMake for an easy-to-use, decalarative. cross-platform build system
  • Gradle for a great, general purpose, modular build system with early C++ support
  • Scons for a more flexible, Python-based, cross-platorm build system
  • GNU Make for very simple projects (while it can be cross-platform, it is easy to get wrong)
  • Automake a predecessor to CMake, Scons, and Gradle (not recommended)

Integrated Development Environments

As a brief reminder, you don't need an IDE to develop; you just need a text editor and a compiler. Also, don't let your IDE be a substitute for a proper, commandline-based build system. Being able to build from the commandline is a must if you want to do continuous integration. Or if you want to collaborate with others who may be using a different IDE.

  • Cloud 9 for an online IDE (what I'm using for this website, in fact)
  • Code Envy for yet another web-based IDE
  • Code Anywhere for yet another web-based IDE option
  • Nitrious.io for yet another web-based IDE option
  • CodeLite for a cross-platform desktop-based IDE
  • Eclipse CDT for an alternative, cross-platform, desktop-based IDE
  • Code::Blocks for yet another cross-platform, desktop-based IDE
  • Xcode for anyone who is developing on Mac OS X
  • KDevelop for anyone who is developing on Linux

Other

  • IDEOne an online compiler for quickly testing / validating small snipppets
  • GDB for a debugger that can step through and inspect the state of a C++ application
  • AddressSanitizer for detecting use-after-free and other bad memory access patterns
  • ThreadSanitizer for detecting data races in multithreaded applications
  • Doxygen for automaticaly generating/extracting documentation
Disclaimer

My statements are my own and do not necessarily reflect the opinions of Google Inc.