Happy Saturday! After sending off last week’s installment I finally finished up and published part 3 of my Nix-on-macOS series. This was sitting in my drafts folder for a long while and I’m happy to have gotten it out there. I have some more ideas for posts in the series to write, but I also want to start thinking about other series and topics I can explore.
Writing on writing
- Always. Be. Blogging. (Nate Silver): Always interesting to learn about the process of someone who you’ve followed for a long time. I think the advice here can apply to any kind of self-guided work.
Programming Languages
-
The algebra (and calculus!) of algebraic data types (Joel Burget): This post draws parallels between the cardinality of different basic functional data types and laws of arithmetic, algebra and differentiation. On first blush, it seems absolutely mind-blowing. The author is ready to admit towards the end that the analogy is still incomplete. I don’t have a deep enough mathematical background to be able to judge whether this correspondence is coincidence, trivial, or profound, but there’s enough links out to academic papers and other posts on the subject to dig deeper and read more.
I’m reminded of when I learned about
e
in pre-calc class in high school. At first I was almost convinced that the recurrence of this number in everything from compound interest to radioactive decay was evidence of divine intervention. After a few more classes it all seemed a lot more pedestrian: if all exponential functions are transformations of each other, there needs to be one with unit coeffecients — ande
falls right out of that — it’s why it’s the base of the “natural” log.That whole thought process was a good lesson in how abstractions can feel like magic if you don’t have a deep understanding of how they work.
-
Haskell: A Great Procedural Language (Chris, Entropic Thoughts): I feel like every week I’m posting a new article that looks at monads in a new way, but somehow I still find them interesting.
-
Swift for C++ Practitioners, Part 11: Domain-Specific Languages with Result Binders (Doug Gregor): I’ve really enjoyed this series and this installment was no exception. I’m surprised that a special protocol is required. The equivalent functionality in Kotlin just falls out of trailing lambdas.
Software in the real world
- Shrinking a Postgres Table (John Nunemaker): A story mostly about how AI chatbots can help with a squishy, real-world problem. I sensed some echoes of my post on ChatGPT from a few years back.
- Storing times for human events (Simon Willison): I’m a big fan of this sub-genre of the indie technical blog sub-genre: thorough writeups of hard-won knowledge from years of experience in the industry.