Thursday, May 05, 2005

A few good programming books

When I get free time I enjoy reading programming books. I frequently pick up new ones that people recommend to see what they have to offer(1). Here is a list of the best books that I think every serious programmer should read, if not already have sitting on their shelf.

Core Programming

These books don't teach the latest fad programming language in twenty for hours and often times they often don't even discuss a specific programming language, but the techniques that are taught are timeless and when taken to heart no programmer will come out unchanged for the better.
Unlike most programming books each time you read these books you discover something new and valuable. I will typical read them every other year, each time gaining something new as I draw upon my recent experiences. For those who aren't new to programming after reading these books you will wish someone had told you about them back when you were first learning to program. These books each contain wisdom that the authors have learned through the years.

Pragmatic Programmer
Pragmatic Programmer: From Journeyman to Master

By Andrew Hunt, David Thomas

Addison-Wesley, Paperback, Published October 1999, 321 pages, ISBN 020161622X

An overview of all the essential tools (editors, version control systems, project managers, etc) that a programmer should be using. It explains why they should each be used and also how to best use them. This book is clear, concise, and filled with examples. It shows good habits which can form the foundation for success in projects and in a programming career.

Code Complete
Code Complete

By Steve McConnell

Microsoft Press, Paperback, Published March 1993, 857 pages, ISBN 1556154844

An invaluable reference that focuses on successful programming techniques. It includes many examples of good and bad code in many different languages. Topics like: how to make your program easier to debug, naming conventions for variables, comments, and where code should belong in a object, make this book valuable by themselves. But it also covers many other topics in depth like refactoring, design, and testing. This book will bring to light some ugly habits that every programmer has and hopefully rid them of it.

Note that there is a Second Edition (ISBN: 0735619670) which although I haven't read yet I have been told it is similar to the first.

Mythical Man-Month
The Mythical Man-Month

By Frederick P. Brooks Jr.

Addison-Wesley, Paperback, 2nd edition, Published August 1995, 322 pages, ISBN 0201835959

A classic book on software engineering which applies just as much today and when it was written in 1975. The book introduced the idea that changing the size of the staff working on a project wont improve a project, but might in fact significantly hinder it. It also accentuates that there is no silver bullet in programming, only a lot of best practices (see above books). This book is referenced in countless other titles and is a worthy read on its own for the fundamental project management ideas presented.

Diffusion Of Innovations
Diffusion Of Innovations

By: Everett M. Rogers

Free Press; 5th edition (August 16, 2003), 322 pages, ISBN: 0743222091

This book is not the easiest book to read, in fact is reads almost like a text book. If it wasn't populated with short stories all throughout this tomb of a book I would have a hard time recommending it. Countless smaller books have been written based upon the information presented in this book. This book takes you step by step through the diffusion of innovation process. It tells you how each step is reached, and more importantly how it isn't reached. The two books on the upper right The Innovator's Dilemma and Crossing the Chasm discuss specific portions of the curve (begining and end respectivly) and are highly recommended reading also. After reading the book you will find yourself recognizing the adoption curve in your every day life. So why does this go with technical books? Unless you are a code grunt you will want to pursuade a group of people of new ideas (abstract ones at that). This book will help you do just that.

GUI Bloopers
GUI Bloopers: Don'ts and Do's for Software Developers and Web Designers

By Jeff Johnson

Morgan Kaufmann, Paperback, Published March 2000, 559 pages, ISBN 1558605827

What is this book doing here you might ask? Well it might not have the deep insight that the above books have, but it does serves an important purpose. Too many user interface books use confusing abstract themes or waste the majority of the book pointing out stupid interfaces in other applications without providing any content of their own. This book does something different, it goes through all of the common GUI objects (buttons, toolbars, checkbox, etc) and discusses what the widget is suppost to convey to the user, how to use it, and how to not use it. Too many programmers may have read the high level user interface books, but can't apply them to the every day programming. This book plainly lays out what and what not to do, which for a lot of developers is more important than theory.

The Design Of Everyday Things
The Design Of Everyday Things

By Donald A. Norman

Basic Books; 1st Basic edition (September, 2002), 272 pages, ISBN 0465067107

Once you have read GUI Bloopers take the time to check out this book. The vast majority of the book does not talk about computers and there interfaces, but rather much simpler items such as doors and how badly many are designed. More importantly throughout the book the author explains in the most well written manner (don't underestimate this feature) I have read about why designers think their designs are self explanatory when they are just wrong. Most other books gloss over this fact hoping you will memorize their rules. Another idea which is much more prominently talked about in the book is the idea of blocking, or removing features from the users when the option wont do anything or cause harm. Unlike Gui Bloopers, The design Of Everyday Things discusses in more abstract form. Hopefully this will help you make good users interface choices for topics not covered in Gui Bloopers.

1. If you feel there is a book that is on your bookshelf that you think every program should read it let me know about it. Although I listed only a very few books here I have quite a collection at home and at work and have read through many programming books good and bad.

No comments:

Popular Posts