Skip to content

Latest commit

 

History

History
152 lines (114 loc) · 9.26 KB

README.md

File metadata and controls

152 lines (114 loc) · 9.26 KB

The Software Tooling Cheat Sheet

Welcome to the curated software tooling cheat sheet.

Have you ever asked yourself: "What is the best tool for this job?"

We searched the far depths of the internet to bring you all the information you need to get started with some of the major tools used in software engineering today. It is of course a non exhaustive list, so feel free to contribute!

Disclaimer

This document is very opinionated. Our goal is not to give you a detailed, unbiased report of exisiting tools, but rather to give a brief overview of what in our experience works best.

Often times we will say one tool is better than another, with little to no explanation added. Sometimes there are valid reasons, in which case we do try to briefly elaborate, but sometimes that is not the case. We might simply say one tool is better than another because it has proven so through experience.

Sample Configs

We have included all kinds of sample config files for different tools in the sample-configs folder. They should get you up and running in no time.

Topics

The best place to go for general advice about anything is probably the repository below. Quote:

"Some useful websites for programmers.

When learning CS there are some useful sites you must know to get always informed in order to do your technologies eve and learn new things. Here is a non exhaustive list of some sites you should visit."

https://github.com/sdmg15/Best-websites-a-programmer-should-visit

  • Very good introduction and explanation why and how to use Vim.
    Recommendation: Print any VIM-CheatSheet and place it near your desk, try out vim-keybindings in other editors.

Java

  • Gradle (2012):

    Similar to Maven, but it has a DSL which makes the config files short, concise and easy to work with. You get the convention and structure from Maven, but with the flexibility of a real programming language instead of bulky XML.
  • Maven (2004):

    Don't use maven unless you have to, it results in very big and cumbersome XML config files. Use Gradle instead.

Javascript

  • THE package manager used when dealing with Javascript/ES6/Node.JS. This is not a build tool on its own, but it does provide "scripts" that can be executed to build the project.
  • THE "build tool" used when dealing with ES6/next-gen Javascript. Combined with Babel it transpiles the next-gen JS to common JS. Great for web development. For libraries use Rollup. Also supports hot reloading of changes.
  • Just like Webpack, but optimized for libraries. It creates smaller bundles with something called tree shaking.
  • Gulp is a "task runner", which means it automates tasks like minification, compilation, unit testing, linting, etc. You write a "task" that does something, and Gulp runs it. This is not just bound to next-gen JS, but also works with common JS.
  • Just like Gulp, but with more configuration to do. Stick with Gulp if you have to, but really you should be using webpack/rollup if you're using ES6. (And if you have a choice, always go with ES6).

Python

  • Simply put, the package manager for python. It uses a file called requirements.txt to store dependencies, which you often have to create by hand.
  • A build tool in python for python that has build lifecylces similar to ones found in maven/gradle.

Ruby

  • A dependency in Ruby is called a Gem. RubyGems is the repository for ruby dependencies, but the actual dependency management is done with Bundler.
  • The actual package manager for ruby. It uses a file called Gemfile to store dependencies.
  • Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.

C/C++

C#

  • The build tool from Microsoft for C#/.NET/Mono. It has a XML config file and doesn't just run on Windows, but also Mac and Linux, wow!

Haskell

  • Cabal is a simple build tool for haskell. While improving, it has some issues with reproducability and conflicting versions of the same package through mutiple projects.
  • Stack improves on Cabal by requiring pinned GHC and package-version.

Let's start of with what is CI? CI is a per the dictionary a process in software development of continuously redeploying and building software from source files.

"Great, now what does it do and why do I care?" Well, the exact functionality of CI tools obviously varies depending on the tool and its respective implementation. Luckily though, most CI services share core functionalities:

  • Building the software from source after git commits
  • Test the respective software using a specified testing methodology
    • The building process can furthermore be configured to be interrupted (and hence canceled), if tests were not successfully passed
  • Continuously create documentation from source files
  • Deploying files automatically to a specified environment
    • N.B.: This is != testing in production

Free

  • A great place to store static sites. It's easy, and even supports custom domains, however no SSL with them.
  • Google Firebase is actually a mobile and web-application development platform, but it does also support free static sites hosting, even with a custom domain and SSL.

Fast & Cheap

  • A great, easy-and-fast-to-setup solution. It is rather cheap, with their cheapest option being $5 a month. Their big bonus: they offer a ton pre-configured VMs (with things like, ubuntu, docker, etc. pre-installed). They work right of the box, and offer more advanced features like load balancing as well. As a student, you even get $50 off with an initial $5 purchase, through the GitHub Student Pack.

  • Probably the cheapest VPS hosting I have seen to-date, with a VM costing only $2.25 a month! Probably the best option if you have a small server that you want to run that doesn't get a lot of traffic.

"The Big Guns"

  • I don't even know where to start. This has everything you can possibly dream of, and more. But it comes at a price: it is a huge pain to setup and maintain! It is one of the best services out there for serious projects, but I would not recommend it for a hobby project.. unless you sign up for BizzSpark, where you can get free credits. Azure is also not cheap, so beware.
  • Super powerful, I have never used it - we will add more later.
  • Super powerful, I have never used it - we will add more later.
  • The default place to buy a domain. But not always cheap, eventhough it can be as well. It does offer super amazing support though.
  • You can also buy domains here.. but they are really cheap!
  • Great to get free SSL certificates.