Six Essential Language Agnostic Programming Books
A gentleman emailed thanking me for http://www.hanselman.com/tools, and suggested I make a list of great Programming Books. I don't think it'll be as long as the Tools List, but here's my list. I specifically made the list Language Agnostic. Also, many of these books are by authors who write gold. That means, nearly everything they write is worth taking a look at. I haven't listed every book they've written, in those cases, just their "Greatest Hits."
When it comes to programming languages, I'm not a religious zealot or C# apologist. My religion in these matter is strict Apatheism. I just don't care enough to fight (except for VB people. They're just nuts. (kidding!)) . Pick the language that makes you smile and ships the project. It is for this reason that I prefer to read Language Agnostic Computer Books.
Code Complete - Steve McConnell - Darn near a bible of software development goodness, Code Complete reminds us of our priorities. It's essential and everyone who writes code should read this book. | The Pragmatic Programmer - Andrew Hunt and Dave Thomas - I like to read this book at least every six months or so. It's clean, clever, clear and full of concrete tips you can use to be a better, simpler, pragmatic programmer. A new classic. | Programming Pearls - Jon Bentley - This may feel initially like a C book, but it's really an algorithms book at its heart. It's old school with techniques and thought problems that can be applied today, even in language like Ruby and C#. |
Refactoring - Fowler, Beck, Brant, Opdyke, Roberts - Although the language used is Java, the concepts are universal. This is a very linear, easy to read, learn by example book. If you think you know how to refactor, but you haven't read this book, pick it up and refresh yourself. You'll find names for Refactorings you've used for years and you'll definitely not only pick up new ones, but be better able to spot opportunities to use them. | Design of the UNIX Operating System - So few programmers today can answer questions like "explain how virtual memory is managed" or "how are Unix processes different from Windows." How did we get here. Know your history. | Design Patterns - Gamma, Helm, Johnson, Vlissides- One of the comments on Amazon says it best, "It is expected that any professional developer has read this book front-to-back. Buy it, read it, then put it in your bathroom and read it when convenient. Also, when you're done, spend some time at the Portland Pattern Repository.
|
UPDATE: There's some GREAT comments below, and I'm looking into each of them and putting together a list on Amazon.com. I made some pretty obvious gaffes (it was late. ;) ) by not including SICP (Structure and Interpretation of Computer Programs) or TAOCP as well as Types and Programming Languages. A number of folks said the list wasn't very language agnostic because it's very "C" and imperative language focused. Good points all!
What books did I miss, Dear Reader?
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Unfortunately, you have made a very common mistake. None of those books are language agnostic. The GoF book in particular is well known to be specific to a class of languages called 'imperative languages'. In fact, this holds for all of these books. The common mistake is thinking that 'imperative languages' is the universal set of all languages, when in fact, they are all very much the same language i.e. little differences between them compared to other languages. Granted, non-imperative languages aren't taught at school so much any more (though, this is changing a little thankfully), but it is these other languages whose ideas are adopted by the mainstream not-so-good languages (I used to work on the IBM Java implementation and even watched it happen once or twice!).
In fact, I have commented on this fact before in reference to someone else commenting on it (2006-12-06) http://blog.tmorris.net/defmacro1-defmacro0-1/
Here is the original quote:
Most people I’ve met have read the Design Patterns book by the Gang of Four. Any self respecting programmer will tell you that the book is language agnostic and the patterns apply to software engineering in general, regardless of which language you use. This is a noble claim. Unfortunately it is far removed from the truth.
I was just re-perusing it yesterday... you really can just open it randomly and get amazing nuggets of useful techniques and gotchas.
But one of the problems I think is that the people who would feel that a book like that is useful to them have already read it and those who don't can't imagine why they would want a book like that.
.
I just started reading it yesterday and it is a really well written (lots of pictures and examples) and is put in terms even I understand. Even so early on I would recommend it to anyone wanting an introduction into design patterns.
You may not want to include it is all the examples are in Java although if you know c# you should understand it and even the VB / C++ shouldn't have to jump to far.
I also recently read From Coder to Developer which started very interesting. For someone new to the business it gives a nice overview of what the whole software development process entails and made things a lot clearly for a new graduate like me.
I guess it really depends who you are aiming the list at
http://www.spinellis.gr/codereading/
Anyway I really like Head First Design Patterns, it's a bit of an unorthodox book, but it explains the principles really well. Though the examples are in java, they're very easy to read and easily ported to any OO language.
This is a touchstone book, where by merely mentioning the name, you instantly communicate a body of knowledge on software engineering insight. It's full of truths about Software Engineering that are still relevant. 30 years later.
Aside from implementation details, how are Unix processes different from Windows processes? The concept is the same isn't it? NT processes are thread based and Unix processes are not (or were not during Maurice Bach's time). What else?
Patterns of Enterprise Application Architecture - Martin Fowler
I would also add Introduction to Functional Programming by Bird and Wadler, and Peopleware by DeMarco and Lister.
SICP and Introduction to Functional Programming are biased toward certain sorts of programming paradigms, but in a good way, like Design Patterns.
Let's not skimp on theory, people ;)
http://www.martinfowler.com/eaaCatalog/index.html
To quote a former colleague...You pay $70.00 for the diagrams on the inside of the cover/1st page, and as an added bonus you also have the remaining pages that offer good overall information on TCP/IP networking.
@ArthurS - I debated a TCP/IP book. That was my favorite class in school. I agree with you. If you're coding on the Internet, digging deep into TCP/IP is a very useful thing. It gets less "agnostic" but it's ubiquitous these days.
@SamGentile and Chris - I went back and forth on that one, but it sounds like folks here agree it's a classic and very important. I rejected it because it had "enterprise" in the title, but it was late, so probably not the best idea on my part. :)
@brian - Ya, I assume you're talking about TAOCP 1-5? I went back and forth on the "textbookiness" but they are classics. I've never made it all the way through myself. Still, great point.
@Sam - I wasn't familiar with Types and Programming Languages but I will check it out. Sounds like folks agree with you.
@SICP Advocates - Yes, I thought about SICP (Structure and Interpretation of Computer Programs) although I personally prefer the videos, which are available out there to download, over the book, but point taken. I wanted to find a balance between overly "heady" and fundamentally useful. Do you think that it's truly essential for any developer?
@TimK - I LOVE Petzold's Code and have talked about it before on this blog. Not everyone agreed with me, but I personally think it's CS101 required reading. A great primer.
@AndrewNorris and TonyMorris - Thanks for the reminder that there's a non-imperative world out there. I think I'll post about that separately. I'm a Haskell fan myself, but often those brain cells are overwritten and jostled by the work of the day.
I'm looking into each of these and putting together a list on Amazon.com
mccarthy - the dynamics of software development
writing solid code - ms book , forget the authot (I am away from my book shelf at the moment)
debugging the software development process - another MS book
And of course - the mythical man month
I am also wondering if you guys are hiring .Net professionals.
this is the only book I kept from my schooling and have continued to read and learn from.
http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-2nd/dp/0805353402
Others that I'm fond of, without wishing to assert that they belong on your list, are Friedl's Mastering Reguler Expressions & beck's Test Driven Development. And most of the XP series at least made me think. Oh, "Don't Make Me Think". That's not on my desk, but only because I'm rereading it on daily the commute right now.
Norman's "The Design Of Everyday Things" ? That's worth considering.
I loved Cooper's "About Face" (the first edition). But I'm not sure how well it has aged. Some of the concepts at least are still relevant though, and still as ignored as ever in the majority of interfaces.
I can think of a lot more times where bad management made a project fail as opposed to bad coding practices.
I wanted to e-mail you but didn't want to pay $12 a year for that account. I'd love to know how you find the time to read books. Do you do it at work? At home? On weekends? In college? I try to read as much as I can but ultimately read about 20% of any book I pick up, even if it's a great read.
I read most books between 10pm and 2am. I read on the toilet. I read at lunch. I read on the bus. I read when I'm watching TV. Why do you stop at 20%?
Toilet reading is some of the most effective, in my opinion. I think I'd read on the bus more if the books I read were lighter. You seem so productive, I've often wondered what time you to go bed; I now take it as 2am ;) 10pm-2am is an interesting time of night for reading. I'm usually on the Internet at those times; I'm going to try reading and see how that works out.
About the 20%, I've often wondered that myself. I think what happens is that I force myself to read the beginning of a book and the beginning is often slow and boring so I start skimming - looking for things that are interesting and reading a few pages after that. That doesn't explain why I stopped reading Code Complete, though. What a great book! Even from the start.
Thank you.
Comments are closed.