Reload Original PagePrint PageEmail Page

resources - What is the single most influential book every programmer should read?

alt text

Personally, Structure and Interpretation of Computer Programs is by far the most influential programming book I have ever read.

Some classics like Code Complete, Refactoring and Design Patterns teach you the effective working habits and the painstaking details of the trade. Others, like Peopleware, Psychology of Computer Programming and The Mythical Man-Month delve into the psychosocial aspects of software development. Numerous others deal with algorithms. These books all have their place.

SICP, however, is in a different league. It is a book that will enlighten you. It will evoke in you a passion for writing beautiful programs. Moreover, it will teach you to recognize and appreciate that very beauty. It will leave you with a state of awe and an unquenchable thirst to learn more. Other books may make you a better programmer; this book will make you a programmer.

And in the meanwhile, you will learn a thing or two about functional programming (side effects won't be introduced until chapter three), lazy evaluation, metaprogramming (well, metalinguistic abstraction), virtual machines, interpreters, and compilers.

Some think that SICP is not a beginner's book. Personally, I probably wouldn't have appreciated the book in full without having some programming experience under my belt, but I would definitely recommend it for a beginner. The book is, after all, written for the famous 6.001, the introductory programming course at MIT. It may require an intellectual effort (especially if you do the exercises - and you should), but the reward is well worth the price.

Not convinced? Read the Foreword or the Preface to the First Edition. The full text is freely available on the web.

It's available online for free, and there are even video lectures to go along with it.


"No Bugs!" by David Thielen (1992) (my Google search didn't seem to find this in this thread already)

I read this book so long ago, but I remember it fondly. This book was my first introduction into basic principles and strategies for coding to expose bugs in your code. It introduced me into a lot of ideas like incorporating conditionally-compiled debug code into production code, assertions, fail fast, "BUGBUG", enter/exit logging, etc.

It really opened my eyes that coding and testing/quality-assurance weren't necessarily distinct activities. A code product wasn't simple like a ceramic cup - something you created over here and then tested and examined externally for defects over there. Most code is more complex - should work more like a today's cars that incorporate their "check-engine" OBD-II chips, making the cars continuously self-monitoring from the inside and immediately notify the driver when there's condition out of whack long before the damaging ramifications of the condition become apparent.

Parts of the book are of course way out-of-date. But despite its age, I still think its a good book for getting into a good mindset for programming, although it may be redundant with some of today's books like Code Complete.

No Bugs! Cover


"The World is Flat" by Thomas Friedman.

Excellence in programming demands an investment of mental energy and a dedication to continued learning comparable to the professions of medicine or law. It pays a fraction of what those professions pay, much less the wages paid to the mathematically savvy who head into the finance sector. And wages for constructing code are eroding because it's a profession that is relatively easy for the intelligent and self-disciplined in most economies to enter.

Programming has already eroded to the point of paying less than, say, plumbing. Plumbing can't be "offshored." You don't need to pay $2395 to attend the Professional Plumber's Conference every other year for the privilege of receiving an entirely new set of plumbing technologies that will take you a year to learn.

If you live in North America or Europe, are young, and are smart, programming is not a rational career choice. Businesses that involve programming, absolutely. Study business, know enough about programming to refine your BS detector: brilliant. But dedicating the lion's share of your mental energy to the mastery of libraries, data structures, and algorithms? That only makes sense if programming is something more to you than an economic choice.

If you love programming and for that reason intend to make it your career, then it behooves you to develop a cold-eyed understanding of the forces that are, and will continue, to make it a harder and harder profession in which to make a living. "The World is Flat" won't teach you what to name your variables, but it will immerse you for 6 or 8 hours in economic realities that have already arrived. If you can read it, and not get scared, then go out and buy "Code Complete."


Apart from all the great books already recommended, there is one more book I would like to recommend.

This may be relatively unknown, however I use it every so often.

The book teaches computer architecture and how C code gets compiled to assembly code. It has great sections about the program stack, talks about low level operating system constructs and about various parts of the architecture from a programmer's perspective.

It has a great section on memory allocation and garbage collection. It also discusses network programming, profiling and much more.

One of my favorite books.

alt text


Books are great, on the free time, on vacation, but relevent, up to the minut "save the day" information is from blogs/forums and internet stuff.

I have to respond to this. Clearly for answers to specific questions and probelms, sites like this and the methods described above are obviously the best. For cutting-edge newest technology, the lead time for books obviously is going to leave you no choice but use the internet. And perhaps my age (46) is a bias here.

But one of the things that troubles me greatly has been the decline of Technical Publishing. A lot of tech writers are moving away for it because it doesn't "pay the bills' (Petzold for example) and as I mentioned - there is likely a generational thing (I'll just have to "get-over") I don't like doing extensive reading on a laptop screen...

But I think to truly get a "Deep Understanding" of a broad topic - the effort necessary to write a book allows the writer to focus his or her thoughts in a way that otherwise I don't belief lets the reader truly "Grok" a deep concept.

Yes if you want a "how-to" - a good web post might be more than sufficient. But if I REALLY need to understand something, I want a good book.

Furthermore, when I need to go back to something, I always know where that darn book is on my bookshelf. But how many times have you pulled your hair out trying to find that link you know you say several months ago?

Please everyone here - support tech writers (who derserve it) by BUYING the book!


Pro Spring is a superb introduction to the world of Inversion of Control and Dependency Injection. If you're not aware of these practices and their implications - the balance of topics and technical detail in Pro Spring is excellent. It builds a great case and consequent personal foundation.

Another book I'd suggest would be Robert Martin's Agile Software Development (ASD). Code smells, agile techniques, test driven dev, principles ... a well-written balance of many different programming facets.

More traditional classics would include the infamous GoF Design Patterns, Bertrand Meyer's Object Oriented Software Construction, Booch's Object Oriented Analysis and Design, Scott Meyer's "Effective C++'" series and a lesser known book I enjoyed by Gunderloy, Coder to Developer.

And while books are nice ... don't forget radio!

... let me add one more thing. If you haven't already discovered safari - take a look. It is more addictive than stack overflow :-) I've found that with my google type habits - I need the more expensive subscription so I can look at any book at any time - but I'd recommend the trial to anyone even remotely interested.

(ah yes, a little obj-C today, cocoa tomorrow, patterns? soa? what was that example in that cookbook? What did Steve say in the second edition? Should I buy this book? ... a subscription like this is great if you'd like some continuity and context to what you're googling ...)


As with others, yes, Code Complete, Bertrand Myers, and so on, are part of my SW dev foundation today. but way back the very first programming "book" was more of a booklet on the Intel 8008. Mail ordered from an ad in an electronics magazine. This had all the opcodes, programmer's model of the chip architecture, etc. No guidance on structuring code, commenting, compiling or linking, algorithms or any of that high level stuff! Now, in my career, i have a deep understanding of register-level programming, bits, pixels, interrupt handlers and all that, but am relatively an idiot at databases, networks, GUI apps, large business systems.

An interesting follow up question: has the way you started in programming been a benefit or hindrance to your career and an influence today, or was it so long ago it doesn't matter? What books helped you expand beyond your initial skills into broad new areas?


OK, so the question is not "what's the best programming book", but "if you could tell yourself what to read in the beginning of your career"...

Probably one of "On Lisp" and SICP, plus one of CLRS or "Algorithms: a creative approach" by Udi Manber.

The first two will teach lots of programming techniques, patterns, and really open up one's mind to his/her own creativity; the other two are different. They're more theoretical, but also very important, focusing on design of correct and efficient algorithms (and requiring substantially more math).

I see lots of people recommending the three first books when the subject of "good programming books" pops up, but the last one (by Manber) is a great book, and few people know it. It's a shame! Manber focuses on the incremental development of algorithms through theorem proving using induction.


Looks like we have the same taste in books. I have to admit that I really enjoyed some of the books listed above. Another book that I found outstanding this year due to its fresh and unique approach was 'is: The Phenomenon of the Facebook Status' by Patrick Hamilton Walsh. Did you read this one during the year? I think it will be huge in 2010. Its a book that... never mind it is Monday morning, so here is the review that sold it to me:

Patrick Hamilton Walsh shows remarkable ingenuity with this unique concept designed to offer an insight into life in today's world via the medium of social networking sites. 'Is' presents an insight into everyday life in the 21st century through the compilation of Facebook status updates, highlighting the joys and pressures of today's world with its 'warts and all' collection of laugh-out-loud, witty, poignant, crude and downright rude updates.

Each individual status update listed within 'is' allows the watching world to look into the updating person's soul as they share their thoughts and feelings of the day in a manner that has never before existed, giving a glance of what the person is made of, if not the image they are attempting to portray!

Taken as a whole, this compilation helps to unmask the population of Western society who, as individuals, are becoming more willing to share their thoughts with the world.

These individuals take full advantage of the opportunity afforded to them by the fact they can hide behind their computer screens and share thoughts they probably would never dare to on a face-to-face basis!

I got it for £5.49 on Amazon so its a bargain as well. Its also good for 'borrowing' good Facebook updates ;-)

Check it out and thank me later.

Good work people, I look forward to reading more of your stuff in 2010. Happy Christmas everyone.


My development odyssey began with the venerable Camel book, followed by Cay Horstmann's and Gary Cornell's excellent Core Java series. In retrospect this was a reasonable start, though far heavier on practice than principles and concepts.

As a few have said, most influential and most influential in the context of beginning a development career may be very different. I didn't appreciate many of the stellar recommendations here such as SICP, Code Complete, Mythical Man Month, the Pragmatic Programmer, and Peopleware until I'd had a few years and a few projects under my belt.

Andy Hunt and Dave Thomas put it best - continually invest in your knowledge portfolio - read a new book every quarter.


If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be?

I expect this list to be varied and to cover a wide range of things.

EDIT: Before adding a another book/answer, please search for it first and upvote the existing answer rather than adding it again.

To search, use the search box in the upper-right corner. To search the answers of the current question, use inquestion:this. For example:

inquestion:this "Code Complete"


当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
若有不妥, 欢迎评注提醒:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

订阅 substack 体验古早写作:

关注公众号, 持续获得相关各种嗯哼:


关于 ~ DebugUself with DAMA ;-)
公安备案号: 44049002000656 ...::