Tools of the trade: Software setup for computer programming. Basis

Emil Valeev
3 min readMar 21, 2019

--

My daily-basis

Prerequisites

Required:

  • Ubuntu Linux. “Where there is a shell, there’s a way”.Ubuntu is a “UNIX-like” operating system based on Linux kernel. It’s open-source so you don’t have to paid for it. You can use any other Linux distro (e.g. Debian) if you want, but if you’re new to UNIX I would suggest you Ubuntu. Soon you’ll see that there is no better OS for computer programming than Linux
  • GitHub account. GitHub is a free (but they have a paid accounts) “repository hosting” for open-source software. It’s quite popular and pretty ease to use. This is needed to do version control
  • Git software. And this is a version control system. It’s like a time-machine with portals. You’ll get this soon
  • CURL: HTTP(S) client. Needed to do network stuff (e.g. make request on GitHub to install and run setup script). I believe Ubuntu has CURL out of the box but you better check

Optional:

  • ZSH: is a shell software, makes you available to talk with computers, to give them low-level commands like “create file, delete file, change directory, etc”. When you run terminal, terminal runs iterative shell. ZSH stands for “Z-Shell” like this is the last word in the shell world and human can’t design something better. Well, that’s about to be true. Being not very different from Bash (actually ZSH backward compatible to Bash and can even read its config) it has support of plenty of plugins. You’ll be faster ZSH
  • Oh-My-ZSH: They call them “Framework for ZSH” but if you ask me it’s more like a package-manager. You can install themes and plugins with this. I use theese three on my daily-basis
  • VSCode: Visual Studio Code (not to be confused with its old brother Visual Studio IDE) is an cross-platform open-source code editor based on JavaScript-technologies (React, Node and TypeScript). It’s perfect for web-development and I think good enough for everything else
  • Terminator: Tiling terminal emulator with user-friendly UI and ease to use configuration. I’ll enjoy it if you like i3 or other tiling windows managers. You can use it
  • Firefox: open-source privacy-focused web-browser created by the non-profit Mozilla foundation. There are lot of stories on the internet telling why you shouldn’t use Chrome. TL;DR: 1) monopoly is a bad thing 2) Google spies on you; It’s not performant as Chrome but quite close and it’s much more lightweight in the terms of memory management. Firefox has been rewritten with the Rust programming language and it has a really good UI

Dotfiles

Next thing you’ll need to do is make your configuration sync. I don’t think you want get your computer settings lost don’t you? In Linux world we keep our configurations in “dotfiles” — files starting with dot e.g. .gitconfig is an example of dotfile.

Dotfiles are stored across different places but you can centralize their management with the helps of symlinks. Symbolic link is a file containing nothing but link to another file from somewhere else on hard drive. It’s quite like “Shortcut” in Windows but bit different.

The common approach to manage dotfiles is to create GitHub repository and put dotfiles in. Then we create symlinks to our dotfiles to work with them from one single place. This could be done easily with dotbot, you just need to map links with real paths in YAML config.

Last think I suggest you to do is to create something like setup.sh shell script and manage your system-level dependencies from there. Here is mine for example. The goal is to create a fast way to setup all the software you need to work.

At the end I’ll show you my dotfiles, you can use it with Ubuntu but you better create your own. There also a bunch of dotfiles created by the community so don’t mind to lookup for them

--

--