Jan 05 2019

A case for text files: Encoding & Organization

The command-line interface (CLI) is superior through the use of text files and allows for straightforward organization of data. For many problems, the CLI blows GUI solutions out of the water.

Basic text encodings provide a fantastic longevity of data. Most text files use UTF-8 encoding, a non-proprietary format. It is likely that UTF-8 will outlive any other proprietary app or file format. Just like how UTF-8 is backwards compatible with ASCII, it is possible that future text file encodings will be backwards compatible with UTF-8. Regardless, file conversion is a breeze with the interoperability that the text file provides.

This timelessness of UTF-8 can be paired with decoupling your data in separate files -- keeping your business running like a well-oiled machine. Organize with the moto "everything is a text file". Placing each bit of data in its rightful place encourages modularity, sortability, analysis, and expansion with ease. Despite these benefits, one noticeable drawback is the lack of support on mobile operating systems. So hold onto that desktop or notebook a little while longer!

So while the CLI enjoys the input of a text file, a modern-day app with a GUI relies on the input of a datastore. The datastore, while usually open sourced, requires a layer of configuration (creating databases, tables, and connecting with the app). This incurs an overhead that can be unnecessary when solving most business problems.

In the case of a GUI application using files (i.e. a Word document), the document is either proprietary or non-interoperable at the very least. Modularity, sortability, and analysis suddenly becomes much more difficult.

This is all to say that the use of the CLI requires a substantial learning investment. The payoff is certainly worthwhile -- however if a user is unwilling to learn the ins and outs of of the CLI, then there's not much of a point to using one. In this case, an unwilling user is better off pointing and clicking in a GUI.