---
layout: post
title:  "Shell Scripts: Powerful Simplicity"
date:   2021-07-01 16:40:00 +0100
categories: bash productivity shell scripting
---
Playing with Neo4J's cypher shell recently, it reminded me of the sheer fun of using the command line and shell scripting to do stuff.  Fast, responsive and feeling closer to the OS than any GUI, shell scripts can be a developer’s secret weapon.  It’s therefore surprising to me when talented developers show little experience of, or even interest in, command line knowledge. 

Scripts can increase your productivity, automate repetitive tasks and increase accuracy.  For example, they can be used to clone or update repositories, or to parse and analyse huge stack traces.  They are fast, interactive and incredibly flexible.  Additionally, built-in utilities (ls, cat  etc) are often mature, well documented and well tested.  There’s probably one for your task already, but a power user knows their true potential is realised when they’re combined.  The sum of their parts is often greater than the whole.  

You may have read of the benefits of writing code that does one thing, and does it well.  These tools are great examples of this and are designed to be connected.  For example, the humble pipe command may, on its own, be useless, but it acts as the reliable glue that allows you to write flexible and complex scripts that can achieve almost anything.  It does one thing, but it does it well.  

There are disadvantages to using the command line, not least in the steep learning curve, the incredibly unforgiving nature of the syntax and the subtle differences between operating systems.  Further, I imagine it’s entirely possible to have a successful development career without touching the command line. But I maintain that learning and using at least some of these skills will benefit any developer in terms of system knowledge, application design and overall productivity.
