When is OOP not that great?

As you might know, I really like object-oriented programming. I also have designed and implemented several object-oriented languages. Which, in turn, means that I’ve seen plenty of the not-so-great sides of the idea, both in the theory underlying it and in actual language implementations.

So let me rant a little bit about the things that have not brought me that much joy.

Why is `({})` true in JavaScript?

JavaScript’s abstract equality might sound quite daunting… until you realise that pretty much every operator and function in JavaScript has the same problem. After all why does JavaScript’s equality and ordering works the way it does?

The direct answer is “coercion polymorphism”[^1]. But since this is unlikely to tell you anything useful, unless you have implemented either JavaScript or similarly polymorphic languages in the past, let’s go in a short journey of how JavaScript operators work, with a particular focus on the idea of equality.

The Making of a Debugging Talk

Just recently I presented a short talk on time-travelling debuggers at Code BEAM Stockholm, so I thought it would be interesting to go into some of the things happening behind the scenes here.

Last time I wrote about my general approach to writing talks, so this time I’ll just discuss the general design ideas that went on this one in particular.

It was a bit of a wild ride, to be honest, and I panicked more than usual; but such is life. It was still a fun experience in the end :’)