57

One per answer please. I'll add my favourite as an answer.

Tamara Wijsman
  • 8,259
  • 14
  • 58
  • 94
Paddyslacker
  • 11,070
  • 5
  • 55
  • 65

26 Answers26

69

Code Complete 2nd Ed.

Code Complete by Steve McConnell. I don't even think it needs explanation. It's the definitive book on software construction. Incredibly well written and covers all aspects of the practical (programming) side of creating software.

EpsilonVector
  • 10,763
  • 10
  • 56
  • 103
  • +1 for picking the second edition too - so many improvements over the first that its a different book. – Paddyslacker Sep 04 '10 at 16:09
  • +1 -- I have the Italian translation. After that, I never bought another programming or technical book translated in my language, as the translation was terrible. I had to buy the English edition to actually understand some sentences! – Wizard79 Sep 04 '10 at 18:16
  • For those who are living in **Quebec, Canada**. The BAnQ has the complete version of this book available online at this location : http://library.books24x7.com.res.banq.qc.ca/toc.asp?bookid=10482. – HoLyVieR Sep 13 '10 at 02:36
  • That's the one - discussion over. – Alan Sep 23 '10 at 02:35
  • 4
    I can't agree. It's interesting that the word **immutable** not even exist in this book. – Jonas Dec 16 '10 at 22:44
  • 2
    Though I keep my copy of the first edition, I think I have never come back to it. The reason may be that went on to get books on each of the topics McConnell says are important. – Apalala Mar 20 '11 at 20:45
56

Easy.

Pragmatic Programmer

Stoosh
  • 315
  • 2
  • 6
  • 6
    +1 for being realistic. This book is relevant, easy to read, and probably the book many developers can actually benefit from actually reading. Too many others on this list are difficult and I doubt have been read cover to cover. – spong Sep 12 '10 at 13:56
  • This answer is repeated. – clrod Sep 15 '10 at 00:30
  • +1 - my second favorite programming book behind Code Complete (and honestly, sometimes, it's first) – Alan Sep 23 '10 at 03:12
36

The Structure and Interpretation of Computer Programs, aka SICP

When I saw that SICP was not listed yet, I grimaced in pain. :)

Why: There's nothing more to add to Norvig's praising this book as the greatest introduction to computer science ever written. Well OK, since the Why? was requested: SICP covers the fundamentals of software in a satisfyingly deep way, raising many perspectives and questions about the nature of computation — quite a few of which remain open issues — while leading the reader to see beyond the superficial aspects of telling the machine what to do, or how to do it.

alt text http://ecx.images-amazon.com/images/I/41CPGEDXMDL._SL500_AA300_.jpg

Click the image to get to the free text online. You can also readily find the video lectures by the authors, complete with '80s style color and clothing no less.

limist
  • 4,636
  • 25
  • 22
  • 2
    All hail the SICP. IMO, it should be the textbook for a mandatory introductory programming course in all CS schools. It would certainly weed out people who can't really cut it in programming (much less CS) while strengthening CS and programming skills to those with potential. – luis.espinal Oct 18 '10 at 16:06
  • 1
    @luis.espinal SICP seems overkill for introductory programming (unless we are talking graduate school). There is a reason MIT dropped the SICP course as its intro course.... Still I agree it is valuable to go through this book (and do the exercises...) but doing that in a standard college semester would be tough for even an above average student. Also intro with Java/Python/Ruby/C is more relevant to the work force, the sooner you get someone used to imperative languages the better... SICP is great after that to expand your horizons. But might be discouraging as an intro course... – Cervo Oct 03 '11 at 17:44
  • 1
    @Cervo - It's a valid concern, and it does seem like an overkill, but (and this is a completely subjective position I acknowledge), I strongly believe it provides a deeper foundation than one typically finds with other *mainstream* approaches. The jury is still out with MIT now that they have switched to Python (some of the reasons being that it also has FP capabilities and it's strongly amenable for scientific computing and robotics, which Scheme isn't.) Nothing wrong with Python (I actually love the language), but the jury would be out till a Python'esque version of SICP comes out. – luis.espinal Oct 03 '11 at 20:37
  • 2
    @con't - That is, I suggest the SICP not because of Scheme, but because of its pedagogical content. I would actually had suggested to start with assembly (people did that quite successfully), but there are no assembly books (and probably there will never be) like the SICP. The closest would be Knuth's encyclopedia (and that would be an overkill.) As for **java**, I've worked with it for 12 years, and I wouldn't recommend it for teaching.. gets the job done, but it is horrendous as a PL. C, Python or Ruby are much better designed languages. – luis.espinal Oct 03 '11 at 20:40
  • 1
    @con't - also, I'd warn against using a language as a pedagogical tool because it is mainstream. Mainstream changes every 2-3 years, and with Java, the language is simple, but the task is in learning the JVM, the libraries and the architecture. I'd say to learn Java and .NET enterprise development at the 4th year of college. And I believe (I know, **subjective**) that is important to provide rigor early on. We have waaaay too many point-n-click programmers out there who needed some rigor early on. I've made a lot of money cleaning the crap they left behind, but still ;) – luis.espinal Oct 03 '11 at 20:46
32

Worth mentioning:

The Mythical Man-Month

alt text

spong
  • 9,361
  • 6
  • 44
  • 58
  • 1
    If I could only ever read one book about programming, and After I'm done reading it it goes away And I never see another book for the rest of time, this would be it. If I got to keep the book on my shelf to look at later... It might be another, more reference oriented volume. +1 anyway! – SingleNegationElimination Aug 03 '11 at 17:26
  • I enjoyed this book and read it all the way through. However a lot of the material applies only to very large-scale projects with hundreds or even thousands or people working on it like an OS; as this is what he draws his experience from. I thought Code Complete was much more helpful in terms of knowledge that I could use everyday and that applied to me. – Despertar Jun 18 '13 at 08:11
30

Introduction to Algorithms

Jonas
  • 14,867
  • 9
  • 69
  • 102
  • We had the fourth edition but this is a great book on algorithms! – Chris Sep 04 '10 at 19:06
  • @Chris: I don't think there is a fourth edition. The third edition is from September 2009, so it's new. – Jonas Sep 05 '10 at 17:07
  • Errr, second edition with the green cover. – Chris Sep 06 '10 at 14:04
  • This is the required textbook for my class this term. I'm heartened that it's on the list here, and that it's so highly rated on the original SO question! – Pops Sep 24 '10 at 03:59
28

Robert C. Martin's Clean Code

Robert C. Martin's "Clean Code"

Languages, frameworks, methodologies come and go, but many ideas in this book are, I suspect, forever.

azheglov
  • 7,177
  • 1
  • 27
  • 49
28

Design Patterns: Elements of Reusable Object-Oriented Software

This is the book to read on OOP design and architecture. The patterns are good when used properly, but I think the real value of this book is that it gives you a toolbox of ideas to use when designing.

alt text

Fishtoaster
  • 25,909
  • 15
  • 111
  • 154
25

Refactoring: Improving the Design of Existing Code

alt text

Daniel
  • 1,150
  • 2
  • 10
  • 20
25

I just counted my books today. 23 of 'em. It depends on what I'm working on. I guess the timeless answer is "C language", By Kernighan and Ritchie.

enter image description here

Martin Beckett
  • 15,776
  • 3
  • 42
  • 69
Moshe
  • 5,022
  • 2
  • 30
  • 49
  • 3
    One of the best language teaching books in the history of computing. A good example of how a programming book should be written. – Wizard79 Sep 05 '10 at 08:02
  • 1
    And worth having on the shelf, it's quicker to find the printf format codes in the book than in MSDN's help docs – Martin Beckett Jul 06 '11 at 15:56
19

Working Effectively with Legacy Code by Michael Feathers.

It contains many good tips of how to get an existing code base under test and manageable, most of which I didn't know about until I read this book. A must read, even if the legacy code you are working with is your own code that you wrote yesterday.

Working Effectively with Legacy Code

Paddyslacker
  • 11,070
  • 5
  • 55
  • 65
18

The Art of Computer Programming by Donald Knuth

alt text

Wizard79
  • 7,327
  • 2
  • 41
  • 76
  • 1
    I'm not sure this qualifies as "1 book" (unless you really mean "just Volume 1") – Inaimathi Dec 16 '10 at 16:23
  • I have his whole series, but I'd settle for Volume 1. (My first computer science class was taught from this in 1967. It has been priceless). "Know thy datastructures". – Ira Baxter Jun 23 '11 at 13:17
15

The must-have Java books:

Effective Java By Josh Bloch

alt text

Java Concurrency in Practice By Brian Goetz, et. al.

alt text

Java Puzzlers By Josh Bloch, Neal Gafter

alt text

Jeremy
  • 4,791
  • 1
  • 25
  • 40
11

Coders at work by Peter Seibel

alt text

Interesting and inspiring, highly recommended.

systempuntoout
  • 3,545
  • 3
  • 29
  • 33
9

Gödel, Escher, Bach.

alt text!

miku
  • 1,508
  • 4
  • 18
  • 26
  • 1
    Ha! This was my choice in the list of non-programming related books! I guess this makes it unclassifiable? – Paddyslacker Sep 17 '10 at 16:27
  • I really liked this book, it was highly recommended by my Theory of Computing prof at UW Madison - very much helped when trying to understand what the heck he was talking about. – Peter Turner Oct 02 '10 at 14:53
  • @Paddyslacker, GEB actually spends quite a bit of time talking about computability and various computer science concepts. –  Jul 06 '11 at 12:29
5

The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt and David Thomas)

Maniero
  • 10,826
  • 14
  • 80
  • 133
4

Getting Things Done (David Allen) teaches you how to deal with the thousands of small tasks you need to accomplish in your day-to-day job as a software developer. Although it is not specifically geared towards developers, it is definitely an invaluable aid, as software development typically involves a very large number of small tasks that need to be done in a prioritized fashion. For example: which new features to implement, which bugs to fix, which parts of the code to refactor, which parts of the code to rest or retest, etc...

Dimitri C.
  • 1,336
  • 13
  • 17
3

The C++ Programming Language by Bjarne Stroustrup

alt text

Prasoon Saurav
  • 1,018
  • 11
  • 14
  • +1: Only because of how dry and detailed it is. I have never since felt like I've known so much about a language after having completed a book about it. – mummey Jan 23 '11 at 01:17
3

Windows via C/C++, Jeffrey Richter

alt text

Benjamin
  • 101
  • 6
2

Bruce F. Webster's "Pitfalls of Object Oriented Development"

We got too many "OO" developers who still don't know what an object or a class is or what is for; don't know what good OO, procedural, modular and structured programming look like; and somehow manage to cobble badly made pseudo-procedural code together with classes.

This book (plus a few 70's oldies on structured design) would go a long way in helping these poor souls finally get to understand what good object orientation should look like.


Furthermore, chances are that if I were forced to pick one book and one book only beside this one, I would not pick a technology-specific book.

luis.espinal
  • 2,560
  • 1
  • 20
  • 17
2

The Zen of Code Optimization by Michael Abrash

The Zen of Code Optimization

A must-read for realtime programmers - even if the processor specific infomation is dated, the mindset is invaluable.

AShelly
  • 5,793
  • 31
  • 51
2

Does an iPad count? I would like to say my #1 on my bookshelf would be a web browser and ability to search. Online API and references are the best place and it would depend on my current project set.

Chris
  • 5,663
  • 3
  • 28
  • 39
  • 2
    No it doesn't. See the comment about a Kindle above. That said, I love the iPad anyways. It can be a valuable resource, but it's still not a real book. +1, I'm in a fanboy mood. :) – Moshe Sep 05 '10 at 04:16
2

Design Patterns in Ruby: alt text

ennuikiller
  • 1,168
  • 7
  • 8
1

alt text

It's one of the few programming books that I've kept from when I first started programming. I used to lend this out a lot to people who were first starting out. Now, not so much, since C isn't very many people's first programming language anymore. It does a wonderful job of describing what is happening behind the scenes and its descriptions about pointers brings real clarity to what is otherwise a very confusing topic for many.

Rich Schuler
  • 101
  • 3
1

Object Design: Roles, Responsability and Collaborations

alt text

This is by far my favorite programming book (even if it is not language dependent). In my humble opinion is the book that better presents the case on how to design objects that relate to their cousins/brothers/neighboors. A must have in any serious programmer bookshelf.

Red Knight
  • 101
  • 2
1

Jon skeet's "c# in Depth"

alt text

ACP
  • 1,035
  • 1
  • 10
  • 16
  • 1
    I actually didn't like Jon's book. The information was good, but there was so much "oh, this is important 10 chapters from now" in the book such that it felt very poorly laid out. – Steven Evers Oct 08 '10 at 00:30
  • 2
    Be aware there is a second edition, which is an update from the first and also covers C# 4. – Grant Palin Dec 16 '10 at 18:08
0

One of my most liked books;

Object Oriented Thought Process by Matt Weisfeld

Mudassir
  • 506
  • 6
  • 15