programming books

Extra

- I’ve read all the programming books on the other list.

If you have read all the programming books on the main list, you should pat yourself on the back. I hope you learned a lot!

The thing is that learning never stops.

- Why aren’t these programming books on the main list?

I want to recommend programming books that I don’t consider must-reads but still have a lot to offer. Some of these programming books might be very niche also.

Agile

- How many books on agile can there be?

Agile is a simple idea about valuing short feedback loops. But how to take this and apply it successfully is another story.

Too many have overcomplicated their process and added unnecessary cruft that slows everyone down. Remember, there is no agile process.


Clean Agile

Back to Basics
Robert C. Martin

- Why do we need to go back to the basics?

Agile is a diluted term caused by years of misunderstandings.

- What is the problem with that?

Uncertainty leads to confusion for people in the industry. Taking a look at where agile started and where it ended up 20 years later is illuminating.


Extreme Programming Explained

Embrace Change
Kent Beck

- How does XP (Extreme Programming) relate to agile development?

XP came before the agile manifesto and hugely influenced it. The name comes from taking good practices and taking them to an extreme. Reviewing code is good, and an extreme variation of that would be pair-programming.

Adopting XP practices can help your team. Be wary of trying too much too early and giving up before giving it a fair chance.


User Stories Applied

For Agile Software Development
Mike Cohn

- Why are user stories important?

User stories are where the developer and customer decide what to build. For example, they should communicate value to the end-user so the customer can prioritize and help the developer discover a solution.

It’s easy to get lost in all the jargon when gathering, writing, and planning stories. However, the author does an excellent job describing common problems and their solution.

Computer science

- More computer science?

There are a lot of great topics in computer science that will help you as a programmer.

- Computer science textbooks are long and hard.

Not all computer science books are textbooks. Some of the best ones are pretty short and focused even if some are long. I will only put books I think are worth reading here.


Good Math

A Geek's Guide to the Beauty of Numbers, Logic, and Computation
Mark C. Chu-Carroll

- Why is math helpful for a programmer?

A computer can only do calculations, understanding math is understanding the computer and programming languages.

This book will give you an introduction to a wide array of subjects within math. Parts 1, 2, and 3 are fascinating but offer little value to your software craftsman career, and parts 4, 5, and 6 are helpful to understand how programming languages and computers work.


Nine Algorithms That Changed the Future

The Ingenious Ideas That Drive Today's Computers
John MacCormick

- I’m assuming bubble sort is not one of the nine algorithms.

This programming book is an easy read and will give a good overview of how Google’s search engine can be so fast, among other things.

Databases

- I know how to write SQL already.

Databases are a rich and vast subject, and learning more of them can help you avoid nasty designs and performance problems.


Seven Databases in Seven Weeks

A Guide to Modern Databases and the NoSQL Movement
Eric Redmond and Jim R. Wilson

- Knowing how to use seven different databases seems like one too many.

The right tool for the right problem is the name of the game. For smaller projects, the choice of databases has little impact. In distributed systems, what database you use can make a huge difference in response times.

Design

- Why is design so important?

Unthoughtful system design will always be a poor feat for future requirements, but a well-designed system is easy to change.


Design Patterns

Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides

- Is this book still relevant?

This programming book is considered a classic for good reasons. It’s a great book, and understanding it will significantly help you solve problems and understands other people’s code.

- This book seems technical and demanding.

It contains a log of diagrams that can take time to get used to, and the examples are in C++. Having read Head First Design Patterns helps.


Domain-Driven Design

Tackling Complexity in the Heart of Software
Eric Evans

- Another book on DDD (Domain-Driven Design)?

DDD is a big topic, and this is the original book. It explains everything you need to know to make a difference in how your business communicates and how your team writes code.

It is a dense book, and you might need to read it more than once to grasp everything.


Growing Object-Oriented Software, Guided by Tests

Steve Freeman and Nat Pryce

- Another programming book on testing?

Testing and TDD (test-driven development) are hard skills to learn.

- What makes this book different?

A common complaint is that TDD only works for lesser problems and not for real applications, A ridiculous idea!

This book takes you on a TDD journey, building an application that goes beyond toy examples.

Functional programming

- I thought object-oriented programming (OOP) ruled the world?

OOP is probably the most common paradigm right now. That doesn’t mean functional programming (FP) is obsolete or not worth learning.


An Introduction to Functional Programming Through Lambda Calculus

Greg Michaelson

- I liked the other functional programming book, but what is lambda calculus?

Functional programming comes from lambda calculus. It’s a tiny mathematical programming language.

- I already learned about monads, and algebraic data types in the other book.

Functional programming should not be a foreign concept to you. Knowledge about lambda calculus and the origin of functional programming will help you comprehend languages in new ways.


Domain Modeling Made Functional

Tackle Software Complexity with Domain-Driven Design and F#
Scott Wlaschin

- I thought DDD (Domain-Driven Design) was for OOP (Object-Oriented Programming).

Domain modeling is about turning the shared domain model of the product into code. But, of course, any programming language can accomplish this, and functional programming is pretty good at it.


Functional Programming in Scala

Paul Chiusano and RĂșnar Bjarnason

- Is Scala a functional programming language?

Scala is a multiparadigm programming language with good support for object-oriented and functional design. This programming book displays that we can apply functional programming ideas to any programming language.

Practice

- I have a programming job. Why do I need to practice?

Deliberate practice is an efficient way to become a better programmer. Honing one’s skill will make your work as a programmer more enjoyable for you and your teammates.


Exercises for Programmers

57 Challenges to Develop Your Coding Skills
Brian P. Hogan

- This one feels even more like homework than the other programming books you are recommending.

Where does one go after “Hello, world” but before building the next Google or Apple?

This book will slowly challenge you and force you to learn new concepts with every exercise. The power of structured and curated exercises is immense.