I’ve been spending as much time at the beach as I can manage this summer. I love how entertaining the beach is. Waves are unpredictable stimuli that can just keep your attention for hours. Even digging a hole feels like a good use of the afternoon!

Touching Grass

  • Writing by Hand is Good for your Brain — Here’s how to do it: A world class author just giving his advice on pens and paper. I write longhand pretty often and also happen to be lefty, so this post felt like it was written for me!

  • LLMs are amazing, the circus is optional ~ just build (Alessandro Pogliaghi): With all the hype around coding agents there’s surprisingly little discussion about things people have actually built. I’m someone who has always enjoyed the craft of programming — sometimes even more than the finished product — but I recognize that this isn’t the most productive attitude. Generative programming in some ways puts the focus back where it should be: on making things for people to use. This post was refreshing. These tools make it much easier to take an idea and turn it into reality. Give it a try!

Programming Languages

  • Ruff v.0.16.0 (via Simon Willison): Ruff seems to be leaning in to some of the ideas I laid out in my blog post earlier this year: lint errors phrased more as prompts for an LLM than for a human. I still think it’s a good idea!

  • Adding Go’s defer to the TypeScript Compiler (Andrew Healey): A language change that seems purely about syntax shows how semantics leaks into almost everything. I appreciated the conclusion that even though this could work, the act of implementing it and hammering down the semantics convinced Andrew that it didn’t really fit in the language. A language doesn’t need to do everything for everyone!

  • After 7 years in production, Scarf has reluctantly moved away from Haskell (Avi Press): This project is migrating from Haskell to Python to better support LLM-assisted development. The biggest complaint is about long compile times leading to longer feedback cycles. On its surface, I get it — I wrote about how fast feedback loops are critical for LLM development. And Python is probably the most in-distribution programming language for LLMs.
    That being said, compile times feels like the worst reason to switch to Python. It’s a common misconception that strong type checking is inherently slow. Rust is a common example here, but pattern match exhaustiveness checking and simple trait resolution are much faster than monomorphization and cross-module inlining. It doesn’t surprise me that Haskell is slow: GHC is a research compiler with tons of extensions and plugins that I’m sure aren’t optimized to run together.
    Jumping all the way to Python just seems like you’re giving up so much that you don’t need to. If you want a faster compiler, theres OCaml; for an in-distribution language there’s TypeScript. For web services, Go is super performant if you really want to give up some type safety. But Python is a resource hog that almost gives negative static guarantees: billion dollar mistakes hide around every corner. If you’re not building something in an existing ecosystem (of which I’ll admit there are many), I’m skeptical if you’re picking a language for the right reasons.

Liked this post? Get future weekly posts in your inbox!

Powered by Buttondown.