Over a million developers have joined DZone.

5 Essential Reads for 2018

DZone 's Guide to

5 Essential Reads for 2018

Set the MacBook aside for a second and pick up one of these recommended books to keep you encouraged and up-to-date for 2018.

· Agile Zone ·
Free Resource

As we usher in a new year, it's a good time to take stock of what we have learned over the last year and reflect on what we can improve on. One of the most important methods for improving, both as individuals and as software developers, is deciding on which books to read over the coming year and whom to follow for the best possible information.

In this article, I have compiled a list of books I have personally found to be the most impactful as a tool for growth. Some are software books that many will be familiar with, while others are far from the run-of-the-mill books that developers are used to. The goal of this list is not to just improve coding skills, but also make for better leaders and more mature decision makers, which has just as much—if not more—utility in the world of software engineering.

This list is by no means exhaustive and there are countless other excellent books that I have not included. If you have suggestions for other books or publications to read over the coming year, let us know in the comments. Note that all images are reproduced from Amazon and all books on this list can be purchased through Amazon Prime.

The Book List

Extreme Ownership

Jocko Willink & Leif Babin

Although it not customary to start a list of software books with a non-software book, this book is so essential, it tops the list. Unique in many respects from other fields, software engineering requires that its practitioners deal with setbacks, difficult business decisions, leadership dilemmas, and most importantly, other people dealing with these same issues.

Tested in the crucible of combat, Jocko and Leif provide a series of principles that apply to both daily and professional life. While it can be easy to dismiss military advice as extreme or even unrelatable ("It may work in Ramadi, but how does that apply to my office?"), nothing can be further from the truth with this book. It provides a foundation of extreme ownership (taking full responsibility for our actions, no matter the cost), as well as a track on which to sharpen leadership skills and empower those up and down the chain of command to exceed their current abilities.

After reading this book, it will be difficult to look at a bad situation—whether in life or at work—and not think: Good. I can't control what happens to me, but I can control how I react. Discipline. Ownership. Leadership. Those are the principles that make a good leader, and leaders make even better software engineers.

For those interested, Jocko Willink has also created a field manual called The Discipline Equals Freedom: Field Manual that incorporates these principles into an easy-to-digest book. Jocko Willink is also the host of the Jocko Podcast, which is highly suggested for those looking to hone their discipline each week.

The Design of Everyday Things

Don Norman

Most software that we create is not relegated to a non-human environment. Instead, users, project managers, and other software engineers will be constantly interfacing with our code. In this book, Don Norman shares his acute insights on how we as people interact with the world around us and how we expect the world to around us to work. Ever try to push a pull door? Ever stop at a faucet and wonder how to get hot or cold water to come out? We've all been there and we've all felt the embarrassment of not knowing how to operate a system, but the world does not have to be that way.

If we design systems, whether it be User Interfaces (UIs) or even non-graphic systems, to work in a manner that matches people's expectations, not only will users be more satisfied, but we will also reduce the complexity of our systems. Whatsmore, if we write code that operates in the manner that other developers expect it to (i.e. comments that match what our code does and names of classes or methods that actually match what they are designed to do), we can save a great deal of time and frustration.

Note that this book was originally published in 1988, and while the core principles have not changed, the book has been updated with more modern examples and more detailed explanations of the principles. The International Standard Book Number (ISBN) number for the revised edition is 978-0465050659.

Release It!

Michael T. Nygard

Many software books provide a great deal of technical information about different techniques, patterns, and libraries that can be used to greatly reduce the effort required to build practical systems. While these books are essential in the library of any software engineer, Release It! is a much different kind of book.

Instead of focusing on specific code or a choice framework, Nygard focuses on the environment in which we as software engineers operate: Late nights at the office, time away from family, working while on vacation, well-tested code inexplicably breaking, dealing with personal mistakes, and dealing the consequences of mistakes by others. Although there is no escape from these hindrances, there is a lot we can do to reduce their frequency and even to catch these problems before they rear their head.

This book dives into the details of how to handle real-world software engineering, providing funny anecdotes and serious solutions to problems that we all face. Not only will it provide a good laugh, it will also save a few hours of time and maybe even give you back a weekend in the future.

Effective Java (3rd Edition)

Joshua Bloch

The Effective series of books, first authored by Scott Meyers, has been an indispensable part of C++ since its publication in 1997. In that time, these books have grown to become a must-have on the shelf of any C++ programmer, due in large part to their inclusion of practical advice from one of the most experienced and talented C++ programmers.

In 2001, Joshua Bloch applied this same approach to Java and created the Effective Java series. Apart from having an intimate knowledge of Java, Joshua is a former employee of both Google and Sun Microsystems and has played an active role in countless portions of the Java Language standard. In much the same way as Meyers, Bloch has applied his wealth of Java knowledge in an easy-to-read book consisting of 90 distinct suggestions for how developers can improve the way they write their Java.

Not only does this book steer developers in the right direction, it also provides the keen reader with numerous examples of well-written Java (i.e. the reader is given countless snippets of code written by one of the most experienced Java programmers in history). The 3rd edition of the book just released in late December 2017 and includes updates for Java 7, 8, and 9, as well as pointers for better functional and modular programming.

Java 9 Modularity

Paul Bakker & Sander Mak

While Java 9 released late in 2017, it has yet to fully catch on. As with many major releases, the introduction of modules in Java 9 has solved numerous existing issues (such as the coupling within and size of the standard Java libraries), but it has also made the transition from previous Java versions to Java 9 much more difficult. Not only are developers now required to learn new programming techniques, they are also required to understand how existing code interact with the Java 9 modular environment.

While this could be a daunting task, this book provides simple and logical explanations for each facet of the module system, provides detailed explanations of how the module system handles the existing classpath, and even includes extensive information on how to smoothly transition from pre-Java 9 code to Java 9 modules. As we usher in 2018, it is likely that Java 9 will play a much larger role in new and existing projects alike, and we risk falling behind by not gaining at least a cursory understanding of this new technology.

books ,java ,Agile ,Design ,leadership

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}