vote up 9 vote down
721
views

Post answers with the author/book pair. Let's keep it language-neutral.

Here's the Coding Horror Recommended Reading list

Edit: Related Stackoverflow Question
What is the Single Most Influential Book Every Programmer Should Read

offensive?
add comment

29 Answers:

vote up 15 vote down
accepted answer

Most of the books I would recommend were already on Jeff's list. Here are a few more that I'd recommend to someone just starting out:

  • Kyle Loudon, Mastering Algorithms with C
  • Martin Fowler, Refactoring
  • Eric Freeman, Head First Design Patterns (A much more gentle treatment of the subject than GoF)
  • Shelley Powers, Jerry Peek, Tim O'Reilly, and Mike Loukides, UNIX Power Tools
  • Ben Collins-Sussman, Brian W. Fitzpatrick, and C. Michael Pilato, Version Control With Subversion

And of course, Steve Yegge has a list of 10 great books for the more keen members of the audience. :)

link|offensive?
add comment
vote up 7 vote down

I think it's important when you are starting off to get "quick wins". Something heavy like the books on these lists will just kind of bog you down. If you're not seeing instant results, you are likely to get discouraged by the deep theory and bogged down by the complexity.

Maybe if you are over 20 and mature enough to really delve into all that, something like Code Complete would be OK, but actually I'm not sure you could even fully comprehend what that book had to say until you'd been in the trenches, or at least seen the trenches.

I'd recommend someone who was truly just starting off to pickup a book on JavaScript or PHP (or Python). There's nothing that will get you hooked faster than within five minutes of picking up your first programming book having your computer "talking" to you and interacting with you. Once you've gotten "addicted" to programming, then you can start to really appreciate the deep theory and wonderful history that programming and CS has to offer.

At that point you can start learning C and reading Code Complete, Codding Horror, theDailyWTF, Don't Make Me Think, etc. etc.

So, saying all that, the first thing I would recommend would be:

JavaScript for the World Wide Web Visual Quickstart Guide (Tom Negrino & Dori Smith) and/or JavaScript for the Absolute Beginner (Andy Harris)

Or really any book from the Visual Quickstart Guide series, or PHP for the Absolute Beginner (Andy Harris) or even HTML, XHTML, and CSS All-in-one Desk Reference for For Dummies (Andy Harris & Christopher McCulloh (I wrote the PHP & jQuery portions - yes, shameless plug))

link|offensive?
add comment
vote up 5 vote down

The first book I would recommend would be Code Complete by Steve McConnell, however that's already on Jeff's list.

Code: The Hidden Language of Computer Hardware and Software Charles Petzold

This is a great book for a beginner to really understand computers and how people communicate with them at the most fundamental level. It's also a very entertaining read.

link|offensive?
add comment
vote up 4 vote down

Programming Pearls and More Programming Pearls by Jon Bentley are really good in teaching you to think like a programmer.

link|offensive?
add comment
vote up 3 vote down

Honestly, the best book on software development I've read as of yet is mentioned in Jeff Atwood's reading list: The Pragmatic Programmer by Andrew Hunt and David Thomas is very nice because of its bite-sized chunks of incredibly useful wisdom. You can crack open this book, turn to a random section and get not-so-common common-sense advice which is applicable to everyday projects. I would recommend it to anyone who writes code for a living. Even if you have been programming for a few years, there is bound to be something useful within this book.

link|offensive?
add comment
vote up 2 vote down

Bruce Eckel, Thinking In C++ - free, too. I know you said language-agnostic, and this is a C++ book, but the sections on OOP are very good. There's a Thinking In Java if I recall correctly.

link|offensive?
add comment
vote up 2 vote down

Michael Nygard, Deploy It!

This is the only book I have encountered that talks about protecting real world software systems through the use of good software design choices. Software will tear itself open and spill acidic blood all over everything nearby. The sooner you accept this and strive to protect yourself the better.

link|offensive?
add comment
vote up 2 vote down

Robert M. Pirsig, Zen and the Art of Motorcycle Maintenance

Books like Code Complete, Mythical Man Month, Pragmattic Programmer, and UML Distilled are great for practical advice, observations, and reference.

In software development and engineering, our end goal is often bringing a quality product into being. As you pick apart what those qualities are and try to define them, defining good and bad can become an intractable problem.

When I was looking for a way to stretch my framing of the development process, I found this book to be an insightful exploration of concept of quality. The philosophical nature of this book was a nice departure from the typical development-oriented texts on my shelf.

link|offensive?
add comment
vote up 2 vote down

The following books are must-reads, in my opinion:

These are must-reads for several reasons. First, they introduce you to all aspects of software development, many of which are skipped or glossed over in formal education. Second, every book above provides helpful, practical knowledge and advice sourced from industry practice in the field. It's not hype, it's not theory, it's wisdom taken from people who have discovered how to develop software well. I would go so far as to say that the above 5 books contain more useful knowledge for software engineering than is typically acquired through completion of a Computer Science bachelor's degree program at an accredited western college or University.

Third, these books provide the intellectual models and nomenclature to talk and think about software development. It's difficult to stress how important this is. For example, if you don't know about the "extract method" refactoring, or if you don't know about the prototype design pattern, or if you don't know about mini-milestones you will be at a loss not only in that your work will be of poorer quality because you lack those tools but also in that you will lack the ability to communicate in those terms with other developers. Missing out on understanding these things would be like a mechanic not understanding how a distributor cap worked or not knowing how to use lava soap. Certainly they could still get work done (you can get a surprisingly large amount of work done with half an ass) but they would be at an extreme disadvantage to those that knew such things.

--

As an addendum, from left field I'll toss in this item:

The Medical Detectives

This is actually a worthwhile read for software developers. It provides many real-world stories of technical investigations and problem solving. Every software developer spends a fair amount of time tracking down the source of bugs, this book provides an insight into how that's done in the medical field. The lessons you take away are just as applicable to software development (e.g. false-leads in bug investigations, the problem of treating symptoms instead of underlying causes, when you know you've actually fixed something for sure, etc.).

link|offensive?
add comment
vote up 2 vote down

I see many good books listed here, so I'll try to recall a few that weren't mentioned already:

  • Extreme Programming Explained
  • The Mythical Man-Month
  • Programming Pearls
  • Peopleware
  • Ship It!
  • Practices of an Agile Developer

Happy reading!

link|offensive?
add comment
vote up 2 vote down

One that surely needs adding to the library of any self-respecting C, C++, C# or Java programmer is Kernighan and Pike's The Practice of Programming.

From two of the most influential programmers of the last 30 years the book is packed with gems of advice for people who simply want to write good programs (in almost any language).

link|offensive?
add comment
vote up 1 vote down

I think The C Programming Language (http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)) is widely considered a great book.

And, if I can blow my own horn, the Foundations of Programming free ebook (http://tinyurl.com/5jaae2)

link|offensive?
add comment
vote up 1 vote down

@Jim Daniel said:
The first book I would recommend would be Code Complete

I would second that, really good practical advice, and generally language agnostic.

link|offensive?
add comment
vote up 1 vote down

"Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams" by Steve Maguire.

No-non-sense, down-to-earth, entertaining, profound.

link|offensive?
add comment
vote up 1 vote down

Microserfs - Douglas Coupland

Nothing at all to do with software development and everything to do with software development at the same time :)

link|offensive?
add comment
vote up 1 vote down

My one new contribution:

Michael C. Feathers: Working Effectively with Legacy Code. I've come to the conclusion that we should all learn to love working with legacy code and try to be as good with it as possible, seeing as that's what we'll be doing 90% of the time at work anyway. :)

Also, yay for PragProg, Code Complete and Refactoring.

link|offensive?
add comment
vote up 1 vote down

Another one of Martin Fowler's great works is "Patterns of Enterprise Application Architecture".

link|offensive?
add comment
vote up 1 vote down

because i tend to like indepth tomes and good reading, i would go with Dr Timothy Lethbridge's Object-Oriented Software Engineering: Practical Software Development using UML and Java for grounding, Theory and Practice of Relational Databases by Stefan Stanczyk, Bob Champion, and Richard Leyton for introduction to databases and then The Mythical Man-Month: Essays on Software Engineering by fred brooks for software projects.

the timothy lethbridge book has got lecture videos as well for those who enjoy a good movie

oh yes ofcourse dont forget codinghorror.com by jeff atwood. however the true value of this site is only seen if you start reading from the very begining of the posts in the archives

link|offensive?
add comment
vote up 1 vote down

Practical Guide to Structured Systems Design by Meilir Page-Jones

I thought it was a good introduction to program design. It has a really good explanation of coupling & cohesion, principles which are still applicable today.

I read this book about a year after graduating college and wondered why it wasn't used in any of my courses.

link|offensive?
add comment
vote up 1 vote down

I recommend the O'reilly in a nutshell series.

link|offensive?
add comment
vote up 0 vote down

I second Code Complete by Steve McConnell all the way.

Excellent book that will start from the simple AND/OR gate implemented with relays (NOT transistors mind you) and work up from there.

You'll get all the internals right by starting with the book. Which will then help you further along once you start doing C/C++ and/or data structure classes.

I really think this is an absolute must for any beginner, but that's just me :-)

link|offensive?
add comment
vote up 0 vote down

Lean Software Development: An Agile Toolkit

I love this book because it lays out a simple approach for developing high quality software fast and cheap - regardless of the language or environment you work in. Delivering value and eliminating waste are some of the core messages in this book. Ideas like these have greatly increased my (and my team's) productivity.

link|offensive?
add comment
vote up 0 vote down

The Pragmatic programmer and Joel on Sotware will be 2 eye openers for any begginer programmer. In my company we are giving one copy of each for every new junior hire.

link|offensive?
add comment
vote up 0 vote down

Domain Driven Design by Eric Evans changed the way I design and write software.

link|offensive?
add comment
vote up 0 vote down

HTML, XHTML and CSS: A Visual Quickstart Guide

for sure.

link|offensive?
add comment

Your Answer:


hide preview
Get an OpenID.
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.