logoalt Hacker News

at_compile_timeyesterday at 9:08 PM0 repliesview on HN

I did a lot of automation at my last job, which was closer to engineering in the classical sense than engineering in the software sense. The automation mostly amounted to web scraping and interacting with local systems, with a generous amount of logic in between. The largest roadblock wasn't the scraping or the logic, it was the inbuilt assumption of the local programs that there would be an ape with a mouse and keyboard driving the interaction. Outputs that could have been text needed to be copied to and read from the clipboard, or exported as a spreadsheet. Inputs that could have been text were only accepted in spreadsheet form. Pixels needed to be read from the screen to tell when one step was complete and the next could begin. Mouse clicks and keystrokes sent to and fro when it all could have been a series of commands. I cannot count how many written processes and procedures existed could have been a bash simple bash script.

I'm not arguing that these programs should not have a GUI, for that was the simplest way to use them, but the lack of command line functionality places a hard limit on the productivity of an organization, and ensures that the only progress on that front comes at the expensive of exceedingly limited developer time.

"But nobody knows how to use a terminal anymore," I hear you say. Well of course they don't, nobody under 35 without a background in programming has ever had cause to use one. We made everything so simple that nobody ever has to learn anything. That isn't to say that people cannot learn, just they have been robbed of the natural opportunity to do so. Otherwise intelligent people never progress beyond the manual step-by-step interaction that passes for "using a computer" today.

A computer is a tool in much the same way that the a machine shop is a tool: it is a tool that can build other tools. The role of software developers should not just be to build simple tools that can do one task in isolation, it should be to build tools that less technical people can use to build the tools they find themselves in need of. GUI-only programs are simply not fit for that purpose because they lack composability of simpler terminal-based programs.