The Valuable Dev publishes long guides for programmers on Vim, Zsh, learning, cognitive biases, and burnout.
Commenters recommend its Vim and Zsh guides as useful, though one criticizes a different linked article for historical inaccuracies about teletypes and mainframes.
Zsh is quite a bit nicer than Bash for scripting. For one, parameter expansion doesn't word-split by default, so you don't have to haphazardly quote everything. There's also some really powerful features, like the parameter expansion flags [1] and filename generation (globbing) flags [2] that can be combined to do very flexible things. [3]
Zsh also bundles a ton of useful modules that can be used to do things pretty outside the box. Eg, there's a module for creating and controlling a hidden PTY. [4]
Zsh also has some quite nice shorthands for basic grammar, like compact loops and conditionals. Eg, you can do:
for foo in bar*; do_stuff # you don't need the do..done here for single-line for-loops Also, while Zsh diverges from POSIX sh in some areas (like word splitting), Zsh has sh- and Bash-compatible emulation modes, which can even be mixed together within single scripts (eg functions can set their emulation mode and shell options locally, or files can be sourced or commands run with different emulation modes prefixed). [5]
Lastly, Zsh has this weird reputation for being slow, because the configuration frameworks like oh-my-zsh are absolute dogs. But it's actually among the faster shells, with very respectable script performance that's squarely ahead of Bash. [6] Interactive performance can also be fantastic if you use a less hungry framework or write your own config, and Zsh has many tools to improve speed further, like support for pre-compiling source files…
That article starts with too many inaccuracies to recommend it to anybody:
- Teletypes were designed about a century before the era of mainframes.
- Mechanical teletype did not have an "I/O driver" in it.
- OS on Mainframe computers did not have a "Kernel", and neither "I/O driver", "Line discipline" or "TTY driver". This model was introduced with UNIX, the OS that ran on minicomputers.
- Was ChatGPT used to write this article? ;)
I've recently stumbled upon an article on the same topic, but containing competent and accurate information, I have a link because I recommended it to a friend: https://thevaluable.dev/guide-terminal-shell-console/
Absolutely; the issue has to do with the "Cognitive Load" imposed on the programmer. Standardizing on a small set of languages/frameworks(ideally one) also has the advantage that developers can better communicate/interact with each other using a common language thus enabling better overall productivity.
The Cognitive Load Theory in Software Development - https://thevaluable.dev/cognitive-load-theory-software-developer/
Cognitive Loads in Programming - https://rpeszek.github.io/posts/2022-08-30-code-cognitiveload.html
Cognitive load - https://en.wikipedia.org/wiki/Cognitive_load
These articles are personal philosophies you might take up using the principles of CS. So while not technically rigorous, I think they are like chicken soup for the hackers soul...I found these two articles to be both interesting and inspiring:
The Single Responsibility Principle Revisited -
https://thevaluable.dev/single-responsibility-principle-revisited/
Climbing the wrong hill -
http://cdixon.org/2009/09/19/climbing-the-wrong-hill/
Complexity is relatively easy. It's basically the number of loops and conditionals in a function :) https://thevaluable.dev/complexity_metrics_application/
The testsuite overlay sounds wonderful. Or maybe "coverage multiplied by business value". Biz-important things like authorization or money = more coverage, random marketing things = less important for test coverage.
I have a list of resources here: https://learnbyexample.github.io/curated_resources/vim.html
I'd recommend this SO answer (https://stackoverflow.com/a/1220118) and this series of articles "Vim from the ground up" (https://thevaluable.dev/vim-beginner/)
I'm also writing a reference guide (https://learnbyexample.github.io/vim_reference/)