Programming Resources
While I will try to provide as much material on programming on my website as is reasonably possible, I realize that I won't be able to cover all your needs. Hopefully, if you can't find what you're looking for on own my website, you'll find whatever information you were looking for on one of these superb third-party websites, instead.
These sites cover a wide variety of programming languages, technologies, and topics:
- StackOverflow for help with specific coding questions
- CodeCademy for introductory courses on a handful of programming languages and technologies
- Udacity for online courses on a variety of technical topics
- Coursera for general life-long learning, including courses on technical topics
- Google Developers channel on YouTube for how to leverage Google technologies in your apps
- GitHub for hosting and contributing to code as well as for searching for and browsing code
Everything you need to become an expert in the C++ programming language can be found below:
- A Beginner's C++ for a solid foundation in programming, though it is a bit outdated regarding C++
- Teach Yourself C++ in 21 Days for a more up-to-date lesson (after reading A Beginner's C++)
- The C++ Super FAQ for all your C++ questions and for learning C++ gotchas and best practices
- Advanced C++ Lessons for template metaprogramming and other advanced C++ features
- Unofficial C++ Standard Library Reference for reference documentation on the standard library
- Standard Template Library (STL) Reference for documentation on the C++ containers and algorithms
- C++11 Draft Spec for specifics about the C++ language specification
- IEEE Std. 1003.1 (a.k.a. "POSIX") for C functions provided by UNIX-compliant OSes that can be used in C++
- Native Client for using C++ to build applications in Chrome and Chrome OS
- Android NDK for using C++ to build applications in Android
For writing applications, you may find the following libraries to be helpful:
- Protocol Bufers for cross-languages/cross-platform data serialization
- Google Glog for logging debugging information during program execution
- GFlags for defining and parsing commandline flags in C++ programs
- Google Test for writing C++ unit tests
- Google Mock for easily defining mock objects and mock expectations for use in C++ unit tests
- Boost C++ Libraries for various powerfull, cross-platform C++ libraries (more commandline or server-oriented)
- Qt Project for a variety of powerful, cross-platform C++ libraies (more GUI / native application-oriented)
- Magick++ for image loading and proceessing in C++
The following resources may be helpful in learning more about Java:
- The Java Tutorials for the official tutorials on the Java programming language
- Java 7 API for the standard library reference
- Android API Reference for the libraries provided on Android
- Google App Engine Java for writing a web server in Java on App Engine
For writing applications, you may find the following libraries to be helpful:
- Protocol Bufers for cross-languages/cross-platform data serialization
- Wire for a light-weight version of protocol buffers for use on Android
- Guava: Google Core Libraries for Java for many algorithms, data structures, and utilities
- JUnit for writing Java unit tests
- Robo Electric for writing unit tests for Android code
- Hamcrest for a number of matchers that are extremely useful in unit tests
- Mockito for easily creating mock objects for use in unit tests
- Google Web Toolkit (GWT) for writing user interfaces in the browser using Java
The following resources may be helpful in learning more about Python:
- Python Tutorial for the official tutorial to the Python programming language
- Python 2.x Library Reference for a reference to the standard library on 2.x
- Python 3.x Library Reference for a reference to the standard library on 3.x
- App Engine Python Intro for writing a web server using Python on Google App Engine
- Python for Android for how to build and deploy Python applications for Android
For writing applications, you may find the following libraries to be helpful:
- Protocol Bufers for cross-languages/cross-platform data serialization
- Kivy for writing cross-platform user interfaces in Python that run on Android, Mac OS X, Windows, and Linux
- SciPy for numerical and scientific computing within Python
- Jinja2 for powerful template substition in Python
- Python Image Library (PIL) for image processing in Python
- PyGame for writing cross-platform games in Python
- PyGame Subset for Android for using PyGame on Android via Python for Android
The following should prove useful for learning more or finding reference information about HTML, CSS, and JavaScript:
- Inroduction to HTML for learning the basics of HTML
- CSS Tutorial for learning the basics of CSS
- JavaScript Guide for an introduction to JavaScript
- JavaScript Reference for Mozilla's reference documentation on JavaScript
- CSS Reference for Mozilla's reference documentation on CSS properties
- HTML Reference for Mozilla's reference documentation on HTML
- HTML5 Rocks for staying up-to-date and learning about new web platform features
When writing a web application, you may find the following libraries and tools to be helpful:
- Polymer for reusable UI widgets using Web Components
- AngularJs for a web application framework for writing single page applications in JavaScript
- PhoneGap for packaging HTML/CSS/JavaScript as native apps and gaining access to native platform features
- Closure Compiler for optimizing and minifying JavaScript
- Clean CSS for minifying your CSS code
- A Practical Guide to Algorithms Using Java Lecture Notes for a well-taught introductory course in algorithms
- A Practical Guide to Algorithms Using Java Text Book the textbook corresponding to the lecture notes
- Algorithms Lecture Notes for additional lectures/notes from another algorithm's course
- Algorithms Tutorials on TopCoder for help with various algorithms concepts
- Git User's Manual and Pro Git Book for the Git verion control system
- Bazel for Google's fast, scalable, reliable, extensible, open source build system
- GNU Make Manual for the Make build system
- CMake Documentation for the CMake build system
- Gradle User Guide for the Gradle build system
- NPM documentation for the NPM dependency manager