Share: Facebook icon - Twitter icon - LinkedIn icon

Books that boost your programming career (Java developer edition)

Published Mon Sep 07 2020

Tags: java books enterprise career programming

In this article I will share some books that helped me most in the beginning of my professional career. Even though I have programmed in my spare time for many years before getting a job, I think that programming in an enterprise is way different! Learning to cooperate with more people, reviewing code, seeing patterns in code, bigger codebases. tools and technologies that you may not use on your own, and so on! The books I will share are mostly technology agnostic, as I think patterns help way more than learning specific libraries, frameworks and tools. Learning about design patterns, how to write clean code, and how to write maintainable code are far more useful than learning many different tools and libraries. Why? Because when you learn patterns, you will see these patterns in many new libraries and tools you learn, and therefore learn them faster! I will also say that learning to think differently can help a lot, because it makes it easier for you to learn new things in the future.

Do reading the books help? Yes, I would say so. Some of these books at least helped me to go from "coding in moms basement" to professional programming. I got good feedback fast in my career, and got to do things like architecture quickly. People also seem to want my opinion on different topics, and I get good feedback when I do talks. These are just quick examples, but I think reading the books on this list can help you grow much faster than if you did not. The information below are not summaries or reviews, but short descriptions about what the books are about and why you should read them. By clicking on the book cover images or links below, you will be taken to the Amazon page for that book.

This is by no means an exhaustive list with all books, but is meant as a list to get you started boosting your career. There may be future more advanced book lists if people are interested. That list would contain more architecture books, patterns, books about useful tools and methodologies and so on.

NB! This article contains Amazon Affiliate links aka paid links. This means I earn commissions on qualified purchases.

Table of contents:

Clean Code by Robert C. Martin (aka Uncle Bob)

Most of you have probably heard this book mentioned before, as it has become one of those books that everyone mentions. The author has also become quite a legend in the software development world with his books, courses and long career.

What is it about, and why should you read it?

With a title like "Clean Code", you know what you are going to get! In this book, you are presented with guidelines for how to write beautiful expressive code that is easy to maintain. Ugly code is hard to understand, while clean code will be easier to understand and maintain. While the book is focused on Java, I think the tips are useful for almost any language.

Learning to write code that is easy to read for others is paramount in an enterprise. Code is often maintained and revised for years after it was initially written.

What does it help with in your career?

When you write code that is easier to read, it will be easier for others to read. As well as yourself the next time you revisit your older code! That way you can work more effective with other people, and we can write code faster and enjoy working with it.

I can recommend Clean Coder as well on what it takes to be a professional programmer (according to the author), but it did not make as much as an impact on me as Clean Code. That being said, I still VERY much recommend reading it! It gives you much insight on what you should know if you want a professional career in software development.

Design Patterns: Elements of Reusable Object-Oriented Software by Eric Gamma, Richard Helm, Ralph Johnson and John Vlissides

I know this book has a long name and many authors (known as the Gang of Four), but don't be scared! While some of the patterns in this book might be outdated by now, a lot of them are still useful today. Many of the patterns might not be something you write yourself from scratch, but you will find them in many libraries and code generators that you use. Notable examples include Lombok (Builder, UtilityClass for static factory method, and more), Spring Framework (Singleton, Factory, Proxy etc.) and the SDK for Android development (Adapter and more).

What is it about, and why should you read it?

A collection of many design patterns, which are repeatable solutions to commonly occurring problems, to assist you while designing new software. These come in several categories: creational (creating objects), structural (e.g, how objects are accessed and used) and behavioral (e.g, interactions between objects). While some of them are not so relevant anymore, it is still a useful to see how different problems can be solved (e.g, object creation and delegation). Many of the patterns are still found in modern software, and have clearly influenced their design (see introduction for examples). I would say skip chapter one, as it is clearly dated. If you think the entire book is dated and hard to read, I have heard that a lot of people enjoy the more modern Head First Design Patterns book (not read it myself though).

What does it help with in your career?

You will recognize patterns in libraries you learn, frameworks you use and so on. More importantly you will know of some solutions to commonly occurring problems in object oriented software development, so you can use the design patterns yourself if you encounter problems that are similar in nature.

Effective Java by Joshua Bloch

Together with the next entry, Effective Java is one of the more practical books on the list. It shows you in essence how to write good Java code, and code you should avoid writing. Another selling point is that it is written by one of the original authors of the Java standard library; Joshua Bloch himself! If you need a book with code examples and practical tips, I highly recommend this one!

What is it about, and why should you read it?

Effective/recommended ways of working with the Java programming language. This includes both effective for readability and for performance. In general the book contains many tips and tricks for working with Javas library and many features. It will make you a better Java programmer, and teach you about parts of the Java Virtual Machine (JVM) that you probably did not know about.

What does it help with in your career?

If you don't ever use Java (or another JVM language), it won't… But if you do, it will give you value on what GOOD Java code actually is. Should you always use lambdas and streams? (NO!!!). How should serialization be used? This is probably one of the Java books I have had the most use for.

Structure and Interpretations of Computer Programs (SICP) by Harold Ableson, Gerald Sussman and Julie Sussman

Update 2022: Seems like the newest edition for sale uses JavaScript instead of Scheme. The MIT website still have the second edition that uses Scheme. Not read the newest JavaScript version (put it in my reading list for now), but the original is fantastic! Might be weird to recommend a very non-Java book on this list, but it teaches you different ways of thinking which are useful no matter what language you end up working in (probably except very low level languages).

The obligatory "think differently" book on this list! SICP is a classic book, and for good reason. Many developers today are mostly familiar with object oriented languages like Java, C# and C++, so learning a more functional language like Scheme can help broaden your horizons. (it is not a language that only supports functional programming like Haskell though…).

This book can also be read for free online at MITs webpages, which is a bonus!

What is it about, and why should you read it?

In essence: Thinking differently and learning a new language. In this book you will learn to think in a more functional way, learn to think in different concepts, implement various algorithms and more! One very peculiar highlight is Church Numerals (only a few exercises, but still fun!). Church Numerals is basically treating numbers as functions instead of plain numbers, so they are in a way a method of encoding numbers (and you can indeed convert them to regular numbers).

That being said, do you need to read everything? This book is quite old, isn't it? Is everything still relevant? I would say that most of it is very useful to learn, but you may not use it at your job. I would say read at least the first 4 chapters (up to and including the Meta-Circular Evaluator where you make your own Scheme/Lisp!). A lot of the ideas you learn will help you think differently about future tasks you may have at work.

What does it help with in your career?

If you use any higher level (C level or above) language, and especially those with higher-order functions (functions that return functions or take functions as arguments), then the topics in this book will prove very useful! (even better if you use functional languages like Haskell, Clojure, Elm or something else!). In Java you have streams, in which you can directly use much of what you learn in this book. The most important part is learning to think differently, so you know of different ways to solve problems.

Release It!: Design and Deploy Production-Ready Software by Michael T. Nygard

So you have written your code, and everything has gone well during testing. Now we are ready for production! Wait, are we really? Release It! is a book about what you should make sure of before doing to production, as well as common pitfalls.

What is it about, and why should you read it?

The point of developing software is that is some day will be in production (if it is not a library or framework, then it will be part of other software in production). With this book you can learn some things to check for in your software, how to find errors earlier and what to do when errors happen. Topics includes timeouts, firewall issues, antipatterns for security and more. You will also be introduced to some testing strategies like chaos engineering. As well as stories from the author that are interesting and emphasize the importance of the lessons learned.

What does it help with in your career?

Going from writing software to getting it in production is an important step. How do you know that your software is easy to maintain? And what do you do if you get problems? I think this book has helped me handle all of these questions better. No projects will be perfect, but you can at least know of some common topics to think about for each project.

Bonus: The Pragmatic Programmer by Dave Thomas and Andy Hunt

I would have gotten a lot of complaints from now until eternity if I did not include this title! It is a classic within the niche of software development books, and for good reason. It contains a mix of practical skills you should learn, as well as how you should think about many different topics. It even includes some tips on what you should do to improve your skills. The older edition is called The Pragmatic Programmer: From Journeyman to Master, and the newer 20th anniversary edition is called The Pragmatic Programmer: your journey to mastery. I would probably recommend that you choose the newer edition, but I'm mentioning the older one as that is the one I have read (I have sadly not read the newest edition).

Bonus 2: Clean Architecture by Robert C. Martin (aka Uncle Bob)

Clean Architecture is mainly about software architecture and structure, with the angle on making it easy to work with and maintainable. While I think the architecture presented is interesting, I think the best parts of this book is the summary of the SOLID principles and of general architecture concepts. SOLID principles (which could probably be the topic of their own article) are useful to know for structuring object oriented software, as well as understanding how different libraries and frameworks are structured.

Other posts that might interest you: