Image for post
Image for post

Why I think core values are important and how I use mine.

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.

My core values

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…


Image for post
Image for post

CODEX, POSTER

An overview of the tools we use in DevOps.

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…


Image for post
Image for post

How I set myself up for success with my new year’s resolutions

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…


Image for post
Image for post

Poster

PoC or MVP? Are they even different?

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…


Image for post
Image for post

Tutorial

A step-by-step guide on how to do color correction in OBS.

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:


Image for post
Image for post

PROGRAMMING JOURNEY

A hands-on introduction to microservices in Java

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…


Image for post
Image for post

Tutorial

There are three reasons why TypeScript is my favorite programming language:

  1. Its low barrier to entry — due to gradual typing and type inference.
  2. Its versatility — compiling to JavaScript, means it can run on almost anything.
  3. Its high ceiling — there is virtually no skill-cap to TypeScript’s type system. Even after using it for years, I am still learning and inventing awesome tricks to increase the quality of my software. (eg. 7 type tricks in 7 minutes, and CLI Architecture in NodeJS)

For these reasons, I recommend that people getting into programming start with TypeScript. In this post, I…


Image for post
Image for post

Software craftmanship

Typescript’s type system and a puzzle

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.

Object types

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…


Image for post
Image for post

Open-sourcing a passion project

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…


Image for post
Image for post

Software Craftmanship

How to create great command-line tools with great architecture.

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. …

Christian Clausen

I live by my mentors words: “The key to being consistently brilliant is: hard work, every day.”

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store