An engineer describes learning to move beyond running single commands to composing multi-step, conditional, parallel, and looping workflows on the command line. Early reliance on a GUI mentality limited ability to automate tasks like chaining programs, reacting to failures, or iterating over files. Practical examples contrast verbose NodeJS child_process loops with concise shell constructs, showing how simple shell scripts can more naturally express "run until fail" or pipeline behaviors. Gaining even modest shell skills proved transformational: it allowed stitching existing tools together to accomplish complex tasks without building bespoke programs.
The piece argues that effective shell work is mostly about knowing the right toolbox rather than memorizing syntax - about 20% syntax and 80% tools - and lists immediately useful utilities: fzf for interactive selection, tldr/eg for examples, rsync, xargs, sed/ast-grep, direnv, duckdb for local data queries, gh for GitHub automation, and ngrok for sharing local services. It explains why many teams favor shell for ergonomics when gluing commands, recommends alternatives like zx (for JavaScript-centric teams) or higher-level languages when richer data types and testing are needed, and warns that porting scripts without understanding constituent commands yields opaque results. Practical tips include using command negation in conditionals instead of manual exit-code handling.
Summary generated by AI from the linked article. hn.today is not affiliated with Hacker News or Y Combinator.