Topics /
Software Engineering
The most popular blog posts about software engineering on Hacker News. 14,544 posts.
Why I think Haskell is the best general purpose language as of June 22 2019
Me and my close friends have been interested in starting a project together and I suggested we use Haskell. I do not think the suggestion was received well or perhaps in seriousness. I have a tendency to joke about almost everything and have put forward that we use many interesting but not practical languages in the…
My gym forced a social media down my throat. So I reverse-engineered its app
Extracting my gym’s QR check-in from its Flutter app, with a rooted phone and a lot of ripgrep.
Gap Buffers Are Not Optimized for Multiple Cursors
Gap buffers are a common data structure for representing a text buffer in a text editor. Emacs famously uses gap buffers — long-standing proof that gap buffers are a perfectly sufficient way to represent a text buffer.
Measuring Software Complexity: What Metrics to Use?
Do we need to measure complexity? With what metrics? What benefits can it brings? This is the questions we'll answer in this article.
Abstraction, intuition, and the “monad tutorial fallacy” (2009)
While working on an article for the Monad.Reader, I’ve had the opportunity to think about how people learn and gain intuition for abstraction, and the implications for pedagogy. The heart of …
Monorepos and Forced Migrations
Monorepos and Forced Migrations By most metrics, Google is a great place to work. Top tier compensation, free food, and largely co-workers who want do...
A Month of Terraform
I took Heroku for granted, and a month into setting up my own infra, I now know how much it bought me.
Twisted Python's lead hacker discusses Tornado
Deciphering Glyph, the blog of Glyph Lefkowitz.
How Python 3 Should Have Worked (2012)
As a workaday Python developer, it’s hard to shake the feeling that the Python 2 to 3 transition isn’t working. I get occasional requests to make my libraries work in 3 but it’s far from clear how to and when I try to look it up I find all sorts of conflicting advice, none of which sounds very practical.
Friendly attributes pattern in Ruby
Friendly Attributes pattern enables writing human-friendly attributes with compact and flexible syntax.
Migrating from Warp to Axum
Falling out of love with warp Back when I wrote this codebase, warp was the best / only alternative for something relatively high-level on top of hyper. I was never super fond of warp’s model — it’...
Summer of Programming Languages
Having just returned from the annual Oregon Programming Languages Summer School, at which I teach every year, I am once again very impressed with the impressive growth in the technical sophisticati…
Mutt on Windows Without WSL
I have this weird hobby of trying to get good unix tools to run natively on Windows. I find this is the most efficient use of my laptop's resources, and therefore the nicest experience. WSL is nice, but it takes up a lot of RAM on my system. I prefer to use MSYS2 . Getting unix tools to work correctly under MSYS2 is a…
URL query parameters and how laxness creates de facto requirements on the web
You're probably reading this page because you've attempted to access some part of my blog (Wandering Thoughts) or CSpace , the wiki thing it's part of. Unfortunately you're using a browser version that my anti-crawler precautions consider suspicious, most often because it's too old (most often this applies to versions…
A rough proposal for sum types in Go (2018)
Sum types are pretty cool. Just like how a struct is basically “This contains one of these and one of these”, a sum type is “This contains one of …
Quote-unquote "macros"
You’ve probably seen this Python 101 thing before: @memoized def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2) Leaving aside the absurdity of computing Fibonacci numbers recursively, it’s a common first introduction to Python decorators and higher-order functions. fib is just a function, and memoized…
Modular Monoliths Are a Good Idea
Microservices aren't the only way to get high cohesion and low coupling.
JVM Anatomy Quark #26: Identity Hash Code
"JVM Anatomy Quarks" is the on-going mini-post series, where every post is describing some elementary piece of knowledge about JVM. The name underlines the fact that the single post cannot be taken in isolation, and most pieces described here are going to readily interact with each other.
What is “Open Recursion”?
Someone on StackOverflow stumbled onto the strange term “open recursion” and asked what it meant . Since most of the other answers to this online are pretty opaque, I started writing an answer. But then I accidentally wrote a blog post.
Building a language server for Muon
I’m a big fan of interactive tool support for programming. I often use features like “go to definition”, “find symbol”, compile error underlining, etc. Also, earlier this year, I launched Muon, a new low-level programming language. As no tooling existed beyond the compiler, writing the initial Muon programs (such as a…
Constexpr is a Platform (2020)
Let me share a useful insight with you: constexpr is a platform. Just like you write code that targets Windows or a microcontroller, you write code that targets compile-time execution. In both cases you restrict yourself to the subset of C++ that works on your target platform, use conditional compilation if your code…
A DoS Attack Against the C# Compiler
Generics in C# are certainly very useful and I find it amazing that we almost didn’t get them:
My Favorite Bugs: Invalid Surrogate Pairs
In which I revisit one of my favorite bugs, the invalid surrogate pair.