50

After reading a question about books every programmer should read, I wonder if the following should be considered obsolete:

All these books seem very old. Isn't there a difference between modern computing and what was current when those book were written?

For example, my 61-year-old teacher explains things very nicely but forgets to take into account all that has been done between when he began to teach 25 years ago and now.

Isn't the same true for those books? Aren't there any more modern books that teach principles and technologies that are closer to current practice? Or do you consider them to be useful and relevant even today?

20
  • 9
    It'd be worth your time to consider why all the titles listed were first published at least 12 years ago, but are still valuable today. Four of the five have been updated since their first edition, but the average time between editions is 10.4 years.
    – Caleb
    Commented Dec 12, 2011 at 17:28
  • 83
    Fundamental programming principles do not change just because there is a new "flavor of the week" language or framework. Commented Dec 12, 2011 at 17:39
  • 26
    Expecting a raw computer science graduate to build a complex software system is like expecting a raw civil-engineering graduate design a suspension bridge, it simply shouldn't happen. School doesn't teach you everything you need to know by a long shot, it should teach you how to learn how to be a great software engineer though, and these old books have as much to say now as they did decades ago - it's over 16 years since the 20th anniversary edition of The Mythical Man-Month was published, and it's just as relevant today as the original was in 1975.
    – Mark Booth
    Commented Dec 12, 2011 at 17:56
  • 10
    these books are timeless; but programmer who would limit self only to these books and who would ignore newer stuff, would be obsolete indeed
    – gnat
    Commented Dec 12, 2011 at 20:54
  • 4
    You're kind of begging the question: if the books are good, then they're not obsolete.
    – quant_dev
    Commented Dec 12, 2011 at 21:55

18 Answers 18

91

These book are about the principles of development. These principles are, by nature, language-agnostic, and for some even paradigm-agnostic (OOP, functional programming, imperative languages).

They explain the theory and good ways of the development because, in the end, software is always about getting data, processing it, then outputting it back. Facebook, Twitter, 3D, batch process of accountancy, railway traffic management, launching rockets, etc.

Books that are about a language, like "How to learn XXXXX in YY days", where XXXXX is a language and YY is a number that will eventually (and sometimes actually very quickly) become obsolete, because, by nature, they are about things that either evolve, or get replaced and become outdated.

Code Complete, by the awesome Steve McConnell, is perhaps the book that made me realize this. And the Pragmatic Programmer totally changed the vision I had of software development. By reading such books, you realize that 95% of the problem you're facing everyday has already been solved, and that 95% of us are still reinventing the wheel.

The so-called "Cloud" isn't the future of software development, it's a way to use developed software.

Don't fall into the trap of hype/bullshit buzzwords, focus on how you can improve your software craftsman skills.

Focus on learning from what other brilliant spirits have invented and learned before us, because it is the only way to become an accomplished developer.

5
  • 6
    Good artists copy great artists steal
    – hafichuk
    Commented Dec 12, 2011 at 20:21
  • 16
    ... true artists ship. :-)
    – kindall
    Commented Dec 12, 2011 at 21:28
  • 9
    And yet, no matter how many times we say it, people still believe they just need javascript in 12 days. Commented Dec 12, 2011 at 21:48
  • 2
    Good artists copy, great artists copy AND keep the code clean! (I've had so many headaches at school working with other kids who made a mess of the project because they'd copy from everything and everybody...)
    – HTDutchy
    Commented Dec 13, 2011 at 8:37
  • @SpencerRathbun moreover (IMHO), Javascript is way more bran-consumming than other languages, like PHP. Yet there a bazillion "Learn Javascript in 15 seconds" and only half a bazillion of "Learn PHP on 17 secsonds" Commented Dec 13, 2011 at 11:18
79

All those books seem very, very, very old."

Psychology-Computer-Programming (1971) - With a Million times as many programmers as in 1970 the psychology of how they design programs and what mistakes they make and how to avoid them is more important than ever.

Software Tools (1976) - With the web being a collection of frame works, utilities, scripts and plugins - the ideas in Software Tools have never been more relevant.

EDIT: To address the general question of - are old programming books relevant ?

The general principles of software engineering haven't changed all that much, there are new technologies OO, TDD etc. But generally the users and the problems haven't changed - and thinking about how to divide up a problem is the same now as it always was.

These older books were generally written by experts in the field. Many modern programming books are aimed at rushing out a 2000page doorstop for the latest buzzword while it's still current.

Books on languages and technologies that are no longer used are probably not relevant - no Vax assembler manual is on the list. But 'C' is still very much used and 'The C programming langauge' is not only the best book on 'C' it's a model of how to write a concise tutorial and reference to your language.

Are there new algorithms? Yes. But all old the algorithms are still relevant and most of the new ones are in obscure areas that you are unlikely to meet. Nobody has come up with a better sort or FFT recently. Although other people have had attempts at explaining them better there is no reason that this year's Algorithms books is better than CLRS.

ps. Your cool new iWhatsit runs BSD, developed in 1977. Now you kids get off my lawn!

0
28

All those books seem very, very, very old. Don't you think there's a difference between nowadays and when those book were written?

IMHO it is not a surprise that very good books stay popular over decades - that shows how good they are. But I think I can tell you something for each of the candidates you listed:

Code complete: 2nd edition = may, 2004

Actually the first edition of "Code complete" was from 1993, so this one is really a "classic". It is about basic coding style, using examples which apply to almost every programming language of the C family, which contains the most popular languages nowadays (C/C++/Java/C#/Objective-C/D/...). So yes, this book is up-to-date.

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein)

Well, I actually did not read that book (my algorithms text book was from "Sedgewick"), but learning algorithms and algorithm construction is really language agnostic. Of course, this craft is getting some underrating the last years since you find many basic algorithms nowadays in standard libraries, but IMHO every professional programmer should have some basic knowledge in this field.

The Pragmatic Programmer

This is a very good book about programming as a craftmanship. Language agnostic and very, very up-to-date, as long as programming is done by programmers as a manual task, using text editors, IDEs, version control etc.

Structure and Interpretation of Computer Programs: = September 1, 1996

This is my personal favorite, even though (or perhaps because) the book uses Scheme to teach you the differences between different programming paradigms. I don't know any other book which has such a strong focus on building abstractions. And building abstractions is a key ability which make the difference between a mediocre programmer and a top programmer - that has not changed the last decades, so really, this book is timeless. Furthermore, functional languages and language elements have become more popular recently, so IMHO the ideas presented in this book got a renaissance.

The C Programming Language

Well, this book may be not so timeless as the other four. But since C is something like the "mother" of all those popular languages I listed above, it may be a good idea to read this book either - I don't think there some modern "C" books which are really better. And if you have to do maintenance programming of C++ code which was written by someone who knew C better that C++, then this book is a must.

Finally, you were asking for books that take more of the "current reality" into account, without being too technology specific. So what is the "current reality" and what has changed on the "non-technology" side? Here are some points from the last decade, without saying that this list is complete or having the right priorites.

  1. There exist more legacy code (especially more legacy code not only in Fortran and Cobol, but also in C++ and Java).
  2. Unit testing and TDD has become more favorite.
  3. There is much more open source code available.
  4. OO has gotten more and more critics

(I don't list here anything about Web or App development, because I think this technology specific).

There exist good books for topics 1 and 2, especially "Clean Code", which is from 2008, and "Working effectively with legacy code" from 2004. Perhaps those are some of the "newer" books you are looking for?

4
  • 5
    The C Programming language is timeless. Such a distilled book is rare. I have re-read it for the ... I don't know, I lost the count (I read it for the first time when I was 13) and I still appreciate it. Rather, I appreciate it much more now.
    – Francesco
    Commented Dec 12, 2011 at 18:25
  • 3
    I'll add #5 to your list: parallel computing. Not exactly a new idea, but nowadays it's being done on an unprecedented scale, which brings up some new problems. But all this is still built on the same foundations as the old stuff, and I get the feeling that the OP still doesn't really understand those foundations. Commented Dec 12, 2011 at 18:54
  • 2
    @Mike: I agree, parallel computing is getting more and more attention the last decade, I missed that when I wrote my answer.
    – Doc Brown
    Commented Dec 13, 2011 at 12:53
  • 2
    @Doc Brown Are your views on the timelessness of literature due to your having visited 1885, 1955, 1985, and 2015 within a few 'days' time from your own perspective?
    – Kalamane
    Commented Dec 21, 2011 at 23:31
13

Of the ones you mentioned "Code complete", "The pragmatic programmer" and "SICP" have been on my recommended-reading list for all new developers that start here at my company and want to get to a higher level.

They are not obsolete by a long shot because the fundamental science in Computer Science hasn't changed.

9

I have not read all those books, but I do own Code Complete and The Pragmatic Programmer. These books are far from being obsolete. They might have a couple of paragraphs that are a bit rusty but most of the content is still relevant today.

The advance in Computer Science and Programming is an evolutionary process. New abstractions are being introduced on top of old ones but these new things do not necessary make the old obsolete.

An analogy... Whether you are studying to be a trauma surgeon or a surgeon who specializes in heart transplantation, you still need to know how the human body works, cell chemistry, organ systems, how to open up the chest and how to quickly stop bleeding if it occurs, etc... Just because they invented endoscopic equipment and less invasive techniques, it does not mean you are off the hook for learning the basics. It only means you have to learn more.

1
  • yeah Gray's anatomy (the real book not the tv show) was written in 1918 and med students still use it.
    – HLGEM
    Commented Dec 12, 2011 at 22:53
7

The "cloud" is not a factor. The "cloud" is actually much older than most of the books you listed. most of those books are about core principles, they don't really ever change to often. Frameworks and libraries change all the time, but how you should structure your code doesn't change much. Similarly a pointer is still a pointer it doesn't start doing different things just because. The only language specific book you listed is about C, in which case that old book is much more useful than anything new, because it was likely written closer to the time period that any C code you would be working with was developed.

6

The list you quoted, no they arent obsolete. A book is only obsolete when the subject has changed enough that they are not usefull. The nature of programming and the C language have both changed very little since publication

6

One of the things you need to realize is that there exists underlying principles which are essentially timeless, and implementations which tend to come and go.

The underlying principles are essentially all the boring theory that Computer Science tends to spend a lot of time on, and that keeps being valid even if the world changes around it. This as opposed to things like "How to use Win32s under Windows 3.11" which is very old and outdated.

To put things in perspective - the canonical text on geometry is two thousand years old. Most math taught up to college level is at least 300 years old. Only reason the CS books aren't older, is because the field is still new.

2
  • Euclid's proposition 1 of book 1 cannot be proven from the supplied definitions, axioms, and postulates. It isn't a good choice to learn from nowadays, and after millenia can be considered outdated. Commented Dec 12, 2011 at 22:38
  • 1
    @DavidThornley if Euclids Elements is not the canonical text on geometry, what is?
    – user1249
    Commented Dec 14, 2011 at 1:41
5

The core principles of software haven't changed in the past 20 years. A stack, a tree and a linked list still work the same as they did back then. "XOR" still means the same thing. A byte still has 8 bits.

Are you seriously suggesting that "multiplatform development" is a new idea? Why do you think C was invented?

"Cloud" is a marketing buzzword. It used to mean something sort-of-specific, but it's been debased through overuse. Nowadays, anytime you have something that talks to a remote server over a network, the marketers stick the "cloud" label on it. So there's really no point in talking about it, because it's a meaningless word.

I don't know your 61 year old professor, so I can't vouch for him. You, on the other hand, are clearly not as smart as you think you are. Listen to the professor, it's possible you'll learn something.


"You don't get to be old by being no fool. A lot of young wise men, they dead as a motherfucker." - Richard Pryor

1
  • 2
    "You, on the other hand, are clearly not as smart as you think you are". If I thought I was that smart, I would never have asked such a question. Commented Dec 12, 2011 at 20:35
5

Some books are timeless because they discuss ideas that are so fundamental to the practice of software development, they will always apply.

Take for example the Mythical Man Month, when I was reading this book, I kept forgetting that it was written in 1975. When he sprinkles in the occasional reference about IBM System 360, it always jars me because that is the only content that dates the book. Everything else applies here and now. I still keep my copy of Martin Fowler's Patterns of Enterprise Application Architecture, now 9 years old but again timeless and still applicable to the work I do today.

My favorite book right now is Peter Coad's Java Modeling in Color with UML (1999) even though I'm a C# developer and eschew UML, because the techniques and concepts make me a better coder.

We'd do well to learn from the first generation of developers because they've tread the ground we're walking right now and their hard earned wisdom can help us get a jump start on what we're doing/learning today.

1
  • MMM -- I like the part about the team constantly fixing bugs but the number of bugs stayed constant :)
    – JoelFan
    Commented Dec 13, 2011 at 0:16
4

Here are some more very old and out-of-date books:

  • The Art of Computer Programming, vol. 1-3 by D. Knuth. These were published between 1968 and 1981! We are not using vacuum tubes anymore, people! Everything in these books are lame. Where is the discussion on Python and Ruby?

  • Computers and Intractability: A Guide to the Theory of NP-Completeness by M. R. Garey and D. S. Johnson, 1979. Super lame! All these problems have been solved by now, probably.

If a book wasn't written in the last three years with focus on Python, then it's not worth reading.

7
  • In fairness there is at least a case to make that TAoCP's use of an assembler for its pseudocode means that more modern algorithms books which use pseudocode closer to more modern languages are more useful for the 90%+ of us who aren't writing for embedded systems. Commented Dec 12, 2011 at 18:50
  • -1: every week or two I see someone asking for an algorithm to handle something or other that Knuth has described in incredible detail. Just for fun: Name one sorting algorithm that is newer than 1981. Want to answer a parallel sort? Knuth has pages about sorting data in parallel. You might be right about the Python books but there's a huge difference between "Flavor of the week" books and engineering craft books.
    – sarnold
    Commented Dec 13, 2011 at 3:21
  • 5
    Apparently some sarcasm detectors are broken...
    – DaveE
    Commented Dec 13, 2011 at 6:54
  • 1
    <Sarcasm> "Comment" </Sarcasm>
    – user25446
    Commented Dec 13, 2011 at 11:23
  • 1
    I think this answer would make it's point even better if it included mention of The Art of Computer Programming Volume 4A, which was published in 2011 and Volume 5, planned for 2020!
    – Mark Booth
    Commented Dec 13, 2011 at 13:56
3

Those books are not obsolete, those books are classics.

To quote Kaplansky, "spend some time every day learning something new that is disjoint from the problem on which you are currently working (remember that the disjointness may be temporary), and read the masters."

3

I know what you mean, when we have advances (LINQ comes to mind) that change code readability and use, but simply because these books are old, does not mean that they don't offer great lessons for the reader.

While the programming languages they use may have fallen out of vogue, the theory behind the programming languages still rings true today. Most of these books make it a point to cover the basic very well, and the basics haven't changed all that much.

2
  • 2
    The programming languages they use are mostly 'C' - they may have fallen out of vogue, but have massively increased in use. Commented Dec 12, 2011 at 16:43
  • 3
    You should read SICP, it might open your eyes regarding where LINQ comes from :) Commented Dec 12, 2011 at 16:45
1

The computer science industry is still very young. Books written 30 years ago I consider to still be valuable and needed for complete understanding. Abstract concepts sometimes take awhile to digest.

1

Some minor parts are obsolete in all those books, but 99% is still great.

Algorithms books will age slowly. Algorithms are math, and the math is not changing rapidly. Sure, there's still research into new algorithms that are superior in certain circumstances (e.g., Furer's algorithm (2007) Schonhage-Strassen for multiplying 40000+ digit long numbers together), but the introduction you need to learn the basics (divide-and-conquer/Dynamic Programming/Linear programming/etc) so you can learn to think sensibly about algorithms.

Learning standard C from K&R is still the best source; though I'm not sure if I would trust their sections on how to setup your environment.

SICP is a wonderful book and teaches the foundations of modern CS through teaching lisp which is a wonderful language. However, lisp is arguably not the most useful language nowadays; though others will argue lisp is their secret weapon and that learning languages like java or python first makes very bad programmers who never need to learn how to implement sort or linked-lists or arrays or big-O notation and end up doing very inefficient things.

Some of Code Complete or Pragmatic Programmer are less relevant, esp if you are programming in newer languages (e.g., python / ruby / C++11), as its often focused on how to do something in C or gives recommended solutions using the best tools available at the time (like CVS/RCS for version control rather than a modern tool like git/bzr/hg/svn). But its still good to be thinking about how version control is a must and how it needs to be seamless and self-documenting and go through the logic of why it is an absolute must.

Or PP's recommendations against IDEs for basic unix editor + unix tools -- not to say you shouldn't learn how to use find/awk/locate/grep/sed, but a good IDE can often save lots of time. E.g., emacs can do syntax highlighting or simple code completion; but say a good IDE will say give tool-tips with function declarations when you type them in, or analyze code and mark off unused variables, make it easy to collapse sections of code, etc.

1

Isn't there a difference between modern computing and what was current when those book were written? Do you think it changes what we should learn? Shouldn't we take into account the developments of the last 20 years?

Yes, yes, and yes.

That doesn't make those books obsolete. "Modern computing" is an incredibly broad term. However, it includes C programming, so "The C Programming Language" is still a relevant book. It includes algorithms, so "Introduction to Algorithms" is still a relevant book. So on and so forth.

Should the current emphasis on multiplatform development multiplatform development (see phonegap) change what we learn today?

Most apps on the App Store (to use the most popular mobile platform as an example) are written in Objective C, a language from the early 80s which is a superset of C. So, again, C is still relevant.

Do you think the "cloud" is a fad or the future?

It's our present.

When students get out of university, they are supposed to be real developers and be able to work immediately

But what does that mean?

There are too many languages, APIs, frameworks, platforms, tools, collaboration strategies, etc. for school to prepare you for a specific job. The school can only lay the foundation, giving you a basic working model of how the machine works, about algorithms, data structures, code construction, decomposition strategies, some tools, etc.

A "real developer" is not someone who knows everything, it's someone with the capacity for this kind of work, who has a foundation in theory and practice, and who knows how to learn, because your education never ends.

1
  • 1
    +1 for the 'how to learn' comment - that's what college is for, not rote job training.
    – DaveE
    Commented Dec 12, 2011 at 23:17
1

I heard a saying from a mentor:

"Good advice comes with a reason why so that you know when it's no longer good advice." So in the book terms, a book that explains why to do X over Y will let you know when that advice is no longer valid. A "always do this, just do it" book like some of the crash-course in language X is not so good.

I saw one called "learn unix in 24 hours", well the book was about 8cm thick, I doubt many people could even read every page in 24 hours :)

Remember that what is en vogue today might be scoffed at tomorrow. All of the following were once deemed mainstream (en vogue yesterday) but now aren't:

  • Goto
  • Single entry single exit
  • Hungarian notation
  • Waterfall approach

And there are a few things which were once completely anathema but are now accepted:

  • Recursion as a tool to solve problems (radical in the early BASIC days)
  • Allocating memory at runtime with malloc/new
  • Use of the C++ STL
  • Garbage collected languages for real-time systems

Know why, and you'll know when old assumptions have been replaced with a new reality, and so should the advice.

0

Ok, so I am going to offer an answer that is much more theoretical. I agree with all of you guys that answered the, quite obvious in my opinion, these books are the basis of what we as programmers do and all of these new frameworks are built on these same old pillars line.

Here are my two cents-- not really mine, I learned it from St. Aquinas and from Aristotle before him.

An abstraction is useless to someone who doesn't understand the particulars.

The mechanics of a computer have not changed since von-neumann. Similarly, the particulars you need to learn to be a great programmer will be the same until the von-neumann model is obsolete. Assembly, is the language of computers ... learn it, no excuses.

C is the native language of both Windows and Unix. Learn it or find a new trade. If you are one of those guys that went straight to JAVA or C#, you may be a good programmer, but you would be a much better programmer if you would learn C-- period.

Algorithms and Data Structures are the foundation of computer programs, learn them.

Everything else is an abstraction of these very core disciplines. Abstractions are wonderful when used properly-- seriously, I use C# for 75% of all of my projects. However, they make you stupid if you do not take the time to understand how they work and how to function without them. You will spend endless time making software to fit through the proverbial square hole when there are much better approaches and will have bugs that could have been avoided. Software Development is a craft that must be mastered, and at the end of the day, the tools rarely change. That is why these books are so important.

All of these JAVA and C# only programmers, tsk, I'll bet most of them have never even seen an episode of Star Trek!

Not the answer you're looking for? Browse other questions tagged or ask your own question.