The best friend among many programmer is of course a computer. Code, test, build and then ship the project was your daily routine and it’s was done in your lovely computer. Every programmer will be a picky when choose their best tools to maximize their productivity and it’s apply to decide what kind of operating system should be used, it’s Windows, Linux, or Mac. Linux and Mac was Unix like operating system and known as the most used by programmer, neither they’re a fanboy or want to be look like a geek, but it’s simply because that is the most comfortable environment for a programmer.

Now, I want to ask something. Did you feel productive while using your computer? Did you do a repetitive task everyday? Did you feel bored with your computer? It’s good when all of those question the answer is no, but of course something wrong if you said yes for all those question. Unix was build by programmer and supposed to be used for a programmer user, so being productive and cut all cumbersome and boring repetitive task it’s the main purpose on Unix operating system.

I will show you how Unix like operating system can really boost your productivity as programmer, though I think for non-programmer user also should read this and let’s see how far you can improve your productivity. The last I feel curious if I can make you, Windows user, to feel tempted to try Unix like operating system or even want to switch from your Windows?

Love Your Black and White Terminals

The old days of computer was in black and white terminal, since the purpose of computer was to solve high computations formula. Which is before those fancy Windows, everything will be executed using terminal because it’s more faster and easier. First, I want suggest you to love your black and white terminal. No, I don’t mean to get rid your Graphical User Interface (GUI) and just living with black and white, but started with always perform your daily task using terminal emulator.

Linux and Mac sure bundled with nice and amazing Desktop Environment (DE), but they also ship a terminal emulator. So, from now on instead opened file explorer try to use your terminal to perform your daily task such as move into directory, copying file, delete file. Or if you want to be more extreme you can get rid of those DE and chose a simple Window Manager (WM) like i3 tilling window manager.

I said that computer was design to remove those cumbersome and boring repetitive task, but I won’t lie that in order to do that it will be a cumbersome and hard especially for you who have minimal experience with terminal and always rely on GUI. So, the first advice from me was love your terminal, get used with it and make it like your daily activity and believe me you will reap a new and of course better experience.

Try Z Shell

Every operating system is build on top Unix Shell, a command line interpreter and the most widely known was Bourne Shell (bash) as the default shell. There is no fallacy with bash, especially it’s proven that stable and reliable trough the time. Even though I want to introduce you with Z Shell (zsh) and with oh-my-zsh and you will feel different. It’s like all of the benefit from bash with ton of new feature in your terminal and it will improve your productivity.

For example, to move into another directory you just need to type command cd and press tab button twice and you will freely to choose which directory you want to move, and it can’t be done with bash. I know that was a simple feature, but it’s really powerful and you need to feel with your own finger when execute command with zsh. There is still many other feature from zsh like plugins and themes and it will boost your productivity, so just set your radar to this amazing fellas.

Mac and many Linux Distro already provide zsh which make you don’t need to install and just need to convert from your current shell (which mostly bash) into zsh with execute command.

chsh -s $(which zsh)

I know that oh-my-zsh is not necessary to use zsh, but I advice that you need this oh-my-zsh because a lot of useful plugins and some themes that can boost your productivity. It’s also provide a basic zsh configuration that we can use immediately which is good. In order use oh-my-zsh just download it and it will automatically recognized by your machine and you can use your powerful zsh immediately.

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

Command Line and Make it Short

So which is faster to move into directory using cd <directory_path> or open file explorer, waiting, and finally move your mouse and click here click there until you find your destination? Or how often as Java programmer you configure maven command like mvn clean install -DskipTests on your favorite IDE instead execute it directly on the command line? Everything that can be done with GUI terminal can do that too, but everything that can be done in terminal sometimes is cumbersome and a little bit difficult with GUI.

I heard some of you complaint How could we remember this long command? Well, don’t worry my friend if you think it’s troublesome to type this long command line then shortened it, made an alias for those long command line. For example, I use Slackware as my operating system and because I use linux flash player package from Allien Bob which have frequent update I always need to upgrade it and to do that I need to use command upgradepkg --reinstall --install-new <package_name> to update my linux flash player. I can shortened it with just type ureinstall because I already defined some aliases and it’s configure on my zsh configuration. So, list all of your daily command line and shortened it from now.

# list of my personal aliases
# normal
alias cl='clear'
alias cls='clear; ls'
alias l='ls -Ahl'
alias tree='tree -a -I ".svn|.git|.hg"'
alias tree2='tree -L 2'
alias tree3='tree -L 3'
alias back='cd ../'
alias back2='cd ../../'
alias back3='cd ../../../'

# java
alias mci='mvn clean install'
alias mcit='mvn clean install -DskipTests'
alias mcd='mvn clean deploy'

# slackware
alias supdate='slackpkg update'
alias sinstall='slackpkg install-new'
alias supgrade='slackpkg upgrade-all'
alias sclean='slackpkg clean-system'

alias uinstall='upgradepkg --install-new'
alias ureinstall='upgradepkg --reinstall --install-new'

Automate Your Life

Have you ever heard about some Russian that automate his life? I thought it’s a joke, but after someone upload his scripts, now I believe with that story and I amazed by him. The moral story is, if you need to spend 10 minutes in building scripts that will automated and saved your life from repetitive task forever, do it. In this case being a lazy is not bad, since our time is precious. Some of you maybe complaint, But he is in different field and his scripts is not really useful on my daily life? Then build your own scripts that will saved your life.

For example, you’re following some cool application that have frequent update and you don’t want left behind with the update so you will always check their site to see if there is any update and if there is any update you will download from your favorite browser then update your application, right? Everything feel alright, but let’s imagine to be able using that application you need several dependencies and in order to download the dependencies you need to visit another website.

From illustrations above you realize how cumbersome and pain just to update a cool application and don’t forget you still need to replace your old installation and of course the dependencies too. This is the time of terminal will save your day. Did you know about application called wget? or even better did you know about rsync? Both are terminal application with purpose to download some file from internet using HTTP, HTTPS, and FTP protocols.

I will give my personal case for this example, as Slackware users I prefer to update my operating system using local repository which is I need to download the repository and store it onto my machine. Sometimes I need to download the current repository from Slackware for have a fun experiment on my virtual machine, so instead download one by one I will use rsync to do that with command

rsync -avzP  bwlimit 100  delete  repo.ukdw.ac.id::slackware/slackware6414.2/ $HOME/slackware/repository/slackware64-stable/

Sure that is very long command to remember and will be cumbersome if I need to type it everyday just for checking if there is any update, right? So here is my personal script to automate this daily task and I just need to execute this scripts to check and update my stable and current repository of my Slackware.

#!/bin/bash

#|-----handy-ruler-------------------------------------------------------------|
# Download Slackware repository from UKDW (Indonesia) mirrors, this script will
# download stable (14.2) and current version for 64bit machine and replace the
# old version. The download speed was limited till 100Kb

# Slackware 14.2 version
echo "Download stable slackware 14.2 repository"
rsync -avzP --bwlimit 100 --delete repo.ukdw.ac.id::slackware/slackware64-14.2/ $HOME/slackware/repository/slackware64-stable/

# Slackware current version
echo "Download current slackware 14.2 repository"
rsync -avzP --bwlimit 100 --delete repo.ukdw.ac.id::slackware/slackware64-current/ $HOME/slackware/repository/slackware64-current/

Thinking in Vim Way

Vim is the oldest text editor that still popular and used by many people around the world. I won’t talking about Vim it must have it’s own story, but I want you to consider Vim way of typing. I believe some of you who already try Vim always shouted WT* with this editor, I know what you feel man but believe me Vim was made long time ago when computer just have keyboard, no interactive GUI, let alone mouse. So every Vim key binding was design to make the user more productive even without mouse and it’s proven with twitter and google mail as example was implemented key binding hjkl to move in their application.

I encourage you to give a try with Vim, familiar with it and believe me you will feel different and want to use Vim key binding. Many application support or have plugins for Vim key binding so why not try to put it on your IDE or why not switch from your favorite text editor into Vim?

The last, talking about key binding there is many advice to remap your caps lock key. Even you’re not interested with Vim but try to remaps your caps lock key into Ctrl key, it will be more easy for your little finger to click caps lock rather than Ctrl key right? Come on, after all when the last time you heavily used that caps lock key? So, why not try to remaps your caps lock?

Conclusion

Unix like operating system sure give many benefits to boost your productivity especially if you’re programmer or related on IT field, but it’s not mean as normal user you can’t gain the benefit of this operating system. To summarize this long story was love your terminal, keep stick at it until you familiar with their command line, make it works like you want, and never move your finger from keyboard and Bomm you will feel more productive than before.