There’s an interesting little tendency I’ve started to notice in the way I engage with learning new programming languages, which is that while an extensive base of packages in the standard library is objectively a strength 90% of the time, and makes it easier to write solid software quickly for those who have taken the time to actually learn a good chunk of it, it also makes me a lot less interested in actually writing programs using it, at least in the beginning. This comes I think from two distinct underlying feelings:
It feels good to build things from scratch! As I write this article I am in the process of slowly transitioning my personal website away from Makefiles and shellscripts, and towards a bespoke static site generator, written in C. At the center of that new SSG program is a layer of string utilities, conversion and formatting routines, and non-standard memory allocation techniques: wstd.h. This isn’t the first time I’ve written such a layer, and it probably won’t be the last. It didn’t need to be rewritten; but it was fun to do, and so we did.
Maybe more importantly, it’s actively unpleasant to have to look up if there’s an existing module that already solves the problem at hand. Especially because newer languages often neglect offline documentation tooling in favor of just putting that info up on a website, so I actively have to leave the development environment, in favor of the forever slow and distracting communications environment that is the web. This is something that didn’t used to be a problem, because it wasn’t possible to shunt someone off to the internet when the internet either (a) didn’t exist, or (b) did but was completely unsuitable for such purposes. And text-based documentation shouldn’t take up all that much disk space even if no effort at all is put towards compression; but looking things up offline remains a pain in the ass despite this. Maybe the expectation is that people will find everything they need to know through LSP popups, but I’ve tried LSPs and found them simply Too Annoying to put up with.
And I’m fully aware of how crotchety all of that sounds, but I do think there’s some merit to the design considerations of, on the one hand, keeping the set of standard modules included with your language compiler under a certain threshold of difficulty to sort through (both to make onboarding easier and, frankly, to reduce maintenance burden on the language developers); and on the other providing solid ways to look up symbols and packages without having access to the internet. Despite my many frustrations with the language and its community, Rust does an excellent job of including both full API references and more structured step-by-step documentation in the standard language distribution. But really what I pine for is something like the help system of Turbo Pascal and other early IDEs, where you can hit a key to look up the symbol under the cursor within a lean and purpose-built offline hypertext system.
Return to tradition: bring back .CHM files!
Or, on a more serious note, check out Zeal.
I’d prefer a text-mode interface over Qt, but it’s cross-platform and pretty good. Lots of docsets available for older and more popular languages.
Album of the night: Godspeed You! Black Emperor — Lift Your Skinny Fists like Antennas to Heaven