How to become a better Software Developer

Welcome to my highly opinionated blog post where I hint at some topics and resources for new developers.

For whom is this list of resources? I have new developers in mind, already comfortable with programming and getting things done. If you contribute code to projects and want to learn about concepts and techniques “beyond if-else” applicable to multiple programming languages, then read ahead.

This list can never be complete - and isn’t by any means. It contains a few suggestions to get started. Keeping the list short was a big challenge and I struggled to pick only a few books.

For the sake of focus I skip two topics entirely: how to learn your tools and languages. I consider both important nonetheless. Make learning new programming languages a habit of yours.

Testing

The ability to write meaningful and stable tests for your project is (imho) one of the most underrated skills of a software developer. Well written tests will increase quality and decrease time to market. The catch: learning how to write tests comes before that. Similar to learning a programming language before project start.

I recommend you get familiar with Test-Driven Development (TDD), Behavioral-Driven Development (BDD) and the Gherkin syntax. You may want to listen to “TDD as a design tool” and “The Most Common Test Driven Development Mistakes” both with Dave Farley.

Coding and Refactoring

Your coding skills will steadily improve as you write and read code. Seek and provide code reviews from/to your peers and ask them about their opinion.

In the mean time learn about Code Smells and Design Patterns. Thinking about code smells raises awareness. Design patterns provide good solutions to re-occuring problems. Learn the smells and patterns by heart. It helps you recognizing them in code and makes talking to peers easier, as a lot of developers know them. Note that the linked resources do not provide a complete list.

As a rule of thumb I focus on readability when writing code. On the web you find tons of best practices. I personally enjoyed How To Write Unmaintainable Code very much. It is a lot of fun to read.

Software Architecture

In an attempt to boil it down: the main goal of software architecture is to keep the complexity of a system at a manageable level while fullfilling technical and non-technical constraints.

I strongly recommend to read Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans - and to read it again in a few years - and A Philosophy of Software Design by John Ousterhout (see our book review and his talk). The latter one fits into the Coding and Refactoring category as well and contains both abstract ideas and very direct, actionable tips.

Collaboration

Stereotypes aside, most software developers work in teams and closely cooperate with their peers on a daily basis. To be a good software developer you must communicate your thoughts to others (developers and non-developers alike) and, even more important, you must understand their thoughts effectively. I cannot remember a single day working without communicating by word or by written text - this includes code comments.

I like two books related to this topic especially well: The Righteous Mind: Why Good People are Divided by Politics and Religion by Jonathan Haidt and I’m OK – You’re OK by Thomas A. Harris.

Also, behave nicely: if you like a pleasant workplace, be a pleasant colleague.

Keep on learning

Always having something to learn is a particular joy for me in the computer industry. I suggest you find the time to try something completely new occasionally. Teaching what I know to peers always has deepened my knowledge as well. Presenting my findings and experiments helps me to organize my thoughts and practice concise communication.

Finally the last but not least book I recommend to read: The 7 Habits of Highly Effective People by Stephen R. Covey. Despite its title it covers business and private aspects. Among others: prioritization, communication, collaboration and personal growth at a very fundamental level.

Thanks for reading this far  and feel free to ask questions or give feedback. Hopefully you found it interesting. As said: there are many more great books and other resources. The ones I picked for this post are my suggestions.