Recommend Programming Reading List

I have read a ton of tech books over the past ten years. My goal is to recommend books that help you to develop a framework for thinking ans solving problems. I am to read books that are more than syntax guides or basic how to.


Foundational Books

These are the first three books I recommend, even if you have been a programmer in years.

Pragmatic Thinking and Learning

By: Andy Hunt

This book teaches you how to think and learn better. It explains your brain on a high level. Pay close attention to is the Dreyfus model of skill acquisition.

After reading this book you should:

  • Understand the differences between novice and an expert
  • Be able to evaluate yourself this novice to experts scale with various skills (not just tech skills)
  • Understand how you brain works, and how you can use that to learn better
  • Try more R-Brain activities

Clean Code: A Handbook of Agile Software Craftsmanship

By: Robert C Martin (Uncle Bob)

Wither you learned about the tools of programming through school or on your own you probably don't know how to use them correctly. This book will teach you how to create clean abstractions and clean code.

After reading this book you should:

  • Be able to write a readable function with only 1 input param
  • Loath comments (but not clarity)
  • Refine your ideas of classes and objects
  • Be convinced that unit testing is critical to quality software

The Clean Coder: A Code of Conduct for Professional Programmers

By: Robert C Martin (Uncle Bob)

Now that you are thinking better, measuring your skill level and writing clean code you should act professional. Professionals are skilled tradesmen/women that act with maturity. Robert Martin teaches you how to be a professional programmer.

After reading this book you should:

  • Know when and how to say No.
  • Know when and how to say Yes.
  • Understand the full gambit of testing (Unit, Component, Integration, System and Exploratory)
  • Give meaningful estimates
  • Know how to play well with others.

Algorithms

Algorithms is a big subject. My computer science degreed helped me to be able to speak the language of algorithms. The books below have helped to grow my understanding after a few years in the field.

Nine Algorithms That Changed the Future: The Ingenious Ideas That Drive Today's Computers

By: John MacCormick

The author has selected nine algorithms and approached them in a very readable and understandable format. He covers search, public-key cryptography, pattern matching, error-correcting codes, data compression, data compression and digital signatures. All of the chapters (except for search) are stand alone so if something interest you can skip to it and not be lost.

The book ends on a philosophical note. It deals with the question of "What is computable?" An algorithm only works when a problem is computable. The chapter on computability was interesting and has lots of implications about the nature and limits of computing. If this topic interest you, check out the history of Bell Labs for more stuff on Information Theory.

After reading this book you should:

  • Understand the nine algorithms covered
  • Understand the idea that some problems are not computable
  • Have a resource to share with friends that want to understand how things like Google work

For the Historian

The Idea Factory: Bell Labs and the Great Age of American Innovation

By: Jon Gernter

This book will go through the history of Bell Labs. It is very enjoyable read. The author has dug through the history of this famous lab. If you are interested in the roots of Information Theory, the transistor, lasers, satellites, fiber optics, cell phones or problem solving on a massive scale this book is for you.

One of the interesting things about this book is that you realize that without the contributions of Bell Labs the information age would not have come about (at least in the way we know it now). The background of the creators of the ideas and technologies above is very interesting. You can see how these personalities shaped their products.

I never realized the massive change that being able to call people brought. I also never realized that it was such a hard problem to solve. The book makes a strong case for the value of basic research in solving these big problems. I think a key factor in the output of the labs was the fact that it faced such big problems. Big problems seem to draw the genius out of people.