100 best books on Software Engineering
-
No matter how many books you read, or how much software you developed, some idiot manager knows how to do it better. Guess who wins the "conversation".
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego. -
Richter likes renaming his books :) It is now called Windows via C/C++[^]. An excellent book for Win32 system programming.
References for writing software are good, but NOTHING beats writing software. I've tried reading some books, but rarely get through them. Too often they are targeted toward a narrow market, and I just don't quite fit it; or the book have exercises that I just don't have time to work through. I prefer to read short things on line. I have a few RSS feeds that I browse, and when I want something specific I search the internet. Also, at work there are occasional classes. I work (at work) on embedded development, so our training here is geared toward processors. My boss jsut recently asked me about taking a Infineon TriCore class next month. Once in a while someone has a brown bag lunch where they take about 45 minutes to go over some concept or an aspect of some tool we use (like a debugger, or some algorithm). I think the best think is figuring out what works for you, and keeps you moving forward (you don't want to be stagnant, especially in this economy).
-
That's like being a Doctor, not a medicine book reader...would you go to that doctor? How about a Lawyer, not a law book reader...would you trust this guy to get you out of jail? OK, taking classes definitely helps, but how do you think the instructor learned what he's teaching? The internet is full of samples, true, but are they trustworthy? efficient? proven to work? Besides, what difference does it make to read form the internet than to read from a book? I know I know, the internet is more convenient, easy to search the exact topic, etc., in other words, it's like a customizable book, you create your own. But it's still reading! What I can't stand about programming books is that they are so expensive!
rickyvj wrote:
That's like being a Doctor, not a medicine book reader
so what?
rickyvj wrote:
would you go to that doctor?
if he fixes the problem i give him, why not? i've been programming since 1982. i've learned C, C++, C#, Java, Modula-2, Pascal, PHP, SQL, HTML, JavaScript, ATL, COM, etc., etc., etc., without books. you get a compiler, you look for code samples, and then you solve the problem at hand.
rickyvj wrote:
Besides, what difference does it make to read form the internet than to read from a book?
the internet allows you to get the information you need, when you need it. a typical (non-reference) programming book is a poorly-written re-enactment of the steps the author took while writing his sample application(s). you can learn how to write his sample application (and you get to read its source code a dozen times!), but that may or may not cover what you want to learn. frankly, most classes are even worse. but at least you can ask questions (or take naps) in class.
-
rickyvj wrote:
That's like being a Doctor, not a medicine book reader
so what?
rickyvj wrote:
would you go to that doctor?
if he fixes the problem i give him, why not? i've been programming since 1982. i've learned C, C++, C#, Java, Modula-2, Pascal, PHP, SQL, HTML, JavaScript, ATL, COM, etc., etc., etc., without books. you get a compiler, you look for code samples, and then you solve the problem at hand.
rickyvj wrote:
Besides, what difference does it make to read form the internet than to read from a book?
the internet allows you to get the information you need, when you need it. a typical (non-reference) programming book is a poorly-written re-enactment of the steps the author took while writing his sample application(s). you can learn how to write his sample application (and you get to read its source code a dozen times!), but that may or may not cover what you want to learn. frankly, most classes are even worse. but at least you can ask questions (or take naps) in class.
Chris Losinger wrote:
you get a compiler, you look for code samples, and then you solve the problem at hand.
Programmers that just learn by 'getting a compiler' and copy/pasting code from the internet are the same that keep on band-aiding the software, instead of coming up with elegant solutions that only books can teach. My point exactly, crappy code will solve the problem. I just don't look for how to solve the problem. I look for how to solve this problem and future problems and make the software robust and scalable.
Chris Losinger wrote:
i've been programming since 1982.
So, have you been using the internet since 1982?
Chris Losinger wrote:
frankly, most classes are even worse. but at least you can ask questions (or take naps) in class.
Ah, I see, in 1982 you were taking naps, nice way to learn C and C++!
-
Joe Woodbury wrote:
I'll take someone with 10 years experience writing commercial apps who hasn't read any of those books over someone with 3 years experience who has.
There is some redundancy in this statement. I think we can remove the 'reading' element from it and be clearer: "I'll take someone with 10 years experience writing commercial apps over someone with 3 years experience." Reading has nothing to do with that, and it doesn't help to build a straw-man out of "experienced programmer vs. inexperienced wannabe programmer" and cast it upon the practice of reading. Every programmer should keep reading and learning.
Joe Woodbury wrote:
My point is that reading is not a substitute for experience, yet too many people think it is.
No, but it's an excellent complement to experience. You seem to treat it as if people either read books on programming or they program. This is not the case, except with unwise people who will surely learn the error of their ways :-D.
destynova wrote:
Every programmer should keep reading and learning.
I disagree a bit on the reading part, which was my point. Reading about programming is overrated as is learning new technologies and languages for the sake of learning them. To rephrase, I'll take someone with three years experience over someone with three years of reading. I don't even think its an excellent complement to experience. There are excellent books, but most books on software engineering, including many in that list, suck and do no good whatsoever except to fool you into thinking you're smarter. Moreover, reading without using that knowledge is almost useless. Hands on experience vastly trumps book learning.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
-
Experience helps - but I've known experienced programmers who could use improving. Experince plus wanting to improve and learn new things works for me. I would've liked to see books like for specific languages. For example, Effective C++ by Meyers goes into great details how to correctly program as opposed to just a reference manual on the language...
CDMTJX wrote:
Effective C++ by Meyers
I found Effective C to be a better book, though this isn't bad with some major caveats (haven't read it in a while, but I do recall some of his points were rather academic and a few just plain wrong.) I was confusing Effective C++ and More Effective C++, both by Meyers. The former is a vastly better book than the latter, though I understand many of the problems with the latter (like all the weird errors) have been corrected.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
modified on Thursday, January 22, 2009 12:15 PM
-
Martin Fowler, Jon Bently, Frederick P. Brooks, and Eric Gamma titles worth a look. Most of the rest are pretty hit and miss. Donald Knuth is a legend, but I agree with the earlier comments, to me he is perhaps not a great popular writer, his books are pretty intimidating. I preferred reading Robert Sedgewicks stuff, he was a student of Knuth. I've read some of the Agile stuff, it has its place but it occupies far too much of the top 100 as stated. A lot of the Agile, UML, SOA and patterns books are in reality pretty average books. No K&R, Bjarne Stroustrup C++, or Penfold get serious ? Never been a fan of Steve McConnell books personally, so I can't see why he gets top spot or four books in top 100. The list seems to take a publishers view of 'Software Engineering' titles, its a pretty lazy list probably generated by a computer ? A few gems in there though...
dmarsh26 wrote:
Never been a fan of Steve McConnell books personally
Glad to see that I'm not the only one.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
-
destynova wrote:
Every programmer should keep reading and learning.
I disagree a bit on the reading part, which was my point. Reading about programming is overrated as is learning new technologies and languages for the sake of learning them. To rephrase, I'll take someone with three years experience over someone with three years of reading. I don't even think its an excellent complement to experience. There are excellent books, but most books on software engineering, including many in that list, suck and do no good whatsoever except to fool you into thinking you're smarter. Moreover, reading without using that knowledge is almost useless. Hands on experience vastly trumps book learning.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
Joe Woodbury wrote:
There are excellent books, but most books on software engineering, including many in that list, suck and do no good whatsoever except to fool you into thinking you're smarter. Moreover, reading without using that knowledge is almost useless. Hands on experience vastly trumps book learning.
I haven't read any of the books in that list except for SICP - in fact browsing through it, nearly all of them seem to be about SOA, 'Agile' methods, patterns, UML (which I detest) and a bit of refactoring. Those are not the kind of books I'd see much benefit in reading (except maybe a peek at the refactoring stuff) Re: hands-on experience trumping book learning, I never disagreed here - but I fail to see how hands-on experience AND book learning could be worse than just brute-force experience. If from the beginning you'd never read ANY programming books, for example, you'd probably make a poor programmer and develop some poor habits* which might go unfixed for years if ever. So really it's a question of balancing your reading with practical experience, and picking the right reading material... and the right experience :P * Just look at thedailywtf for compelling examples
-
Chris Losinger wrote:
you get a compiler, you look for code samples, and then you solve the problem at hand.
Programmers that just learn by 'getting a compiler' and copy/pasting code from the internet are the same that keep on band-aiding the software, instead of coming up with elegant solutions that only books can teach. My point exactly, crappy code will solve the problem. I just don't look for how to solve the problem. I look for how to solve this problem and future problems and make the software robust and scalable.
Chris Losinger wrote:
i've been programming since 1982.
So, have you been using the internet since 1982?
Chris Losinger wrote:
frankly, most classes are even worse. but at least you can ask questions (or take naps) in class.
Ah, I see, in 1982 you were taking naps, nice way to learn C and C++!
rickyvj wrote:
Programmers that just learn by 'getting a compiler' and copy/pasting code from the internet are the same that keep on band-aiding the software, instead of coming up with elegant solutions that only books can teach.
how silly. band-aiding software has far more to do with schedule and money than with where or how the programmer learned the language. even the best programmer is going to patch rather than refactor, if time is critical. and the idea that only books can teach "elegant solutions" is sheer nonsense. were there no elegant solutions before the first programming book was written ?
rickyvj wrote:
I just don't look for how to solve the problem. I look for how to solve this problem and future problems and make the software robust and scalable.
how wonderful for you! is that work ethic something that can only come from a book or is it simply the common human traits called "taking pride in your work" and "planning ahead" ?
rickyvj wrote:
So, have you been using the internet since 1982?
don't be an idiot.
rickyvj wrote:
Ah, I see, in 1982 you were taking naps, nice way to learn C and C++!
in 1982, there was no language named "C++". BASIC and Assembly were the options for most of us who didn't have access to university computers.
-
I couldn't disagree with you more. Just because you write software and you've been doing it for 10 yrs doesn't mean you're a good programmer. In fact, someone who hasn't had formal training, develops his own habits and methods, and is used to organically grows software that ends up being a nightmare to maintain. Software that works, of course, but highly inefficient and expensive. (I know I'm generalizing but that's the impression I've gotten from my engineers who don't read...) In other words, how do you think this 10yr experienced programmer learned whatever got him in the job in the first place? I don't think there's a way to learn anything without reading, just from classes and going to school is mediocre, you have to go the extra step and teach yourself (by reading) to be exceptional. I don't know anybody who graduated from school with honors without reading (unless maybe me, but I still read a lot, not a nerd but I like to read.) Someone who is interested about reading is someone who's interested about learning and applying new techniques to make the software better, easier and cheaper!
Note that I didn't say you shouldn't read; I even recommended some books. I said it was overrated--I place far greater emphasis on actual experience. I even illustrated the problem of substituting reading for experience. The same applies to formal education. Both lead to a largely academic view of programming because most of both are written by academics. Also note that most the books on the list are about process and those are generally the most useless of all. My own experience is partly the opposite of yours; that developers who read too much or who have PhDs are far to academic in their approach, lack creativity and attempt to force all the examples they read into their code (I can give you several real world stories about that.) Their code is the worse, most inefficient, code I deal with. In general, they are so concerned about design patterns and using the latest "in" thing in programming, their code is overly complex and poor performing. That said, I've also worked with plenty of lazy programmers who appear to have gotten into the field because they heard it paid good or something like that. I actually worked with one such fellow who read all sorts of books on process and was always trying new languages--took me a while to realize he was compensating for the fact that he was a terrible engineer and all the "new" stuff hid that fact (in a Dilbert moment, the guy was a darling of the bosses and got promoted.) Frankly, if you want the very best thing to read it is the entire documentation for the Win32 API in MSDN and, for .NET developers, the entire .NET documentation in MSDN. Sounds boring and tedious, but the payoff is tremendous.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
-
CDMTJX wrote:
Effective C++ by Meyers
I found Effective C to be a better book, though this isn't bad with some major caveats (haven't read it in a while, but I do recall some of his points were rather academic and a few just plain wrong.) I was confusing Effective C++ and More Effective C++, both by Meyers. The former is a vastly better book than the latter, though I understand many of the problems with the latter (like all the weird errors) have been corrected.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
modified on Thursday, January 22, 2009 12:15 PM
-
Note that I didn't say you shouldn't read; I even recommended some books. I said it was overrated--I place far greater emphasis on actual experience. I even illustrated the problem of substituting reading for experience. The same applies to formal education. Both lead to a largely academic view of programming because most of both are written by academics. Also note that most the books on the list are about process and those are generally the most useless of all. My own experience is partly the opposite of yours; that developers who read too much or who have PhDs are far to academic in their approach, lack creativity and attempt to force all the examples they read into their code (I can give you several real world stories about that.) Their code is the worse, most inefficient, code I deal with. In general, they are so concerned about design patterns and using the latest "in" thing in programming, their code is overly complex and poor performing. That said, I've also worked with plenty of lazy programmers who appear to have gotten into the field because they heard it paid good or something like that. I actually worked with one such fellow who read all sorts of books on process and was always trying new languages--took me a while to realize he was compensating for the fact that he was a terrible engineer and all the "new" stuff hid that fact (in a Dilbert moment, the guy was a darling of the bosses and got promoted.) Frankly, if you want the very best thing to read it is the entire documentation for the Win32 API in MSDN and, for .NET developers, the entire .NET documentation in MSDN. Sounds boring and tedious, but the payoff is tremendous.
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
You're absolutely right. I guess ideally you want to look for someone who has a good mix of both, real practice experience and academic/reading experience. Too much of one without the other can lead to trouble. As someone already said, reading is just a complement to experience, not a replacement.
-
My mistake. I was confusing Effective C++ and More Effective C++, both by Meyers. I liked much of the former, though some of his advice is bogus, and didn't like the latter. It was chock full of mistakes and mixed some really good advise with really terrible advise, sometimes in the same "chapter." I understand that some of this has been corrected in later versions. One thing I do like about Meyers is that he makes it clear that these are guidelines, not commandments. He seems less rigid in his advise than some of his fans!
Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke
-
Martin Fowler, Jon Bently, Frederick P. Brooks, and Eric Gamma titles worth a look. Most of the rest are pretty hit and miss. Donald Knuth is a legend, but I agree with the earlier comments, to me he is perhaps not a great popular writer, his books are pretty intimidating. I preferred reading Robert Sedgewicks stuff, he was a student of Knuth. I've read some of the Agile stuff, it has its place but it occupies far too much of the top 100 as stated. A lot of the Agile, UML, SOA and patterns books are in reality pretty average books. No K&R, Bjarne Stroustrup C++, or Penfold get serious ? Never been a fan of Steve McConnell books personally, so I can't see why he gets top spot or four books in top 100. The list seems to take a publishers view of 'Software Engineering' titles, its a pretty lazy list probably generated by a computer ? A few gems in there though...
K&R's "The C Programming Language" is the only programming book i really like. it is short and to the point. the examples are clear and concise. and it covers the entire language in just enough detail. it's an invaluable reference.
-
rickyvj wrote:
Programmers that just learn by 'getting a compiler' and copy/pasting code from the internet are the same that keep on band-aiding the software, instead of coming up with elegant solutions that only books can teach.
how silly. band-aiding software has far more to do with schedule and money than with where or how the programmer learned the language. even the best programmer is going to patch rather than refactor, if time is critical. and the idea that only books can teach "elegant solutions" is sheer nonsense. were there no elegant solutions before the first programming book was written ?
rickyvj wrote:
I just don't look for how to solve the problem. I look for how to solve this problem and future problems and make the software robust and scalable.
how wonderful for you! is that work ethic something that can only come from a book or is it simply the common human traits called "taking pride in your work" and "planning ahead" ?
rickyvj wrote:
So, have you been using the internet since 1982?
don't be an idiot.
rickyvj wrote:
Ah, I see, in 1982 you were taking naps, nice way to learn C and C++!
in 1982, there was no language named "C++". BASIC and Assembly were the options for most of us who didn't have access to university computers.
Chris Losinger wrote:
in 1982, there was no language named "C++". BASIC and Assembly were the options for most of us who didn't have access to university computers.
You forgot Fortran and COBOL. I think C and Pascal were around at that time too.
-
Compiled from Amazon reviews/rankings, Google hits and Jolt awards[^]. Personal impressions: 1) So many classics left out because they're too specific about one technology (Stevens on Unix programming, Petzold on Windows programming, K&R, etc...). 2) How many of these books do people actually read? Did anyone read all of Knuth's "Art of Computer Programming"? 3) Lots of injustices. "The Pragmatic Programmer" really deserves a better rating. "Head First Design Patterns" doesn't deserve to be 2nd. 4) Funny how many Agile-specific titles are in the list (including related like SCRUM). Specific for non-Agile I only saw on RUP. 5) Steve McConnell, Martin Fowler and Alistair Cockburn are the masters.
Of all forms of sexual aberration, the most unnatural is abstinence.
Diego Moita wrote:
- How many of these books do people actually read? Did anyone read all of Knuth's "Art of Computer Programming"?
Well, yes, but that was back when there were a lot less programming books and even less that were good.
-
Chris Losinger wrote:
in 1982, there was no language named "C++". BASIC and Assembly were the options for most of us who didn't have access to university computers.
You forgot Fortran and COBOL. I think C and Pascal were around at that time too.
i didn't really forget them, it's just that for most of us who didn't have access to university (or business) computers, there was no way to really use them. home PCs came with BASIC and Assembly and that was what you used (and you liked it!). you could buy compilers for those other languages, but i remember them being very expensive. i did buy a Modula-2 compiler once i was old enough to get a job. probably the only 16 year-old in town who even knew what Modula-2 was :)
-
i didn't really forget them, it's just that for most of us who didn't have access to university (or business) computers, there was no way to really use them. home PCs came with BASIC and Assembly and that was what you used (and you liked it!). you could buy compilers for those other languages, but i remember them being very expensive. i did buy a Modula-2 compiler once i was old enough to get a job. probably the only 16 year-old in town who even knew what Modula-2 was :)
Didn't TurboC come out in the early 80s? Of course, it did cost $99 which was a lot to pay if you even owned your own computer then.
-
Didn't TurboC come out in the early 80s? Of course, it did cost $99 which was a lot to pay if you even owned your own computer then.
according to Wiki, TurboC came out in 87. that's about when i finally graduated from BASIC and started using Modula-2 - didn't get to C for another couple of years.
-
according to Wiki, TurboC came out in 87. that's about when i finally graduated from BASIC and started using Modula-2 - didn't get to C for another couple of years.
Wow. That late huh? I remember my boss buying it to try to learn the NEW language everyone was talking about. He was a Fortran programmer for many years up to that time. I didn't get around to learning C until 1992 or so when the company I worked for bought me Turbo C++ 3.0 and it filled up half my 20MB hard drive. I had to spend $100 to get a new 100MB drive so I could do something with it.