A Professional’s Tools
If you go to your local big-box home improvement store and wander to the paint aisle, you’ll find some gizmos and gadgets that promise to make it possible to for an amateur handyman to easily “cut in” the edges between two surfaces that are painted a different color so that you can get a clean, straight line like this:
However, if you ask a professional painter how they do it, they won’t tell you about the coolest gizmo in the world for paint edges. What a professional uses to create a clean edge between two paint colors starts with simply using a high-quality brush, and knowing how to use it right. There are other tools and techniques that go beyond the brush, but that’s where it starts. A simple, quality tool, and the know-how to use it well.
As a bit of a handyman myself, I learned this by asking curious questions of a friend — a professional painter. He was kind enough not just to answer my questions, but to show me. I found myself cringing at the sheer trust that he gave himself to cut in a door jamb with nothing but a brush. However, the results speak for themselves: the right tools in the hands of a professional produce excellent results.
You can see this in other industries. For instance, in response to the over-produced, auto-tuned, digitally-enhanced, talent-not-required garbage that many so-called “musicians” put onto the market, the band Foo Fighters famously produced their album “Wasting Light” using no digital tools whatsoever. The band’s producer cautioned them in the album’s inception,
That means you guys have to be razor‑sharp tight. You’ve gotta be so well rehearsed, ’cause I can’t fix anything. I can’t paste drum fills and choruses around. This is gonna be a record about performance, about how you guys play.
— Butch Vig (credit)
In a time when it’s really easy to record haphazardly and digitally repair it to correct every nuance that’s off-key or off-tempo, Foo Fighters made a bold statement. It’s not about the coolest high-tech tools that make the worst into the best. It’s about the art, the craft, the discipline. The right tools in the hands of a professional produce excellent results.
It’s been over a decade since I was first exposed to downloading, building, and running an open-source program. However, what I discovered in doing so is something very profound. These software suites could be ready to run after typing a single command at the command line. Often a simple
make install would get the software into a working state on my system. If I wasn’t sure it would work right, I could use
make test install to ensure that the software’s self-tests all passed before it installed it onto my box.
The same is generally true today: you can build and run most open source projects with a few simple commands at the command line. Some of the commands have changed, which reflects that the languages, tools, and techniques we use today have evolved, but the process is still relatively unchanged. A few keystrokes and you have working software. The right tools in the hands of a professional produce excellent results.
We software developers are often exposed to system design concepts that are intended to steer us towards building robust software. One concept in particular is the idea of a single point of control (SPOC). This idea, which you might also know as the facade pattern, suggests that a well-defined and simplified interface to a more complex system is often desirable. It allows you to control this complex system in one place, rather than many, and to do so with a simple interface, rather than a complex one.
What I find interesting is that the command line interface (CLI) quite suitably fits the bill for a SPOC when it comes to interacting with the elements of a programmer’s day-to-day tasks. It’s a simple interface that’s easy to understand, consistent, yet powerful and composable enough to solve even the most challenging problems. I find that GUIs pale in comparison to the CLI in their ability to facilitate clearly articulated control of complex problems. The right tools in the hands of a professional produce excellent results.
Amateurs and Professionals
I frequently encounter a resistance to learning and using the CLI among technology workers. These prefer GUI-based tools, claiming that they’re easier: the command line is supposedly too obtuse to be useful. I find that this preference simply doesn’t hold true. For the same reason that the paint edging gizmo is less powerful and less productive than a paintbrush in the hands of a professional, and for the same reason that a talented group of musicians doesn’t need the frills of digital audio editing to create an album full of excellent music, I find that proficiency with the CLI is far more powerful and productive than GUI tools.
For instance, consider automating a build. The fanciest, easiest GUI tools still require automation when it comes to configuring and running a continuous integration build. What is the mechanism by which we automate those tools? Yep, you guessed it: the CLI. Next, consider the
dotnet <whatever> commands in .Net Core. Isn’t it interesting that Microsoft’s latest-and-greatest platform has steered towards driving everything from the CLI? And finally, let’s consider Git, the highly successful distributed version control system. Its workflow can be difficult and unwieldy to express in a GUI, yet the CLI makes it simple and powerful to focus on what’s important and eliminate the noise.
The longer I work in software development the more I appreciate the power and ease that the command line affords, and I struggle to discard the nagging suspicion that the CLI lacks the ceiling that many GUIs place on productivity. I often find that GUI tools — especially those that lay atop a CLI — equate to the cheap plastic painting gizmo marketed to the amateurs. To me, it seems that the choice is pretty clear. On one hand, I could behave like an amateur, and use an amateur’s tools, and produce results like an amateur. On the other hand, I can behave like a professional, use a professional’s tools, develop professional-level skill with those tools, and produce excellent results.
Now get off my lawn!