Down with the GUI

It’s been almost 2 years now since I abolished the GUI in my day to day workflow. I made a decision to throw out all of the GUI tools that I could and opt for command line whenever possible. What I had hoped to achieve was proficiency and efficiency by consolidating my working tools into one. Over the years I have worked with almost every trendy IDE and newest app I could find. You could imagine that at first it was a tough move previously I had relied on those applications to achieve more complex tasks like resolving git conflicts, stepping through code, or interfacing with a database. But none the less I felt like something was being lost in that process of using a GUI and that is an understanding of the operations that are being performed behind the scenes through the application. When its just a few clicks you lose that expertise in the fundamentals of the technology your using and I think that hurts us professionally in the end. As an example I work with MySQL quite a lot and there is a popular tool that most engineers I know use which is an awesome GUI BTW. But… There are some inherit downfalls to using it like limitations in querying power, total insight into the database, potentially outdated data not synced up with what’s actually in the current datastore, etc. How bad would it be if you were investigating faulty data only to find out that it wasn’t what was actually in the database because the results weren’t what they should be. Your led down the wrong path with false information wasting time on something that could have been avoided. For every GUI there is a downfall that usually comes at the price of convenience vs. knowing the technology that your interfacing with well enough to not use the GUI. In the end most GUIs are just a wrapper for the CLI anyhow so why not learn the source and forget the GUI.

Consolidation leads to efficiency and power

By moving to the command line I’m able to consolidate virtually all of my tools into one interface no more flip flopping between multiple apps to do my work. Which usually consists of using the mouse to select the app and switching to another screen moving data from one screen to another like copy/paste. Now I rarely have to take my fingers off of the keyboard to use the mouse and that saves time and increases efficiency. There is also the power of having full system control in one spot at said fingertips. This is transferable to other systems as almost seamlessly. For instance if I need to work on a server and my local machine I have full insight into both from one spot. Since I’m already used to using CLI I’m proficient on the remote system just as much as locally. This offers a huge advantage in fixing production issues because managing them is the same process and there is no disconnect from system to system.

Lifespan of CLI

Another major advantage of using the CLI is that it will live forever which IMO is just another reason it is the Alpha and the Omega. Because it will live forever you will never have to learn yet another IDE or app and reinvest time and money into them a few years from now. Which pretty much sets you back at square one again. Sure, those apps are shiny and always have a few cool features but it’s totally new and in another couple of years your going to have make yet another transition. By sticking to strictly CLI is enables the user to build upon what they already have and integrate new more powerful CLI tools over time making the engineer that much more effective in the end.