State machines, programmer personalities & note-taking

Welcome to the seventh edition of Growing the Stack!

It’s been a while. Two years ago I started this little newsletter side project, but lost track of it over time. I don’t remember why or how it happened, but it’s time to get back on track.

If don’t want to receive these anymore, you can unsubscribe any time.

Nothing’s changed. Growing the Stack is still about sharing links about programming and design–or anything in between–every two weeks.

I have 4 links this week: a practical introduction to state machines, two posts about different kinds of programmers and personalities, and a different take on note-taking.


Introduction to state machines using XState

A great introduction to state machines in an easy to digest (and free!) video course. It’s inspiring to see how elegant state machines can solve particular problems.

State machines formalize how we define and transition through the states of our application and give us ultimate control of the most complex parts of our apps.

In this course, we will explore the problems state machines purport to solve, like boolean explosion. We’ll try to solve it our own way first, get so far, and then demonstrate how state machines get us all the way. After that, we’ll dive into the XState library, JavaScript’s premiere state machine library, to learn its API and how to use it to solve our problems.

Builders and architects: two types of programmers

A food-for-thought post about two different kinds of programmers: builders & architects.

The first ones, the builders, are the programmers who get things done. […] On the other hand there are architects. They are concerned about sturdy and structurally sound code. […]

These two types of programmers seem like opposites. They themselves look at the other group and often think exactly that. They have a different way of handling the same problems. The other group’s solutions are so different, they can’t possibly be right, or so it seems.

Builders often find architects too rigid and conservative. They follow the rules for the sake of following them, without any practical benefit. Architects in turn, think of builders as careless, too focused on results, instead of thinking about long-term maintainability.

Different personalities aside, “build vs. architect” is the eternal internal conflict when I want to make decisions. Striking a balance between “getting things done” and “getting things right” is tough.

The note-taking cold war: Essentialism vs pragmatism

I included this link as a followup to “Builders and architects”, not to talk about note-taking apps.

In short, there’s some debate going on about the most efficient way to organize notes: by “actionability”, or as “linked thoughts”. Read the entire article if you want to get into details, but what I found interesting was the underlying idea of essentialism vs pragmatism.

Essentialists think that a statement is true when it reflects something essential about the way reality is organized. Pragmatists believe that there are many different ways to represent and organize reality.

To make this more concrete think about a chessboard. In our everyday experience, it feels like a solid and self-contained object. But we also know scientifically that it is made up of billions and billions of invisible atoms.

Essentialists might say that it is one thing — a chessboard. That it participates in some fundamental way with the is-ness of a chessboard. Other kinds of essentialists may say that though we call it a chessboard, that is actually just a nice shorthand for what it really is which is a collection of atoms arranged in a certain way that looks like a chessboard.

By contrast, pragmatists just shrug. They say it is both a chessboard and it is a collection of atoms. A chessboard is one way to talk about it in a particular context. A collection of atoms is another way to talk about it in other contexts. Both are useful shorthands, but they don’t indicate anything essential or deep about the chessboard itself. They’re just more or less useful descriptions.

That was a shortened, paraphrased excerpt of the article, it needs a full read to be done justice!

Stop Taking Regular Notes; Use a Zettelkasten Instead

On the topic of note-taking: I recently learned about Zettelkasten. Zettelkasten is a framework to organize notes that focusses on the connection between notes, in addition to their contents.

Here’s how a Zettelkasten works:

  • Write each idea you come across on a card.
  • Link idea cards to other relevant idea cards (idea -> idea link).
  • Sort cards into broader topic boxes (idea -> topic link).

This is oversimplifying it, but I hope you get the gist. The key is to make connections between ideas during note-taking, way before you need to review them for your work. This forces you to actively connect the dots (during note-taking) and lets you find relevant ideas with ease in future.

I haven’t converted all my notes to a Zettelkasten, but it has given me a new perspective on how to write and organize notes efficiently.

In turn, it introduced me to Roam, a note-taking app that focusses on linked thoughts, which I’ve been happily using the past few weeks.