Where to apply for a job? Should you buy that new piece of equipment? Decision making is hard and exhausting, especially if we don't have an overall direction to follow. However, if we are explicit about our core values, we can use them to guide many difficult decisions. In this post, I first describe my personal core values and how they evolve, and then I demonstrate how I use them to guide my decision-making.
I have a picture in my head of my ideal self. This picture shows how I would behave if I had an inexhaustible amount of energy…
In software development, we rely on tools when building anything non-trivial. We can split our tools into two categories: ones that affect the code and ones that affect our process. Tools such as which IDE or database we use typically affect the code, not how we work. On the other hand, tools such as having a build pipeline very much change how we work but have minimal effect on the code. In this post, we focus exclusively on the latter.
This post describes a journey from nothing all the way to microservices and how we adopt which tools. The journey…
Setting new Year resolutions is a popular tradition that can facilitate self-improvement. Unfortunately, many set unrealistic resolutions and end up forced to give up after only one or two months. After much experimentation, I have gotten better at succeeding with my resolutions, so I share how I set myself up for success with my resolutions in this post.
I generally follow CGP Grey's advice and set long-term themes instead of large behavioral changes. Themes are wide and abstract, like “try more new things.” If you are inexperienced with themes, I recommend having fewer with shorter iteration times, starting with one…
Software development is about knowledge. Developers have to learn parts of the domain and write down their findings in a programming language. The most effective way to gain knowledge from the real world is through experimentation. Therefore talented developers utilize several types of experiments in their work.
However, developers work closely with customers, juniors, users, and project managers who are not trained in these experiments and their differences. Therefore it can be difficult to communicate which questions different types of experiments can answer.
Product owner: Great, can you just put this in production? Developer: No; it’s just a proof of…
This post is quite a bit different from my usual topics of programming. But proper color correction is a cheap and easy way to make a stream or video look more professional. Unfortunately, I keep having to re-figure out how to do it, so I figured I would write it down, and perhaps it can help somebody else too if I make it public.
The tools I use are:
Loose coupling has been a programmer goal for decades, and its latest evolution is called microservices. With microservices each services’ code is decoupled so not only can they be build independently, but also deployed independently. This requires some fancy technology tricks and quite a big mental shift.
When exploring topics like this I always found it immensely helpful to do so through a practical exercise. Not having to understand the theory, but simply following a step by step guide, while the concepts seep into my brain. Therefore I have designed this programming journey. I do not explain any of the…
There are three reasons why TypeScript is my favorite programming language:
For these reasons, I recommend that people getting into programming start with TypeScript. In this post, I…
Typescript has one of the most exciting type systems of any mainstream programming language. It can be challenging to learn, but there is so much strength in good types that it is well worth the effort. This post illuminates a lot of the essential properties of types in Typescript. I promised seven minutes so let’s jump straight into it.
We start with one of the simpler things: objects. We can define object types very similarly to how we define objects, by listing fields and their types.
type A = { a: string; b: number };type B = { b…
I love teaching, and I love learning. Luckily every time I teach something, I learn something as well. A few years back, I decided to study some medicine on my own, just for fun. I discovered that for some subjects, there were work- and coloring books, with activities just like I used to do when I was a kid. I thought that was such a fantastic idea that I thought, why is there none for programming?
So I did what I often do and decided to start it myself, and as often happens, I discovered that creating such a book…
When it comes to excellent command-line tools, one stands out in my mind: Git. The Git CLI uses modes, then flags, sometimes with arguments, and then the command argument. This structure is flexible, friendly to use, and pleasant to work with. It is, however, not trivial to implement in a generalized way, especially if we want it to be strongly typed.
I have implemented a small but sophisticated library for parsing command-line arguments in the Git style. In this post, I detail how to use it and its key features. …
I live by my mentors words: “The key to being consistently brilliant is: hard work, every day.”