百度首页 | 
百度搜藏
快照
(百度和http://www.turnofthecrank.com/2006/12/01/the-5-books-that-every-programmer-should-read/的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)

Turn of the Crank » The 5 Books that Every Programmer Should Read

The 5 Books that Every Programmer Should Read

December 1st, 2006

Over the years I have read many programming related books, and there are a few that really should be required reading for anyone who develops software. All of these books are language-neutral and cover ideas that pertain to any kind of programming. These are the cream of the crop. I would not trust a developer who has not read at least half of these book.

Code Complete

by Steve McConnell
Some will say that the majority of the knowledge in this book is common sense, which reminds me of the quote, “Common sense is instinct. Enough of it is genius.” by George Bernard Shaw. It covers just about every aspect of programming. McConnell is a great writer. Although the book is large, it’s easy to read and understand.

The Pragmatic Programmer: From Journeyman to Master

by Andrew Hunt, David Thomas
I really can’t decide if I like The Pragmatic Programmer or Code Complete better. They are both similar books in that they cover a lot of general programming practices. Andy and Dave have a very down to earth writing style. The book, like Code Complete, is very easy to read. This book is fully of practical advise, that for some reason just does not seem to get taught in computer science courses. If every computer science graduate was required to read this book before graduating, I think the world would be a better place.

Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development

by Craig Larman
Don’t be mistaken by the title of this book. This is THE book for learning object-oriented analysis and design. Larman goes through each step of the process, taking an application from concept to completion. It covers requirements gathering, creating use cases, agile development, iterative development cycles, testing, and of course UML. The code examples are in Java, but you don’t really need to know Java to understand what is going on.

Design Patterns: Elements of Reusable Object-Oriented Software

by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
If you’re a programmer I’m sure you’ve heard of this book. It’s one of the most famous software engineering books ever written. This book is a tough read. The examples are in C++, which might be why I had such a difficult time with it. It’s well worth it though. Recognizing and using software patterns is an important part of being a good programmer.

Refactoring: Improving the Design of Existing Code

by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
If you’re a professional coder, more than likely you’re going to spend a large part of your time fixing/modifying code that someone else wrote. It’s the nature of the beast. This book is a catalog of common problems in code, and the best way of Refactoring them. Reading this book will greatly increase your ability to detect bad code and fix it.

Any books I missed?

Entry Filed under: Programming, books

44 Comments Add your own

  • 1. Reg Braithwaite  |  December 1st, 2006 at 5:10 pm

    The first seven books I would buy if my shelves were bare

    These are very different lists. I included books that I have read and re-read many times over the years.

    I do like most of the book sin your list, although I have come to dislike “Design Patterns,” partly because of the awful misuse of the principles in the book (which is certainly not the authors’ fault) and partly because most of teh patterns simply go away when you switch to languages with more flexible constructs.

    Otherwise, thumbs up, thanks!

  • 2. Kristian Dupont  |  December 1st, 2006 at 6:44 pm

    Yes, you missed The Mythical Man Month. I would also say that you should read something that covers basic cs areas such as algorithms and language theory.

  • 3. Jonathan Allen  |  December 1st, 2006 at 6:53 pm

    I love Code Complete, and the first few chapters of The Pragmatic Programmer (I’m still working through it).

    I don’t like Applying UML and Patterns becuase, like most OO-Design books, it claims that the object model is the most important thing and doesn’t spend any time on UI or Database design.

    UI is hard to get right, and users don’t like you changing it after the fact. Databases are very hard to change once multiple applications are using it.

    The object model, which is entirely hidden from both the user and other applications, is very easy to change. That makes it the lowest risk factor, and thus the one you should spend the least amount of time on.

    I find the explainations in Design Patterns to be poor, the examples to be downright silly, and there isn’t enough time spent on when not to use a specific pattern. I would only read it for its historical value.

    I have not read Refactoring, but I have heard good things about it.

  • 4. Kurt Christensen  |  December 1st, 2006 at 7:23 pm

    I enjoyed all of these books, and I think they’re all important, but I would place every one of them below Structure and Interpretation of Computer Programs.

  • 5. matt knox  |  December 1st, 2006 at 7:53 pm

    SICP (Structure and Implementation of Computer Programs)

    This starts with an assumption that the reader is very bright but knows nothing, and works up to designing an object system, a compiler, and several other serious systems. It’s tremendously influential, very well-written, and hands-down the best book to start programming with.

    I would cut the UML and design patterns book, and would instead go straight to the source, and have coders read “A Pattern Language” by Alexander.

  • 6. mink  |  December 1st, 2006 at 8:01 pm

    SICP!!!!

  • 7. jack  |  December 1st, 2006 at 8:25 pm

    I recently found a very interesting website:
    http://alreadylinked.com/
    There you can purchase ad space for your Blog etc.

  • 8. Ian Hall  |  December 1st, 2006 at 8:31 pm

    Software Crafstmanship by Pete McBreen - similar in theme to The Pragmatic Programmer, but I prefer its treatment of that theme

  • 9. Damien  |  December 1st, 2006 at 8:51 pm

    About Design Patterns… wasn’t it written in Smalltalk, and not C++?

  • 10. Tony Morris  |  December 1st, 2006 at 11:54 pm

    Sorry, but I have read 4 of those 5 and all of those none now exist on my bookshelf - in the trash.

    How about one of Pierce’s writings?
    * Basic Category Theory for the Computer Scientist
    * Types and Programming Languages

    It is sad that most books portray hyperbole in contrast to the fundamentals of computer programming (that *is* your criteria right?) - call me a cynic if you will.

  • 11. Alan Stevens  |  December 2nd, 2006 at 2:07 am

    Peopleware! Successful software of any size requires an understanding of what is unique about the practice of developing software.

    I would drop Applying UML and Patterns. I purchased the book based on similar recommendations and found the book misguided. It is academic and divorced from reality. It was ironic to me that it used a POS system for it’s sample application, and I was maintaining a POS system while reading it.

    UML has never served a useful purpose for me in my software development career. Most object models are documented on a dry erase board, but not in UML.

    ++Alan

  • 12. Bob Dionne  |  December 2nd, 2006 at 3:52 am

    Knuth

  • 13. James Thiele  |  December 2nd, 2006 at 4:00 am

    The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition
    by Frederick P. Brooks

  • 14. vanya  |  December 2nd, 2006 at 6:27 am

    I’m a big fan of Randall Hyde’s series-Write Great Code 1 & 2.

  • 15. Kim Holburn  |  December 2nd, 2006 at 8:24 am

    Perl Best Practises, O’Reilly

    It’s not just useful for Perl but almost all structured programming languages.

  • 16. Jeroen Bulters  |  December 2nd, 2006 at 8:43 am

    I’d also drop the UML and design patterns book and drop in some Algorithm book (standard uni textbook stuff). Any good advices on UI design books?

  • 17. Hyped  |  December 2nd, 2006 at 8:53 am

    There are different types of programmers, and the list you gave does NOT apply to all of them. You should really have qualified the term “programmer” in your article.

  • 18. xiaodouban  |  December 2nd, 2006 at 8:57 am

    very good! i am a chinese bog ,i like your web!

  • 19. Tim  |  December 2nd, 2006 at 9:01 am

    The first two (Code Complete and Pragmatic Pogrammer) are good.

    Number 3 (UML and Patterns) is boring and would probably make a good door-stop. The only useful insight I got from the book is that the terms “agile” and “iterative” encompass the entire development process, not just coding.

    I’ve glanced at Design Patterns by Gamma, et al and wasn’t particularly impressed, and even the more popular “Head First Design Patterns” is a bit over-hyped, and not of as much value for say, a C# programmer as it would be for a Java programmer.

    “Refactoring” is also a good book, but with good software support, a lot of the lower-level refactorings become trivial. Apart from the first couple of chapters, a lot of the stuff that most programmers would need is covered in Code Complete’s chapter on refactoring.

    So I’d say the first two books listed are good, the others would probably give one geek cred, but apart from that are just going to be expensive coffee table books.

  • 20. Yukuan  |  December 2nd, 2006 at 9:10 am

    Cool!
    Of these boos, I have read three :)

  • 21. Bruce F. Webster  |  December 2nd, 2006 at 9:53 am

    Good start to the list; here are some others:
    – The Mythical Man-Month (Fred Brooks)
    – The Psychology of Computer Programming (Gerry Weinberg)
    – The Art of Systems Architecting (Meier & Rechtin)
    – Facts and Fallacies of Software Engineering (Robert Glass)
    – Waltzing with Bears (DeMarco & Lister)
    – Death March (Ed Yourdon)
    – Journey of the Software Professional (Luke Hohmann)
    – 201 Principals of Software Development (Alan Davis)
    – Principals of Software Engineering Management (Tom Gilb)
    – Agile Software Development (Robert Martin)
    – Software Engineering (Roger Pressman)

    That said, I applaud your list and the attention it’s getting. Most of what I do professionally is (a) consult with large organizations that have troubled IT projects and (b) act as an expert witness in lawsuits that involve troubled/failed IT projects. The core problems have all been well documented for 30+ years (cf. Brooks, Weinberg); it’s just that nobody ever reads these books. ..bruce..

  • 22. ajdub  |  December 2nd, 2006 at 10:04 am

    I refer to Death March all the time. Its a classic. Joel Spolksky’s ‘The Best Software Writing’ is a good read.

  • 23. Balakumar Muthu  |  December 2nd, 2006 at 10:40 am

    Pragmatic Programmer, is my all time favourite !!

  • 24. Piotr Gajewski  |  December 2nd, 2006 at 10:49 am

    The Deadline: A Novel About Project Management by TOM DeMARCO

  • 25. Neil  |  December 2nd, 2006 at 11:23 am

    I like Code Complete. It is a perfect book

  • 26. Peter N Lewis  |  December 2nd, 2006 at 11:42 am

    You are missing “Writing Solid Code” by Steve Maguire. Highly recommended (despite the “Microsoft” in the full title). It covers how to avoid writing buggy code and how to learn from your buygs much better than any other book I’ve seen, including Code Complete.

  • 27. nihil  |  December 2nd, 2006 at 11:53 am

    Everyone Stating that the Design Pattern book is not a must-read is just a hobbyist programmer.
    Every good IT student and every IT professor knows how important design patterns are when you get to work upon large codebases with a team.

  • 28. GG  |  December 2nd, 2006 at 12:10 pm

    I guess you meant the programmer that works with OOP.
    I general, I would disagree. I wopuld look for more foundational books.

    - Structure And Interpretation of Computer Programs (Abelson and Sussman)

    - Concepts, Techniques and Models of Computer Programs (Van Roy and Haridi)

    - The Art of Computer Programming (Knuth)

    - Essentials of programming languages (Friedman Wand Haynes)

    That’s more than 5 already.

  • 29. Troy Hiltbrand  |  December 2nd, 2006 at 1:06 pm

    I love Steve McConnel and would add Rapid Development by him in addition to Code Complete.

  • 30. Chris Meisenzahl  |  December 2nd, 2006 at 1:22 pm

    I would add Programming Pearls to that list.

  • 31. Anthony Ettinger  |  December 2nd, 2006 at 1:27 pm

    Interesting, I’ve heard about the 2nd one “Pragmattic” - guess I should pick it up now.

    Two books I found very good were Design Patterns in PHP (Apress), and Object Oriented Design with UML (Apresss).

  • 32. Steve  |  December 2nd, 2006 at 1:29 pm

    Connell’s Rapid Development is another must read. And going back even further, Kidder’s Soul of the New Machine is a true classic.

  • 33. Steve Hunt  |  December 2nd, 2006 at 3:17 pm

    You can find some of those books mention for free here

    http://kickjava.com/books

  • 34. Mike  |  December 2nd, 2006 at 3:19 pm

    Structure and Interpretation of Computer Programs, Knuth (AoCP), Mythical Man Month and the Soul of a New Machine.

  • 35. Jiju brapong  |  December 2nd, 2006 at 3:28 pm

    You might want to check out free computer books on this site

    http://2020ok.com/5.htm

  • 36. Free eBooks  |  December 2nd, 2006 at 3:36 pm

    Thanks great write up, I have read those books, and I had to agree with you.

  • 37. Lorenzo  |  December 2nd, 2006 at 4:09 pm

    Your list shows some good stuff for contemporary technology. It may surprise many that a lot of good information is available in older works. Also, some of my favorites are on topics that transcend any particular language or tool. Here’s my list of all time favorites.

    Gause, Weinberg, “Exploring Requirements: Quality Before Design”, Dorset House 1989)

    Freedman, Weinberg, “Handbook of Walkthroughs, Inspections, and Technical Reviews”, 3rd Edition, Dorset House (1990)

    DeMarco, Lister, “Peopleware, Productive Projects and Teams”,
    Dorset House (1987)

    Brooks, “The Mythical Man Month”, 2ed, Addison-Wesley

    Petroski, “To Engineer is Human, The Role of Failure in Successful Design”, St. Martin’s Press (1985)

    Weinberg, “The Psychology of Computer Programming”,
    Van Nostrand (1971)

    Weinberg, “Quality Software Management: Vol. 1, Systems Thinking”, Dorset House (1992)

    Weinberg, “Quality Software Management: Vol. 2, First Order Measurement”, Dorset House (1993?)

    Weinberg, “Quality Software Management: Vol. 3, Congruent Action”, Dorset House (1993?)

    Humphries, “Managing the Software Process”, Addison Wesley (1989)

    Humphries, “A Discipline for Software Engineering”, Addison Wesley (1995)

    Hetzel, “The Complete Guide to Software Testing”, Wiley (1988)

  • 38. Jacob  |  December 2nd, 2006 at 4:17 pm

    I would recommend Robert C. Martins Agile Software Development, Principles, Patterns, and Practices - it’s a broad introduction to agility, testing, refactoring and patterns. Great introduction for people wanting to get started with OOP or agile thinking.

  • 39. Oliver  |  December 2nd, 2006 at 5:25 pm

    I’ve recently been reading an interesting book titled “Understanding Algorithms and Data Structures” by David Brunskill and John Turner. It’s very interesting, has examples in pseudocode. C and ada.
    It’s a very good book. :-)

    Oh, and for those who like C++ and aren’t beginners “The C++ Programming Language, Special Edition” by Bjarne Stroustrup is very detailed and informative. :-D

  • 40. cayle_clark  |  December 2nd, 2006 at 5:49 pm

    I’ll second Jon Bentley’s Programming Pearls. The first edition taught me so much about how to think about programming. I don’t know if it was Bentley who coined the motto “First make it right, then make it fast” — but it was from his book I learned it. The 2nd edition, which I’ve not read, should be even better.

  • 41. progrock  |  December 2nd, 2006 at 6:19 pm

    Some great recommendations here IMHO. I’d like to reiterate the _Rapid Development_ recommendations, and I’d add _Patterns of Enterprise Application Architecture_ also by Fowler for a “light read”.

  • 42. Austoon Daily » The&hellip  |  December 2nd, 2006 at 6:57 pm

    […] The 5 Books that Every Programmer Should Read […]

  • 43. The 5 Books that Every Pr&hellip  |  December 2nd, 2006 at 8:23 pm

    […] read more | digg story […]

  • 44. Eric  |  December 2nd, 2006 at 8:32 pm

    I would add Programming Perls by John Bently

Leave a Comment

Required

Required, hidden

Some HTML allowed:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Most Recent Posts

Last.fm