Having used Claude Code for a few months now, I have noticed how software development has changed for me. I write a lot less code, but I spend more time understanding and testing the code Claude has written. The proportions … Continue reading →
Henrik Warne
https://henrikwarne.com/ · 107 posts · history since 2011 · active
31 May
31 Jan
For the last few months, I have been developing a new reporting application. Early on, I decided to add a –dry-run option to the run command. This turned out to be quite useful – I have used it many times … Continue reading →
15 Jun 2025
Since 2002, I have been keeping track of all the tricky bugs I have come across. Nine years ago, I wrote a blog post with the lessons learned from the bugs up till then. Now I have reviewed all the … Continue reading →
2 Mar 2025
Here are more good programming quotes I have found since my last post. Programming “Configuration is coding in a poorly designed programming language without tests, version control, or documentation.”Gregor Hohpe “It’s the developers misunderstanding, not the expert knowledge, that gets … Continue reading →
8 Feb 2025
This week I attended the Jfokus software development conference in Stockholm, Sweden. I first went in 2011, and I have been back many times through the years. The conference has a Java focus (duh!), but many talks cover general topics … Continue reading →
9 Nov 2024
I am using a very simple system for remembering commands and procedures, and for tracking what I work on. I have two plain text files called notes.txt and worktime.txt. In the notes file, I write down things that are important … Continue reading →
25 Aug 2024
Using ChatGPT when I code has been a real productivity boost for me. Instead of reading an example on Stack Overflow and figuring out how to adapt it to my particular case, I immediately get code tailored to my specific … Continue reading →
7 Jul 2024
Before I read The Man from the Future by Ananyo Bhattacharya, I only knew about John von Neumann in two contexts: that computers use the von Neumann architecture, and that he appeared in a story about a mathematical problem I … Continue reading →
11 Feb 2024
For the first time ever, I was laid off, and had to find a new software developer job. I managed to find a new one, but it took longer than I thought, and it was a lot of work. I … Continue reading →
10 Jan 2024
“Software design is preparation for change; change of behavior” Tidy First? is a new book by Kent Beck. It is a short little book, only about 100 pages (and lots of white space on them), but it contains some deep … Continue reading →
10 Sept 2023
I really like this quote from Jeff Bezos: “Anybody who doesn’t change their mind a lot is dramatically underestimating the complexity of the world we live in.” Lately I have been thinking about what I have changed my mind about … Continue reading →
23 Apr 2023
Two months ago, I was a guest on the Maintainable podcast. The first question the host Robby Russell asks is “What are a few characteristics of well-maintained software?”. This is such a great question, and I thought I would expand … Continue reading →
12 Feb 2023
I really enjoyed reading Algorithmic Trading: A Practitioner’s Guide by Jeffrey M. Bacidore. Before starting, I imagined it would cover various strategies for trading in the markets, along the lines of “buy on this condition, sell on this condition”. But … Continue reading →
7 Jan 2023
Every time I hear about software maintenance as a distinct activity, I cringe. That’s because it is based on the outdated notion that first software is developed, then it is maintained. But that is not how software development works today. … Continue reading →
11 Dec 2022
A few months ago I switched to working in Go. Before that, my main language was Python for many years. The change to Go has been very smooth, without any major surprises or stumbling blocks. This may partly be because … Continue reading →
19 Jun 2022
I recently finished Effective Software Testing – A Developer’s Guide by Maurício Aniche, and I really liked it. I have been coding for a long time and I think I have been writing pretty good tests for the features I … Continue reading →
13 Dec 2021
There seems to be an established truth in programming that code reviews find a lot of bugs. An example is chapter 18 (Modern Code Review) in the book Making Software. This is however not my experience – I rarely find … Continue reading →
12 Jul 2021
I really liked A Philosophy of Software Design by John Ousterhout. It is compact and short, only 170 pages, so it is a quick read, but it contains many good ideas. The focus is on how to structure systems to … Continue reading →
15 Jun 2021
I used to think that I didn’t need comments if I wrote self-documenting code. However, I have realized that I do write comments, and that I find them really useful. To see how many comments I write, and what kind … Continue reading →
24 May 2021
Microservices have gone through a complete hype cycle. From being hailed as the one true way to build systems, to a backlash where they are often considered too difficult and complex. In a way though, they are like most technology … Continue reading →
19 Apr 2021
For the past few months, I have been interviewing with several companies. In all cases, one or more coding tests were included. I have also been on the interviewing side, evaluating a coding test. Here are my thoughts on the … Continue reading →
16 Apr 2021
Here are more good programming quotes I have found since my last post. Programming “It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that … Continue reading →
28 Dec 2020
Choosing test values when writing unit tests is mostly guided by the need to cover all cases of the program logic. However, some values are better than others. Here are a few tips on how to pick values that make … Continue reading →
25 Nov 2020
This fall I took the course Mathematical Modelling of Football from Uppsala University. It was taught by Professor David Sumpter, and I believe this is the first academic course of its kind. The main subjects covered are modelling and analysis … Continue reading →
30 Aug 2020
You have developed a new feature. The code has been reviewed, and all the tests pass. You have just deployed this new feature to production. So on to the next task, right? Wrong. Most of the time, you should check … Continue reading →
23 Jul 2020
To check if a program is doing what it should, you can inspect the output from a given input. But as the system grows, you also need logging to help you understand what is happening. Good log messages are crucial … Continue reading →
9 Jun 2020
Because of the Corona pandemic, our whole company has now been working from home for 12 weeks. Before, we mostly worked in the office, although occasionally people would work from home, for example when waiting for a delivery. This abrupt … Continue reading →
19 May 2020
I really enjoyed reading Artificial Intelligence – A Guide for Thinking Humans by Melanie Mitchell. The author is a professor of computer science and an artificial intelligence (AI) researcher. The book is her attempt at working out if the singularity … Continue reading →
27 Apr 2020
In the fall of 1999 I got the biggest productivity boost of my entire career as a software developer. In the October issue of IEEE Computer magazine, there was an article by Kent Beck called “Embracing change with extreme programming”. … Continue reading →
22 Mar 2020
I really like Secure by Design. The key idea is that there is a big overlap between secure code and good software design. Code that is strict, clear and focused will be easier to reason about, and will have fewer … Continue reading →
20 Jan 2020
Here are more good programming quotes I have found since my last post. Microservices “Microservices are just dynamic linking over HTTP” via @mononcqc “kubernetes – turning things off and on again, at scale” @decimalator Full stack “A full stack developer … Continue reading →
4 Jan 2020
In the book club at work, I just finished reading Grokking Deep Learning by Andrew Trask. It is an introduction to deep learning, but there are some problems. It spends a lot of pages on the basics, and in the … Continue reading →
8 Dec 2019
A few weeks ago I spoke at the EuroSTAR software testing conference in Prague. The conference had one and a half days of tutorials, followed by two and a half days of talks. Around a thousand people attended. I was … Continue reading →
27 Oct 2019
I really enjoyed Classic Computer Science Problems in Python by David Kopec. It covers many different problems I hadn’t read detailed explanations of before. For example: neural networks, constraint-satisfaction problems, genetic algorithms and the minimax algorithm. Unlike many other books … Continue reading →
29 Sept 2019
I like to use Test-Driven Development (TDD) when coding. However, in some circumstances, TDD is more of a hinderance than a help. This happens when how to solve the problem is not clear. Then it is better to first write … Continue reading →
15 Sept 2019
I often get contacted by recruiters asking if I am interested in changing company. Even if I am happy where I am, I briefly check out companies I have not heard of before. One reason is that you never know, … Continue reading →
27 Jul 2019
What a great book Designing Data-Intensive Applications is! It covers databases and distributed systems in clear language, great detail and without any fluff. I particularly like that the author Martin Kleppmann knows the theory very well, but also seems to … Continue reading →
15 Jun 2019
At the end of May I attended Nordic Testing Days in Tallinn, Estonia. It was the first time I spoke at a conference outside of Sweden, and I had a great time. There was one day with tutorials, and two … Continue reading →
26 May 2019
The book Accelerate details the findings of four years of research on how DevOps affects various outcomes, such as software delivery tempo and stability, as well as the organizations’ profitability and market share. DevOps in this context means things like … Continue reading →
3 Apr 2019
I like good programming quotes. Here are some new ones I have found since my last posts. Complexity “Why do people find DNS so difficult? It’s just cache invalidation and naming things.” – @jdub “Your code doesn’t work!” “It works … Continue reading →
30 Mar 2019
Is programming like math, or is it like writing? I think there are elements of both in it, even though programming is a discipline of its own. Nevertheless, it is interesting to think about what aspects are like math, and … Continue reading →
3 Dec 2018
For the system at work, I am on call one week every seven weeks. For most of the past ten years, I have been on organized on call rotations for the systems I have been developing. I think being on … Continue reading →
11 Aug 2018
I use a shell every day. Almost always, I want to repeat a previous command, or repeat it after a slight modification. A very convenient way is to use arrow-up to get the most recent command back. Another common trick … Continue reading →
25 Jun 2018
When I switched jobs four years ago, I went from using subversion (svn) to using git as the version control system. Even though I am a pretty quick learner, it took me a quite a while to really understand git. … Continue reading →
1 May 2018
For the past few years, I have heard many people advocating using only automatic tests. For example, if all the automatic tests pass, then the code should automatically be deployed to production. I have always performed a bit of manual … Continue reading →
13 Mar 2018
In the book club at work, we recently finished reading Exercises in Programming Style by Cristina Videira Lopes. The book consists of a simple program implemented in 33 different programming styles. It is a great way of showing the different … Continue reading →
17 Dec 2017
For the past two months, I have been helping my son’s grade 8 class to learn to program. All students wrote Python programs and got a feel for what programming is. This post has details on how we organized the … Continue reading →
26 Nov 2017
It is now more than 6 years since I started blogging about software development. It has been a great experience, and I thought I would reflect on what I have learnt. So here are my reasons for writing about programming, … Continue reading →
19 Nov 2017
During my career as a software developer, I have seen the release frequency increasing steadily. When I started, it would take 12 to 18 months for new features to reach the customer. Years later the frequency increased, so deployment to … Continue reading →
16 Sept 2017
A good programming quote captures an insight about programming, often in a funny way. Many quotes are quite famous, but I like ones that are a bit less well-know. A while ago, I listed some favorites. Here are more good … Continue reading →
20 Aug 2017
I recently found out about the book Developer Testing – Building Quality Into Software by Alexander Tarlinder, and I immediately wanted to read it. Even though I am a developer at heart, I have always been interested in software testing … Continue reading →
10 Jul 2017
Last week I attended a software development conference, QCon in New York. Here are my impressions of it, as well as some thoughts on programming conferences in general. For me, there are several reasons to attend developer conferences. You have … Continue reading →
28 May 2017
Many software developers have a tendency to avoid talking to people. They would rather just rely on written communication in chats, email or issue tracker tickets. However, talking to people more can make them more effective as software developers. Here … Continue reading →
28 Apr 2017
In my experience, code can rot in two distinct ways. The first case is code that hasn’t been used in a long time, but where the environment has changed so it is no longer possible to run the code. In … Continue reading →
12 Mar 2017
Here are my thoughts on programmer career planning. You should always stay employable, mostly by changing jobs regularly (every five years or so). When changing, don’t wait until you have to. Your negotiating position is much better when you can … Continue reading →
22 Jan 2017
These days it is common to hear arguments that software development is becoming gig based. In other words, companies will not hire programmers for permanent positions. Instead, they will put together temporary teams of independent contractors from anywhere in the world to complete … Continue reading →
15 Jan 2017
Last month we finished reading “The Effective Engineer” by Edmond Lau in the book club at work. It is a great book full of practical advice on how to get more done as a software developer. In fact, it is one … Continue reading →
24 Nov 2016
Recently @ThePracticalDev asked people on Twitter for typical things programmers say: Request — what are some examples of funny idioms/phrases software devs use a lot? Things like "It works on my machine" etc. — DEV Community (@ThePracticalDev) November 16, 2016 … Continue reading →
8 Nov 2016
For several years now, we have been running a developer book club at work. We pick a book relevant to software development, and read a chapter a week. Every other week we meet for 30 to 45 minutes and discuss … Continue reading →
27 Oct 2016
In the book club at work, we recently finished reading Release It! by Michael T. Nygard. It is a book I have been meaning to read for a long time, but somehow I never got around to it until now. … Continue reading →
16 Jun 2016
In Learning From Your Bugs, I wrote about how I have been keeping track of the most interesting bugs I have come across. I recently reviewed all 194 entries (going back 13 years), to see what lessons I have learned from them. … Continue reading →
28 Apr 2016
Bugs are great learning opportunities. So how do we make sure we learn as much as possible from the bugs we fix? A method I have used for more than 13 years now is to write down a short description of … Continue reading →
17 Apr 2016
In my previous post, The Wisdom of Programming Quotes, I called out some quotes that look good on the surface, but turn out to promote the wrong ideas about software development. I have also posted some of my favorite programming qoutes … Continue reading →
11 Apr 2016
I love good programming quotes. The best ones say something true about the craft of programming, usually both concisely and humorously. Recently I started following Programming Wisdom on Twitter. It’s been a source of many great quotes, but occasionally I … Continue reading →
7 Mar 2016
When I graduated from university with a degree in Computer Science, I wanted to continue and get a Ph.D. But I also wanted to work as a software developer, so I worked for five years in industry before going back … Continue reading →
27 Dec 2015
I recently finished reading Ghost in the Wires by Kevin Mitnick. It is the story of Mitnick’s hacking career, from the start in his teens, through becoming the FBI’s most wanted hacker, to spending years in jail before finally being … Continue reading →
22 Nov 2015
I regularly get emails from recruiters trying to get me to change jobs. Unfortunately, many of the emails are not very good, wasting my and the recruiters’ time. So here are 5 tips for recruiters on how to write a good … Continue reading →
20 Oct 2015
I just finished taking the course Software Security from the University of Maryland via Coursera. It was a relatively easy course (at least if you know C) that gave an overview of the following areas: buffer overflows and other memory attacks, … Continue reading →
16 Apr 2015
Here is my list of heuristics and rules of thumb for software development that I have found useful over the years: Development 1. Start small, then extend. Whether creating a new system, or adding a feature to an existing system, I … Continue reading →
3 Jan 2015
I finally got around to reading Clean Code by Robert C. Martin (Uncle Bob). It is often high on lists of the best books for software development, and for good reason. Clean Code is an excellent book that all programmers … Continue reading →
1 Jan 2015
I recently finished the Coursera course Computational Investing Part 1 by professor Tucker Balch at Georgia Tech. The focus of the course is on portfolio analysis and selection. Almost all the analysis uses the daily closing prices of stocks as the … Continue reading →
15 Dec 2014
What is the half-life of programmer knowledge? It is quite common with claims that the half-life is something like 5 years. In other words, half of what you know about programming will be obsolete in 5 years. A similar sentiment … Continue reading →
8 Dec 2014
This week I will give a presentation at a local high school on what it is like to work as a programmer. I am volunteering (through the organization Transfer) to come to schools and talk about what I work with. … Continue reading →
4 Sept 2014
A few months ago I came across the article Why Most Unit Testing is Waste by James O Coplien. The title is an accurate description of the contents – James considers most unit tests to be useless. He expands his arguments … Continue reading →
30 Jun 2014
What makes a good programmer? It’s an interesting question to ask yourself. It makes you reflect on the craft of software development. It is also a good question to ask your colleagues. It can trigger some interesting discussions on how you work … Continue reading →
22 Jun 2014
Three months ago I changed jobs, and in the process switched from Java to Python. Here are the differences that have stood out for me since making the switch. I have previously worked a bit in Ruby, but I had no … Continue reading →
8 Jun 2014
Is software antifragile? I think so. I recently finished the book Antifragile – Things that Gain from Disorder by Nassim Nicholas Taleb. I liked it a lot, and I think the ideas in it are quite useful when examining various systems and … Continue reading →
19 Feb 2014
When I first heard about unit testing using a framework like JUnit, I thought it was such a simple and powerful concept. Instead of ad hoc testing, you save your tests, and they can be run as often as you … Continue reading →
9 Feb 2014
How can you unit test private methods? If you google this question, you find several different suggestions: test them indirectly, extract them into their own class and make them public there, or use reflection to test them. All these solutions … Continue reading →
27 Jan 2014
Here is the story of a bug that I caused, found, and fixed recently. It is not particularly hard or tricky, and it didn’t take long to find and fix. Nevertheless, it did teach me some good lessons. The Bug … Continue reading →
21 Jan 2014
To trouble-shoot software, logging of some kind is essential. But for most systems, it is simply not possible to log everything that happens. Many systems and logging frameworks let you limit the amount of data by giving a logging level (e.g. … Continue reading →
1 Jan 2014
One common reaction to my post on writing debuggable code was: you don’t need logging, just use a debugger. While there are cases where a debugger is the best option, there are many reasons why having proper logging in place … Continue reading →
8 Dec 2013
Many programmers have a hard time writing good unit-tests for code that involves time. For example, how do you test time-outs, or periodic clean-up jobs? I have seen many tests that create elaborate set-ups with lots of dependencies, or introduce … Continue reading →
9 Nov 2013
When there is a problem with your software, the first thing you usually ask for is a log showing what happened (provided you write debuggable code), and the version of the software that was running. But it is easy to … Continue reading →
31 Aug 2013
A lot of code I come across consists of relatively few, but long, methods. The code does what it is supposed to do. However, it could be improved a lot. Refactoring to use more methods can produce better structured programs … Continue reading →
21 Aug 2013
I have read a couple of blog posts about LinkedIn recently. “Is LinkedIn Cheating Employers and Job Seekers Alike?” is criticizing LinkedIn for charging job seekers to appear “at the top of the list” when applying for a job. “LinkedIn … Continue reading →
5 May 2013
All programs need some form of logging built in to them, so we can observe what it is doing. This is especially important when things go wrong. One of the differences between a great programmer and a bad programmer is … Continue reading →
7 Apr 2013
I recently got an e-mail from Michael Sherman, a teacher in New York. He had developed a variation of the card game Set called Complementary Pairs. This is how he described it: “We have Set competitions at the school where … Continue reading →
2 Apr 2013
In my previous post on what programmers want, I ranked working from home low on the list. Several commenters value working from home higher, and K (not his real name) added a link to a great TED talk given by … Continue reading →
26 Mar 2013
I got an e-mail last week from three students at Halmstad University doing a three month project on what programmers want in a job, and how companies can attract talented programmers. Here are my answers to their questions, in order … Continue reading →
18 Feb 2013
I recently finished the Coursera course Algorithms: Design and Analysis, Part 2 by Professor Tim Roughgarden of Stanford. I’ve already reviewed part 1, and here are my thoughts on the second part. The main theme of part 1 was the divide … Continue reading →
31 Dec 2012
The WordPress.com stats helper monkeys prepared a 2012 annual report for this blog. Here’s an excerpt: About 55,000 tourists visit Liechtenstein every year. This blog was viewed about 170,000 times in 2012. If it were Liechtenstein, it would take about … Continue reading →
12 Dec 2012
I recently gave a presentation on what it is like to work as a software developer to first-year engineering students at KTH taking an introductory programming course. I wanted to give my view on the main differences between professional software … Continue reading →
21 Oct 2012
Every once in a while I read something along the lines of: “most developers just want to write new features, they don’t want to work with maintenance and bug-fixing”. If that’s true, then most developers are missing out on the fun … Continue reading →
23 Sept 2012
When I found out about the book “How Google Tests Software“, it didn’t take long until I had ordered a copy. I find it quite fascinating to read about how Google does things, whether it is about their development process, their … Continue reading →
22 Aug 2012
Even though more than 20 years have passed, I still remember wondering what it would be like to finish university and start working. Up until that point, I had pretty much spent my whole life in school, with only a … Continue reading →
17 Jun 2012
For seven years I coded in C++ using Emacs. Four years ago, when I changed jobs, I switched to Java development using IntelliJ IDEA. Without a doubt, I am much more productive writing code in IntelliJ IDEA compared to using … Continue reading →
2 Jun 2012
I love coding. Ever since I bought my first computer (a VIC-20), I’ve been fascinated by computer programming. For many years I never thought of why I enjoyed it so much – I just knew I did. But that changed when … Continue reading →
8 May 2012
I recently finnished the Coursera course Design and Analysis of Algorithms I, given by Professor Tim Roughgarden of Stanford. This was my second on-line course from Coursera (last fall I took Introduction to Databases, which I wrote about here), and … Continue reading →
26 Feb 2012
Like I wrote in a previous post, the use of a break program was probably the main reason I beat Repetitive Stress Injury (RSI). For many years I used WorkPace, but when I switched to using a Macbook Pro a … Continue reading →
25 Feb 2012
Here are a few programming quotes I like: “A complex system that works is invariably found to have evolved from a simple system that worked.” John Gall “Enlightened trial and error outperforms the planning of flawless intellects.” David Kelley “It’s … Continue reading →
18 Feb 2012
Early in 2005 the muscles in my forearms started to hurt. In the beginning it was only a slight irritation, but over the course of about six months it gradually got worse, until it was so bad I actually thought … Continue reading →
18 Dec 2011
Last weekend I finished the free on-line course Introduction to Databases taught by Professor Jennifer Widom of Standford University. The course was given entirely over the web, with pre-recorded video lectures, and assignments and exams that were automatically graded when submitted. … Continue reading →
30 Sept 2011
The tabulated simulation results. Total games played=10000000, total rounds=259722851, took 7204 seconds. Games that never needed 15 cards on the table: 3124823 (31.2 percent of all games). Games where no cards remain on the table at the end: 118583 (1.2 … Continue reading →
The tabulated simulation results. Total games played=10000000, total rounds=259703553, took 6916 seconds. Games that never needed 15 cards on the table: 3141851 (31.4 percent of all games). Games where no cards remain on the table at the end: 121973 (1.2 … Continue reading →
The tabulated simulation results. Total games played=10000000, total rounds=259143969, took 6919 seconds. Games that never needed 15 cards on the table: 3301418 (33.0 percent of all games). Games where no cards remain on the table at the end: 151438 (1.5 … Continue reading →
In Peter Norvig’s interesting post The Odds of Finding a Set in The Card Game SET, he concludes that the odds against there being no set in 12 cards, during a game, is 16:1. This is an average value, but it … Continue reading →