Mistakes You Have to Make Yourself

#610 – January 26, 2025

You have to touch these stoves before you’ll believe that they’re hot

Mistakes You Have to Make Yourself
3 minutes by Dan McKinley

In this article Dan brings a humorous yet insightful collection of common programming and technical leadership mistakes that people seem destined to make despite warnings, including misconceptions about code rewrites, system complexity, and team organization. He suggests these lessons can only be learned through personal experience, similar to touching a hot stove to believe it's actually hot.

Dear Software Engineer: It's Time to Reclaim Your Role
11 minutes by Annie Vella

This article discusses the transformative impact of AI on software engineering, arguing that traditional software engineering roles focused primarily on coding are at risk of being replaced by AI. Annie observes that while software engineering was originally meant to encompass a broad range of skills, many engineers have become specialized code writers. The article presents research showing that AI coding assistants are already reducing time spent on coding tasks, with tools like Windsurf and Cursor demonstrating impressive capabilities.

Software Testing Anti-patterns
about 1 hour by Kostis Kapelonis

Kostis discusses 13 common anti-patterns in software testing that can make testing ineffective or counterproductive. The article emphasizes that failed testing efforts usually stem from these anti-patterns rather than testing itself being ineffective. It advocates for a balanced, pragmatic approach to testing that focuses on delivering real value rather than following rigid methodologies or chasing metrics.

Taking a Look at Compression Algorithms
34 minutes by Moncef Abboud

In this article Moncef explores the implementation details of various compression algorithms used in Kafka: GZIP (DEFLATE), Snappy, LZ4, and ZSTD. He explains how these algorithms balance compression ratio, compression speed, and decompression speed.

Concurrency is Coordination and Sharing
6 minutes by Pedro Ramalhete

In this article Pedro discusses two distinct aspects of concurrency in programming: coordination and sharing. He argues that while many modern programming languages focus on solving coordination-type problems through features like structured concurrency and coroutines, they often neglect the more complex sharing-type problems that involve managing shared resources. Using Java as a positive example, Pedro emphasizes that a truly comprehensive programming language should provide good abstractions for both types of concurrent programming.

Highlight from the last issue:

newsletters