10 Books Highly Recommended by our Teams

1) “Working Effectively with Legacy Code” by Michael Feathers

This book provides programmers with the ability to cost effectively handle common legacy code problems without having to go through the hugely expensive task of rewriting all existing code. It describes a series of practical strategies that developers can employ to bring their existing software applications under control. The author provides useful guidance about how to use these strategies when refactoring or making functional changes to code bases. One of the book's key points is that it teaches developers to write tests that can be used to make sure they are not unintentionally changing the application as they optimise it.

2)  “The Pragmatic Programmer” by Andrew Hunt and David Thomas

Written as a series of self-contained sections and filled with entertaining anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best practices and major pitfalls of many different aspects of software development. Whether you're a new coder, an experienced programmer, or a manager responsible for software projects, use these lessons daily, and you'll quickly see improvements in personal productivity, accuracy, and job satisfaction. You'll learn skills and develop habits and attitudes that form the foundation for long-term success in your career. You'll become a Pragmatic Programmer.

3) “Cracking the Coding Interview: 189 Programming Questions and Solutions” by Gayle Laakmann McDowell

Written by a software engineer that has couched and interviewed hundreds of developers, this book is a culmination of her knowledge from these experiences. It teachers you all you need to know to perform at your very best in a software engineering interview. It details how to uncover all the hints and hidden features in a question, how to break a problem down into manageable chunks, techniques to manoeuvre out of mental blockages and a wealth of real past-interview questions to help you practise these techniques.

4) “Thinking in Java” by Bruce Eckel

Thinking in Java is highly regarded by programmers worldwide for its extraordinary clarity, careful organisation, and small, direct programming examples. It explains the ‘why’ of Java: why it was designed the way it was, why it works the way it does, why it sometimes doesn’t work, why it’s better than some languages, why it isn’t better than others. From the fundamentals of Java syntax to its most advanced features, Thinking in Java is designed to teach, one simple step at a time.

“It's a really good book, because on top of going through each technical aspect of Java language in detail, it actually does what the title suggests. It wires you to think in ways compatible with OOP dogmas and ideas. Reading it in my first year of uni really helped me start coding in such a way that I understood what I'm doing and why.”

~ Wojtek Malek, Full-Stack Developer

5) "Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C Martin

Martin has teamed up with his colleagues from Object Mentor to distil their best agile practice of cleaning code “on the fly” into a book that will instil within you the values of a software craftsman and make you a better programmer—but only if you work at it. Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code—of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code.

6) "Clean Architecture" by Robert C Martin

Building on his previous book "Clean Code", Robert details how applying universal rules of software architecture can dramatically improve developer productivity throughout the life of any software system. Martin’s Clean Architecture doesn’t merely present options. Drawing on over a half-century of experience in software environments of every imaginable type, Martin tells you what choices to make and why they are critical to your success. This book is packed with direct, no-nonsense solutions for the real challenges you’ll face–the ones that will make or break your projects. It is an essential read for every current or aspiring software architect, systems analyst, system designer, and software manager–and for every programmer who must execute someone else’s designs.

7) "Structure and Interpretation of Computer Programs" by Abelson, Sussman and Sussman

Sometimes referred to as the ‘Wizard Book’ in hacker culture, this computer science text book written by Professors from the Massachusetts Institute of Technology teaches fundamental principles of computer programming, including recursion, abstraction, modularity, and programming language design and implementation.

“It's pretty much a classic for all Computer Science students at uni. Since I didn't study CS at uni, I'm trying to self teach myself some core concepts with this. Although it's not very practical, some of the concepts have definitely changed my overall view of programming.”

~ Junior Full Stack Engineer

8) “Eloquent JavaScript” by Marijn Haverbeke

A strong knowledge of JavaScript is useful for several of our projects which is why our team recommend this book. Eloquent JavaScript dives deep into the JavaScript language to show you how to write beautiful, effective code. You start by learning the basic structure of the JavaScript language as well as control structures, functions, and data structures to help you write basic programs. Then you'll learn about error handling and bug fixing, modularity, and asynchronous programming before moving on to web browsers and how JavaScript is used to program them. As you build projects such as an artificial life simulation, a simple programming language, and a paint program, you'll learn how to: 

- Understand the essential elements of programming, including syntax, control, and data

- Organise and clarify your code with object-oriented and functional programming techniques

- Script the browser and make basic web applications

- Use the DOM effectively to interact with browsers

- Harness Node.js to build servers and utilities”

9) “An Introduction to Statistical Learning” by Hastie, Tibshirani et. al.

An Introduction to Statistical Learning provides an accessible overview of the field of statistical learning, an essential toolset for making sense of the vast and complex data sets that have emerged in fields ranging from biology to finance to marketing to astrophysics in the past twenty years. This book presents some of the most important modeling and prediction techniques, along with relevant applications. This book is targeted at statisticians and non-statisticians alike who wish to use cutting-edge statistical learning techniques to analyse their data. The text assumes only a previous course in linear regression and no knowledge of matrix algebra.

One of our top Data Scientists describes it as:

“An accessible, but mathematically rigorous, book by two big names in statistical learning, Hastie and Tibshirani, for beginner or intermediate practitioners of machine learning. It also serves as a manual for looking up details on many of the most commonly used ML algorithms. There are two other books following this one for advanced ML and even neural networks.”

~ Hugo Valent, Data Scientist (Team Lead)

10) “Don't Make Me Think” by Steve Krug

If you are looking for a more design oriented read, Don't Make Me Think by Steve Krug is about human–computer interaction and web usability. Hundreds of thousands of Web designers and developers have relied on usability guru Steve Krug’s guide to help them understand the principles of intuitive navigation and information design. Witty, commonsensical, and eminently practical, it’s one of the best-loved and most recommended books on the subject.The book's premise is that a good software program or web site should let users accomplish their intended tasks as easily and directly as possible. Krug points out that people are good at satisficing, or taking the first available solution to their problem, so design should take advantage of this. The book is intended to exemplify brevity and focus. The goal, according to the book's introduction, was to make a text that could be read by an executive on a two-hour airplane flight.

Written by:
Aoife McCardle