Top 10 Practices Of Effective Software Engineers

TL;DR Write code Read Code (Written) Communication Learn concepts – not technologies Learn Lisp Master your tools Control complexity (Simplicity) Read books (but don’t forget to practice) Understand the problem domain Learn to write good tests (or how to design well and write decoupled code) Introduction I am always pondering what practices, tactics, behaviours and approaches make up the most successful software engineers. After 15 years working in the industry, in small and big teams, with waterfall and agile processes, and after thousands of written lines of code, I present here an opinionated way of how to become an effective engineer....

April 11, 2023 · 16 min · Daniel Gerlach

Effective CLI (more productive than an IDE!)

TL;DR Modern Terminal with nice (Nerd) Fonts ZSH oh-my-zsh Modern Prompt with starship Modern CLI tools (fzf, ripgrep, bat, tmux, jq) Fast editor (Emacs, Neovim, Helix) Organize your dotfiles with GNU Stow The Unix shell/Command-Line Interface (CLI) is an ancient tool. Despite being around forever, the shell is highly customizable and with a good configuration, it is on par with modern graphical IDEs. Because it is configurable, you can make it truly your own, thereby surpassing out-of-the-box experience of IDEs....

January 16, 2023 · 11 min · Daniel Gerlach

Best Books For The Inquisitive Software Engineer

This article contains a list of my favorite books with a major impact on my Software Engineering career. The books are categorized in: Software Engineering Programming Brian Kernighan’s Books Modern Classics Learning Management and Leadership Unix Books From Stevens Software Engineering A Philosophy of Software Design by John Ousterhout Link to book A fabulous book to level up your software design skills as an experienced engineer. The book is full of great advice....

November 4, 2022 · 16 min · Daniel Gerlach

Software Engineering and Feedback Loops

Introduction Most of the breakthrough inventions in historic and modern Software Engineering are related to feedback loops. They are essential for productive software development, Developer Effectiveness and Developer Happiness. Remember the dawn of computing when computers were programmed with punch cards, programmers had to turn in their cards over night and the next day they got the result – often with a compile error 😞. Unlike back then, today’s computers compile whole codebases in seconds....

September 29, 2022 · 7 min · Daniel Gerlach

The Non-Productive Programmer (NPP)

We all know them: programmers with long term experience stuck on a low-level of our craft not corresponding to their quantity of experience. Great programmers are creative workers and problem-solvers and one of their most important traits is: never stop learning – but getting stuck in its own comfort zone and becoming reluctant to change is deeply wired into human nature (Humans are hard-wired to follow the path of least resistance)....

December 18, 2021 · 9 min · Daniel Gerlach

Reading List for the mindful Software Engineer

Abstractions are essential in order to build complex systems and keep complexity under control. Especially in software development we rely on many abstractions to make our life easier. Although good abstractions do not “leak”, it’s always helpful to understand the background and the details behind them. The following list (in chronological order) of classic computer science papers will give you insights of inventions of the last decades which are considered nowadays common sense....

September 10, 2021 · 11 min · Daniel Gerlach

Database Integration Tests with Docker Sidecar in Jenkins

More often than not, developers want to test the source code against a real database instead of Fakes or Test Doubles during a CI job in order to verify the code works as expected. Therefore a clean database is needed for every CI-job. One solution is to use a shared instance of the database in your existing test-environment which get cleaned before and after a job. But this suffers from being “shared” and you never can run multiple CI-jobs in parallel without jobs interfering with each other....

May 9, 2021 · 2 min · Daniel Gerlach

Writing better Code

In Joel Spolsky’s blog post “The Joel Test: 12 Steps to better Code”, he describes a test composed of twelve simple yes-no questions. For a yes you get one point. 10 points are acceptable and 12 are perfect. If you have less than 10 points, you will get in trouble with your software – sooner or later. For a quick self-check, these are the original questions: Do you use source control?...

August 16, 2020 · 15 min · Daniel Gerlach

Google Testing Toilet Collection

In my one of my previous posts i wrote about Good Unit Tests. During my research i discovered the famous Google Testing on the Toilet posts which provide great advice. The Testing-on-the-Toilet articles are short (~3min reads) and give hands-on examples, ready to be applied immediately. Here are my favorites: Testing on the Toilet Tests Too DRY? Make Them DAMP! Exercise Service Call Contracts in Tests...

May 23, 2020 · 2 min · Daniel Gerlach

Programming Quotes

Over the years i collected some (funny) programming quotes. Lean back and enjoy: Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it? Brian W. Kernighan Don’t comment bad code—rewrite it. Brian W. Kernighan The most effective debugging tool is still careful thought, coupled with judiciously placed print statements....

May 17, 2020 · 7 min · Daniel Gerlach