Programming in General - accu-org/essential-books GitHub Wiki

These books provide general guidance on programming in the large. Although they may have a language bias they still provide plenty of information that would by useful to anybody looking to improve their programming skills.

The Pragmatic Programmer (Andrew Hunt & David Thomas)

Reviewed by: Francis Glassborow and Ian Bruntlett

If you're looking a densely-packed book chock full of sound advice about all manner of topics relevant to the development of a software product you can't go far wrong with this.

The Practice of Programming (Brian W. Kernighan & Rob Pike)

Reviewed by: Francis Glassborow and Chris Hills

This book is in a similar vein to The Pragmatic Programmer but with a bias that would be more suitable to a C/C++ audience. It too covers a vast range of programming topics.

Refactoring: Improving the Design of Existing Code (Martin Fowler)

Reviewed by: Roger Orr and James Roberts

Refactoring is the art of improving the design of a codebase whilst maintaining its existing behaviour so that future changes are easier. This books details many different types of refactorings with help on when they are most effective.

Working Effectively with Legacy Code (Michael Feathers)

Making changes in any codebase, whether old or new, is far more difficult when there are no existing tests to work with. This book teaches you how to tame such a beast and provides various techniques on how to get tests around code that was never originally designed to be unit tested.

Test Driven Development: By Example (Kent Beck)

Reviewed by: John Mullins, Paul Grenyer, and Francis Glassborow

TDD (Test Driven Development) is one of the modern agile technical practices that is used to mould code by writing tests first. This book is the definitive guide to the subject.

97 Things Every Programmer Should Know (Various)

This book is a collection of various topics from a variety of authors about what they consider to be essential knowledge for programmers.

The full text of the book is available online at: 97 Things Every Programmer Should Know

Structure and Interpretation of Computer Programs (Abelson, Sussman and Sussman)

A review of the important concepts of computer programming through the introduction of the Scheme programming language, which is a simplified variant of Lisp developed for this book and the MIT Computer Science course for which it was the textbook.

The full text of the book is available online at: Structure and Interpretation of Computer Programs

Code Complete: A Practical Handbook of Software Construction (Steve McConnell)

Reviewed by: Francis Glassborow and Arun Saha (below)

If there is one book that I wish all my co-workers have read, then this is the book. At 900+ pages, it is not a quick read but it is entirely worth the effort. It is mostly language neutral, so programmers of any language can peruse it. This single book captures a lot of wisdom. The contents are timeless; they are still relevant fourteen years after they are written and likely to be that way in future. It covers topics like variable naming (Chapter 11, The Power of Variable Name), function length (Section 7.4, How Long Can a Routine Be?), the importance of straight line code (Chapter 14) -- the topics that are deceptively simple. This is from hard-earned experience, programmers realise this only after working and introspecting for a while on multiple projects. The content gradually goes up the stack to cover code improvement techniques (refactoring, code-tuning), project-level considerations etc. Towards the end, it dives into software craftsmanship which includes layout, style, and the path to self-documenting code. A lot of advice from this book are often ignored as a small matter of programming; however, after working on many large code bases in small-to-large-size teams, I can say that software engineering organisations lose a lot of time and effort by ignoring such precious advice. Don't let this happen to you!