The Software Engineer's Online Handbook

Toptal has compiled the best free online resources for engineers in 2018. Engineers of all experience levels will find great tools for collaboration, open source projects, and free tutorials. Stay a step ahead with emerging industry trends and hiring forecasts, as well as the latest tools and technologies vetted by the elite Toptal team.

Free Online Coding Tools for Developers


“No frills” online compiler/interpreter and simple collaboration tool. Compiles and runs your code, and also gives you a short URL to share with others. Supports C, C++, Haskell, PHP, Perl, Python, Ruby, and more.

What we think: Does the job, but pretty bare bones.

Great online resource that provides interactive interpreters and compilers for an extremely wide array of languages and frameworks. And for JavaScript, not only does it allow you to select the JS libraries and frameworks you want to use, it even lets you specify the versions. Also allows you to pick your editor (Ace, Vim, or Emacs).

What we think: Two thumbs up. These guys seem to have thought of everything.


Enter HTML and CSS and immediately see the results.

What we think: Very useful for experimenting with static layout and styling.


Online compiler and debugging tool which allows you to compile source code and execute it online in more than 60 different programming languages.

What we think: Close runner-up to, but doesn’t support quite as many languages and is a bit less flexible. Still a very useful coding sandbox, though, that may be your first choice depending on the language you’re working in and what you’re trying to accomplish.


Runs JavaScript code online and allows you to select JS frameworks to employ, And like, even allows you to select the versions you want to use. What really distinguishes JSFiddle, though, is that it also provides collaborative capabilities.

What we think: If you’re looking for something collaborative, JSFiddle is the way to go.


Allows you to enter your own custom schema, populate the database, and run queries interactively.

What we think: Great for playing around and experimenting with a schema, without having to setup a test instance of your database in your own environment.

Free Collaboration Tools


Real time collaboration for screen grabs and other graphics. Easily upload a screenshot or other graphic from your computer, share the link, and collaboratively view and annotate.

What we think: Couldn’t be easier to use. Once you use it, you won’t be able to stop. Incredibly useful.

Google Hangouts

Group chat, audio, video, and screen share.

What we think: Video for groups is free (unlike Skype). Can sometimes be a bit flaky, but usually more stable than Skype. Some of the features of Skype, some of the features of, and a number of its own fun features (in typical Google fashion).


Group chat is free; video and screen sharing requires paid license.

What we think: Although the free version is limited to group chat, does have some advantages. Perhaps most notably, mobile version doesn’t kill your battery. Has some nice usability features too.

Online collaborative meeting tool that supports group audio and screen share.

What we think: Relatively easy-to-use and intuitive interface. Better screen sharing for groups, and usually more stable, than Skype.


Group chat, audio, and video (1-on-1 video is free, group video requires paid license). Also supports screen sharing and transmission of files.

What we think: Buggy but very popular. Reasonably good for day-to-day collaboration and communication. Generally good for phone-to-computer communication, but connection quality and stability can be very unpredictable. Screen sharing and video are suboptimal and require high speed Internet to be useful.


A whole new way to manage your team, your workflow, and even your personal to do list. Drag and drop cards between lists to show progress. Add as many people as you need and drag them to cards. Add and reorder lists as you need. See everything just by glancing at the board, and it all updates in real-time. There’s nothing to set up and everyone gets it instantly.

What we think: One of the easiest-to-use and most intuitive interfaces we’ve ever seen. Makes you wonder how you worked without it once you get hooked. Many consider it a real productivity booster and an essential for collaboration.

Open Source Tools / Code for Common Algorithms and Tasks


Simple open source authentication solution in Ruby. Flexible, well-designed API includes a plethora of hooks to allow you to modify or extend default behaviors. Supports both Rails 3 and 4 (a branch is available for Rails 2).

What we think: Two thumbs up for flexibility and extensibility.


Flexible Rack-based authentication solution for Ruby on Rails, based on Warden. Supports having multiple models signed in concurrently. We like its modular architecture and design; makes it easy to just use the parts that you need.

What we think: Two thumbs up for modularity.


A powerful and flexible authentication framework, written in Ruby that aims to abstract away the difficulties of working with disparate authentication providers. Designed to be hooked up to just about any system, from Facebook to LDAP.

What we think: Well architected and solid framework. We also really like that there’s a community-maintained list of OmniAuth authentication strategies, released individually as RubyGems. Good stuff.


Inspired by OmniAuth for Ruby, Opauth enables PHP applications to do user authentication with ease. Provides a standardized method for PHP applications to interface with authentication providers. The Opauth API allows developers to create strategies that work in a predictable manner across various PHP frameworks and applications.

What we think: All the advantages of OmniAuth, but for PHP rather than Rails. Well architected and solid framework, with a growing list of predefined authentication strategies.


An Express-compatible middleware framework for Node.js-based authentication. Passport’s approach is conceptually analogous to OmniAuth (for Ruby) and Opauth (for PHP), authenticating requests via an extensible set of strategy plugins. Simple, straightforward API.

What we think: Clean, easy-to-use authentication framework for Node.js. Need we say more?

Bayesian Belief Network Framework

Bayesian Belief Network Package, supporting creation of, and exact inference on, Bayesian Belief Networks specified as pure Python functions.

What we think: This library is being actively worked on and expanded. Well designed. Worth keeping an eye on.

Probabilistic Programming and Bayesian Methods for Hackers

An introduction to Bayesian methods and probabilistic programming with a “computation/understanding 1st, mathematics 2nd” point of view. Built using Python and PyMC.

What we think: Meant as an introduction to the domain, and is good as such. If you’re new to Bayesian Networks and Probabilistic Programming, this can be a great starting point.


A Python module that implements Bayesian statistical models and fitting algorithms, including Markov chain Monte Carlo. Its flexibility and extensibility make it applicable to a large suite of problems. Along with core sampling functionality, PyMC includes methods for summarizing output, plotting, goodness-of-fit, and convergence diagnostics.

What we think: Very comprehensive, clean API, very well documented. If you’re experienced in the domain, or know very specifically the functionality you’re looking for, PyMC is probably the way to go.


Extends the usability of NumPy and Pandas to distributed and out-of-core computing. Blaze provides an interface similar to that of NumPy’s ndarray or Pandas’ DataFrame but maps them onto a variety of other computational engines like Postgres or Spark.

What we think: Powerful library, but actively being worked on so might be worth marking with “under construction”. Not all the documentation, for example, has kept pace with the evolution of the code. There’s good stuff here though.


Mature, web-based application for analyzing data with Apache Hadoop. Supports Hive, Pig, Impala, Spark, Oozie editors, Solr Search dashboards, HBase, Sqoop2, a file browser, and more. Hue’s libraries are also packaged as an SDK to facilitate building apps on top of Hadoop. Even available in 8 other languages (Spanish, French, German, Portuguese, Brazilian Portuguese, Japanese, simplified Chinese, and Korean).

What we think: Wow, there’s a lot here. Powerful and has a fairly prestigious list of adopters. Note, though, that setup requires satisfying a number of dependencies, so not for those who are technically fainthearted.


H2O scales statistics, machine learning, and math over Big Data. H2O is an extensible Java library that enables you to explore, munge, and model datasets using a range of simple to advanced algorithms. Supports familiar interfaces like R, Excel, and JSON, as well as various data types including HDFS, S3, NoSQL, SQL, CSV, and more.

What we think: Fairly comprehensive, solid Java library. Documentation is OK, but more usage examples would really be helpful.


Open source, distributed SQL query engine for running interactive analytic queries against data sources of all sizes ranging from gigabytes to petabytes. Designed and written from the ground up for interactive analytics, approaching the speed of commercial data warehouses while scaling to the size of organizations like Facebook. Supports pluggable connectors for Hadoop/Hive, Cassandra, and TPC-H.

What we think: Man, this is good stuff. Very comprehensive and well documented. Well worth a look.


Text classifier based on Decision Trees ID3, Naive Bayes and KNN algorithm in C++ and Java.

What we think: Fairly basic, but does the job.

Generalized K-Means Clustering

Generalizes the Spark MLLIB K-Means clusterer to support arbitrary distance functions. Written in Scala.

What we think: K-Means clustering in Scala. Woo-hoo!


Web mining module for Python, with tools for scraping, natural language processing, machine learning, network analysis, and visualization. Well documented and bundled with over 50 examples.

What we think: Refreshing to see a library written with such an eye toward usability. Great features, clean API, excellent documentation. Kudos.

Snake Charmer

An out-of-the-box Python workbench for data analysis, statistical modeling, scientific programming, data mining, machine learning, mathematical programming, and visualization. Runs IPython and all the associated tools in a sandboxed virtual machine.

What we think: Lots of features, but lots of dependencies. But if you already use IPython, this could be a good option for you.


Library based on C, Python, and Matlab that provides optimized (multi-threaded, Blas/Lapack, low level optimization) implementations of computationally demanding functions, such as k-means and exact nearest neighbor search. Several sample programs are provided.

What we think: Works as advertised and sample programs are helpful. An interesting alternative.


Cross-platform Java game development framework based on OpenGL that works on Windows, Linux, Mac OS X, Android, a WebGL-enabled browser, and iOS. The framework provides an environment for rapid prototyping and fast iterations. Instead of deploying to test after each code change, you can run and debug your game on the desktop, natively. Desktop JVM features like code hotswapping reduce your iteration times considerably.

What we think: Really does simplify Java game development. And the Developer’s Guide is refreshingly well written and comprehensive. Two thumbs up.


Fast, free, open source 2D game framework for making HTML5 games for desktop and mobile web browsers, supporting Canvas and WebGL rendering.

What we think: What’s really nice about Phaser is that it has lots of great features for the experienced game developer, while at the same time providing clear documentation and examples to help orient the game developer newbie. We’re impressed.


Game development suite for rapidly building native iOS and Android games with Objective-C and Xcode.

What we think: SpriteBuilder is for iOS and Android what Phaser is for HTML5. Whether you’re an expert developer or just getting started, SpriteBuilder helps you build top-quality games in a fraction of the time.


JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin. Uses WebGL for hardware-accelerated graphics, and is cross-platform, cross-browser, and tuned for dynamic-data visualization.

What we think: These guys “strive for the best possible performance, precision, visual quality, ease of use, platform support, and content” and it shows. Hey Cesium team, keep up the good work.


GeoNode is a web-based application and platform for developing geospatial information systems (GIS) and for deploying spatial data infrastructure. Facilitates the creation, sharing, and collaborative use of geospatial data by Python developers.

What we think: Comprehensive and well-documented. And kudos for being OGC-compliant.


JavaScript library for mobile-friendly interactive maps. Designed with simplicity, performance, and usability in mind. Works across all major desktop and mobile platforms, taking advantage of HTML5 and CSS3 on modern browsers while still being accessible on older ones. Can be extended with numerous plugins, has an easy-to-use and a well-documented API.

What we think: Wow, if all software was designed, written, and documented this cleanly, the world of software would be a much better place. It’s simple, it’s elegant, and it’s powerful.


Toolkit for developing desktop or web-based mapping applications. Written in C++ with Python bindings provided. Uses the AGG graphics library, which offers world-class anti-aliasing rendering with subpixel accuracy for geographic data.

What we think: Good capabilities and reasonably well documented. Heavy emphasis on presentation and graphics quality, so worth a look if that’s your priority.


Open Spatial Component Architecture (OSCAR) is a JavaScript library that you can use in your web pages to add dynamic map content. It extends OpenLayers and uses popular UI libraries (jQuery UI and YUI) to help create a feature rich mapping experience on the web.

What we think: Although originally developed to support proprietary software, its developers deserve much credit for morphing it into an open source project that could be used independently to easily add dynamic mapping to a web page. Clean API and OGC-compliant. Nicely done.


Geospatial data library for writing location-aware applications in Ruby. Includes the rgeo-geojson gem to generate and interpret GeoJSON data for communication with common location-based web services as well as the rgeo-shapefile gem for manipulating ESRI shapefiles.

What we think: A great GIS solution for the Ruby environment.


Graph visualization library using web workers and jQuery. Rather than trying to be an all-encompassing framework, arbor provides an efficient, force-directed layout algorithm plus abstractions for graph organization and screen refresh handling. Leaves the actual screen-drawing to you which means you can use it with canvas, SVG, or even positioned HTML elements.

What we think: A great choice for sophisticated web developers, due to its flexibility. But if your a graphing newbie or are looking for easy out-of-the-box functionality, you should probably look elsewhere.


Dynamic HTML5 visualization supporting fast interactive HTML5 charts.

What we think: Dynamic and fast but fairly rudimentary. Documentation is adequate but not great.


Interactive visualization tool for networks and complex systems (link analysis, social network analysis, etc.) as well as dynamic and hierarchical graphs. Runs on Windows, Linux and Mac OS X.

What we think: A powerful, comprehensive, and high performance tool. Really well documented too. Pretty awesome.


Easy-to-use and feature-rich application for drawing graphs of mathematical functions. Makes it very easy to visualize a function and paste it into another program. Also supports performing some mathematical calculations on the functions.

What we think: If you’re looking for a graphing application that is mathematically sophisticated, this is probably the right choice for you. But it’s an application (albeit open source), not a library.


Python 2D plotting library that produces publication quality figures in a variety of formats. Generates plots, histograms, power spectra, bar charts, error charts, scatterplots, and more, with just a few lines of code.

What we think: We agree with their self-assessment: “matplotlib tries to make easy things easy, and hard things possible”. Easy to use, well documented, feature rich. Good stuff!


Dynamic SVG charting library written in Python. Supports a wide array of chart types and lots of options for customization.

What we think: A nice selection of chart types that take advantage of the features of SVG, and with a fair amount of flexibility and customizability provided. Worth checking out.


JavaScript toolkit for creating the elements you need to for interactive graphs (i.e., renderers, legends, hovers, range selectors, etc.). Uses D3.js under-the-hood, so graphs are drawn with standard SVG and styled with CSS.

What we think: Easy to use, easy to customize, uses SVG. What a toolkit should be. Two thumbs up!


JavaScript library dedicated to graph drawing, focused on network visualization. Makes it easy to render networks on web pages and to integrate network exploration into web applications.

What we think: If web-based network visualization, manipulation, and exploration is your goal, this is almost certainly the library you want to be leveraging.


Extensive math library for JavaScript and Node.js. Features include a flexible expression, support for matrices, large set of built-in functions and constants, support for chained operations, and more.

What we think: Powerful, easy to use, and easy to extend. Really helpful toolbox for mathematical operations in JavaScript.


Open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers (“Beautiful math in all browsers”). High-quality typography. Supports copy-and-paste of equations from web pages into Word and LaTeX documents, blogs, and wikis.

What we think: It’s simple, works without plugins, and has a comprehensive API. We like.


Vector, matrix and geometry library for JavaScript, that runs in the browser and on the server side. Includes classes for modeling vectors and matrices in any number of dimensions, and for modeling infinite lines and planes in 3-dimensional space.

What we think: True to its claims, lets you write object-oriented easy-to-read code that mirrors the maths it represents. Good stuff.


Makes working with social networks easier on the Android platform. Provides a common interface for Twitter, LinkedIn, Facebook and Google Plus.

What we think: Still under development, but so far, so good.


Plugin for Ruby on Rails applications that provides all the features of a basic community site (user profiles, blogs, private messaging, events, forums, and more). Strong developer community, being actively used on sites that serve hundreds of thousand visitors monthly.

What we think: Strong, solid technology. Works as advertised. Definitely a good choice for Rails developers to easily build a community site.


Ruby on Rails Framework for building distributed social network websites. Modular, flexible, component-based architecture makes it easy to employ only those capabilities needed for your site.

What we think: Very well architected. These guys were really thinking of how developers would want to use this when they designed it. Nicely done.


Social networking widgets are generally heavyweight and slow to load, especially on high-latency mobile connections. SocialCount is a jQuery plugin for lightweight, lazily-loaded, mobile-friendly social networking widgets (to show share counts from Facebook, Twitter, and Google Plus).

What we think: Nice to see someone actually paying attention to performance. Very clean design and well thought out architecture. Can dramatically reduce load time when compared with other social networking widgets.


JavaScript library that enables you to bind arbitrary data to a DOM and then apply data-driven transformations to the document (e.g., to generate an HTML table from an array of numbers, or to create an interactive SVG bar chart with smooth transitions and interaction, and so on). Combines powerful visualization components and a data-driven approach to DOM manipulation.

What we think: This is really the way libraries should be built. Highly functional, highly efficient, highly modular, and easy to use. Need we say more?


Comprehensive set of tools for creating rich interactive data visualizations. Supports a rich set of features for data modeling, visualization, and interaction. Provides optimized data structures for tables, graphs, and trees. The original Prefuse toolkit provides a visualization framework for the Java programming language. The Prefuse Flare toolkit provides visualization and animation tools for ActionScript and the Adobe Flash Player.

What we think: Lots of features. Fairly complex but also well documented. Not for the faint of heart, but a great toolkit for a more advanced developer.


Free (but not open source) tool for visualizing dynamic graphs. Distributed in binary form as a standalone server that responds to requests via XML-RPC, so can interoperate with virtually all major programming languages today. Can be used to visualize and debug complex algorithms and data structures, to discover hotspots in your program through a real-time visual profile, and more.

What we think: Although we are big fans of open source (which this is not), this is still a very valuable free tool that can easily integrate with your application to provide some fairly advanced functionality.


Screen scraping and web crawling library for PHP. Provides a clean API to crawl websites and extract data from the HTML/XML responses.

What we think: Plain vanilla, no frills, but does the job.


Web scraping utility using Node.js and jQuery.

What we think: Helpful, but really basic.


Lightweight Ruby web crawler/scraper that extracts structured data from pages.

What we think: Ideal if you don’t want to deal with all the complexity of getting the page and parsing it into your own data structure. Wombat handles all that for you and provides you with its own set of structured data. Great if that’s what you want; can be a bit frustrating if you want to “get at the guts” yourself. But well designed for what it does and for its intended audience.

Free Online Tutorials, Courses, and Information

After Hours Programming

Web design and development tutorials (not just programming). JavaScript, PHP, ColdFusion, Python, SQL, HTML, CSS, SEO, Graphic Design, Information Architecture, Usability.

What we think: A nice way to get an intro to a new technology, but it does tend to be intro-level.


Learn to code interactively, for free. JavaScript, jQuery, Python, Ruby, PHP, HTML, CSS.

What we think: A nice and very interactive way to get exposed to a new technology, but it does tend to be intro-level.


Free online courses including, but not limited to, computer programming. Features online, often multi-week, courses taught by college professors and often sponsored by major universities such as Duke, Standford, MIT, and more.

What we think: More advanced and even senior developers take these courses to learn a new technology well enough to start using it at work right after. Impressive.


Free courses on a wide array of topics. Includes course selections for computer programming and cryptography and information theory. These generally consist of short videos each focused on a fairly specific topic. You can string these videos together to build a custom curriculum for yourself.

What we think: Perfect for filling gaps in your math, engineering, or physics knowledge.

MIT OpenCourseWare

Web-based publication of virtually all MIT course content including, but not limited to, computer science courses.

What we think: This is serious education for seriously hungry intellectuals.

Mozilla Developer Network

Provides a comprehensive collection of links to online resources for learning JavaScript, HTML, and CSS.

What we think: Great for Front-end knowledge. We like that it’s sorted by difficulty. Some great reference materials and cheat sheets too.


Ask questions about anything; get answers, opinions, and thoughts from others. See what others are asking and share your knowledge. Create a blog to share knowledge by writing posts about any topic. Choose from over 400,000 topics to create a feed of information tuned to your interests. Kind of like Wikipedia, but less structured and in Q&A form. (Also see StackExchange below.)

What we think: We’re addicted. Follow the right people/topics, and it will become one the few sites you visit every day.


Conceptually very similar Quora, but generally attracts a different type of question. Although there are exceptions, as a general rule, the difference between Quora and StackExchange can be summed up as follows: Quora is about getting information, whereas StackExchange is about getting solutions to problems.

What we think: The go-to for specific technical questions. If you’re stuck, this is probably one of the first places go. Bookmark this one.


Video style walkthroughs to help you learn HTML5, CSS3, JavaScript, and more.

What we think: Attention visual learners! This is your resource. These elegant videos walk you through Front-end concepts.


Online courses including, but not limited to, computer programming. Courses are mostly free, but for a fee you can get access to projects, code-review and feedback, a personal Coach, and verified certificates.

What we think: A mixed bag. Some truly great resources and some not so great. It’s a good idea to check the reviews of a specific course before signing up.


Thorough online tutorials and references, including “try it yourself” interactive coding sessions, for JavaScript, jQuery, PHP, SQL, HTML, and CSS.

What we think: An official authority on all things web and software. Online tutorials, live coding exercises and more. Not the fanciest experience but plenty of authoritative content for aspiring developers.

Software Industry Trends and Forecasts

Hiring Trends and Outlook

Stay Updated

Want to be notified when this page is updated? Sign up to register your email address for updates.
We will never share your email with any 3rd party or spam you
Want to be notified when this page is updated? Sign up to register your email address for updates.
Thank you for subscribing!
Check your inbox to confirm subscription. You'll start receiving posts after you confirm.