The computer is a beautiful thing.
I have realised that I am pretty bad at vim. It’s my text editor of choice and is truly a fantastic way to use your keyboard, and last month I even made the move to neovim to further power my setup with a modern “native” vim experience. It was fun, but I think I am still very bad at this. Often I find myself doing “bbbbbb” while I could use a macro using “4b”. And I have also gone into VISUAL and done “b” and then “d”to delete some words but I could’ve easily done a macro like “d2b”. The problem is not really just macros, I recently googled how to increase a digit by 1 (CTRL-x) or decrease it (CTRL-a). The thing is- this is an unknown-unknowns-problem. I don’t know how much I don’t know about vim, and some of the best techniques for using vim could be hiding behind that manual. And to think back about how I learned vim in the first place - vimtutor - Moolenaar (iirc) told me to read the vim manual for much of my learning, and also told me that vimtutor only served as a “quickstart” for vim. I have not followed his advice and am now in a pretty bad state because of it.
This also relates to at-what-levels-of-abstraction-do-you-stop, as this is another decision, do you go into your config and do things “your own way” or abstract it away using something like a custom build of lazy.nvim?
Apart from this let me take a moment to talk about linux or the shell in general. Recently for Sputnik I had to write my first bash scriptto run multiple processes. I wanted to navigate the bash manual myself, and I did for a little bit but realised that I wanted a resource where I could just type in a natural language query for a resource and get the page number where the “solution” is. Indeed, I wanted to train a model on the bash manual, and this is something I would do in the future for sure - personal intelligence. Something like a specialised notebookLM. But I digress, for this I decided to talk to claude and asked it to refer the manual for anything. It told me to look into jobs and here strings. Here strings seemed to do what I wanted to do perfectly but alas! I had yet again abstracted it away by going to that page and not reading the pre-requisites! For someone who doesn’t even “know” what a shell is, is it even “legal” to write a bash script?
But then we shift our attention to linux. Agreed, I can say that sputnik is not the ideal environment for “learning” linux, but some of the points (about networking, using the shell, FHS, etc.) still stand. Recently I skimmed the wikipedia article for the Linux FHS, and some of it made so much sense! for ex. config files in etc, a backronym for “editable text configuration”. And binaries in local/bin/. It’s a shame that I wasn’t able to run typst properly for I did not know where to put my binary in! And to realise that I don’t even know what a $PATH is because I had abstracted all of it away in my windows installation and I had vibecoded my fish config! Alas, how do I even repay that intellectual debt? How do I even keep using this abstraction?
It seems that a very good solution to the unknown-unknowns-problem is reading books. Books are not targeted at a particular question, sometimes they introduce new ideas on their own which connect to some other questions I could have in the future. It seems that for my needs the following two books are essential:
- the vim manual
- the linux command line (no starch) and thus I need to read these in a time-blocked manner. I have so many parallel tracks, and that’s the reason I am so overwhelmed all the time. I don’t really know how to manage all of this.