The Bitter Prediction
I'm one of many developers experiencing the whirlwind emotional phases of AI's introduction: dismissal, disbelief, excitement, and acceptance. But after working with Claude, Copilot, and Gemini for a while, I have concerns...
I'm Anders Sundman, and this blog is a collection of my musings on programming, software engineering, and craftsmanship. I write about how we developers conjure things into existence from technical, social, and philosophical perspectives.
After writing code for 30+ years, I'm starting to get the hang of it. Currently, I'm building eye-tracking software as the principal architect and developer excellence lead at Tobii. My experience as a developer is mostly in systems programming and working in the embedded space with signal processing. However, I've also built distributed backend systems (before they were called microservices) and DDD-inspired desktop applications.
For the past 20+ years, my native languages have been Python and C++. Lately, I've been flirting with Rust, and I'm loving it!
I'm one of many developers experiencing the whirlwind emotional phases of AI's introduction: dismissal, disbelief, excitement, and acceptance. But after working with Claude, Copilot, and Gemini for a while, I have concerns...
How low can you go? When it comes to embedded programming, the "full stack" starts at the PCB. In a recent talk at our local C++ meetup in Stockholm, I explored this in depth. Let's find out what's at the end of the rainbow by diving into topics like memory management, interrupt vector tables and electronics!
Let's write a simple program for Linux. How hard can it be? Well, simple is the opposite of complex, not of hard, and it is surprisingly hard to create something simple. What is left when we get rid of the complexity from the standard library, all the modern security features, debugging information, and error handling mechanisms?
Did you know that it's possible to use ANSI color codes and emojis in the section names of yor ELF binaries? I didn't. So, I had to try, and objdump
output has never been prettier. 🎄
How well do you know Git? Many of us use it daily and pick up the basics as we go. After a few years, you might start to think that you know Git pretty well. But there are more things in the Git man pages than are dreamt of in your philosophy...
Code review is an indispensable practice in any self-respecting software engineering organization. We get higher quality code and knowledge sharing. It's awesome. But, it’s also not awesome. To be honest, it can be a nightmare. Sometimes we get blocked for days waiting for approval or end up in a never-ending context-switching game of review ping-pong.
Class design in C++ is hard. Really, really, hard. I love C++ but, sadly, all the defaults are wrong.
Your coding conventions, branching strategy, and review guidelines may seem like superficial policy hygiene. But these, along with seemingly random and disconnected activities like fixing a flaky unit test, are connected and can have a profound impact on how your team works with code.
Software development is about making choices. But available options change and so do the tradeoffs. Are you up to date with the best practices for creating a Python application in 2024? Let’s take a look at some great default choices.