
What a compiler does: Parsing
Parsing is where the story of compilation begins. While it may mean something wonderful to us, our source code is merely a stream of character

Parsing is where the story of compilation begins. While it may mean something wonderful to us, our source code is merely a stream of character

C# prefers composition to inheritance yet lacks any concise composition syntax. This is unfortunate. While I have nothing against composition, I really don’t like the

In the middle of a major change to the Leaf type system I encountered the refactoring demon. It reared its ugly little head chanting, βyouβre

I like using enums and type hierarchies. What I don’t like is writing verbose switch statements to use them. In C++ I use macros to
Amortized time is often used when stating algorithm complexity. Instead of giving values for worst-case performance it provides an average performance. This is appropriate in
Iterating over the elements of a recursive data structure can be difficult. Given a set of objects, where each object could potentially link to any
Useless interfaces, factories, and other abstractions are everywhere. They are the result of trying to prematurely generalize code. In a recent article I wrote about
The pinnacle of refactoring is the removing of code by introducing a new feature. It may seem like a ridiculous notion, but I’m often surprised
Collection iteration is perhaps the most insidious language construct. Simple to create and easy to understand. Yet lurking within lies the ability to create random
OAuth authentication is not safe. This is the baseline from which all applications should be working. There is a place for social login, but it