What Is the Most Influential Programming Book?
First time accepted submitter AlexDomo writes "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? Since it was first posed back in 2008, this question has now become the second most popular question of all time on StackOverflow. The top 5 results are: Code Complete (2nd Edition), The Pragmatic Programmer: From Journeyman to Master, Structure and Interpretation of Computer Programs, The C Programming Language, and Introduction to Algorithms."
'nuff said
Life isn't like a box of chocolates. It's more like a jar of jalapenos. What you do today, might burn your ass tomorrow.
Sam Publishing's Teach Yourself C++ In 21 days was a teenage "favorite" of mine.
Everyone knows it: Knuth's "The Art of Computer Programming"
Now get off my lawn!
Bent, folded, spindled, and mutilated.
My top 2: Numerical recipes in 'C', Press et al, and Discrete Mathematics, Dieker and Voxman.
There i said it.
If only I had mod points...
by k and r
Is Fred Brook's "The Mythical Man-Month".
My first programming book was actually Assembly Lines: The Book by Roger Wagner. I had taught myself Apple Basic but my code was too slow. So I got this book and learned my first assembly programming (8-bit 6502). It had a major influence.
Great book on design patterns, Design Patterns: Elements of Reusable Object-Oriented Software.
There's also this ruby-flavored version, and since I've been on a ruby kick for quite some time now, I devoured it within a couple of days. It's called Design Patterns in Ruby.
Hope somebody hasn't heard of these, they'll get a damn good read (or, two, if you take on both). Although for the majority of Slashdot, I'd be really surprised if this recommendation doesn't come from a million people. The original GoF made it around quite a bit.
vos nescitis quicquam, nec cogitatis quia expedit nobis ut unus moriatur homo pro populo et non tota gens pereat.
This book shows how to build software tools to bootstrap from a crummy environment (FORTRAN on IBM 370) to a much more productive environment. Stop whining, get coding, build tools. Expounds on tool pipelines based on Unix pipes. .
Calculus Made Easy by Silvanus P. Thompson.
The correct order should be:
I am sure that The Art of Computer Programming Volume 5 by D.Knuth will be next on the list. I have seriously been counting the years to the estimated 2020.
I only regret that Gerry Sussman hasn't written more books and hasn't recorded more talks. I will buy everything he writes and I will listen to everything he says. Please, Gerry! If you read this then please drop everything you do and just start talking to the camera. I have watched your every talk and lecture that I could possibly find on the Internet many times - from the 1986 lectures at MIT to your lecture on mechanical watches. I seriously believe that everything you say should be recorded for future generations. I don't know anyone else who can talk about anything at all and I listen breathlessly like I was hypnotized. I'm sure that many people here could say the same. Let this be an open letter to Gerald Jay Sussman: Please write more books and please record more lectures for the sake of the future of computer science. And thank you for your outstanding contribution that you have made so far. It is something that has shaped literally generations of passionate enthusiasts of programming. Thank you.
Karma: Positive (probably because of superiour intellect)
John von Neumann: Theory of self-reproducing automata, 1966
There you are, staring at me again.
http://www.amazon.com/Debugging-David-J-Agans/dp/0814474578
Pretty good book. I dont buy many. The others have already been mentioned.
Read it. It puts into words how to debug things.
Great starter book for non-cs types.
http://catb.org/~esr/writings/taoup/
...a stunned silence fell upon the hall.
The Commodore 64 Programmers Guide
This went a long way towards making me better at programming larger, non-academic-assignment programs.
The value of book largely depends on your skills at the time... "Code Complete" was pretty good, but you need to be already an adept programmer to see the value of its advice.
I really wish I had read "Interprocess Communications in UNIX: The Nooks and Crannies (2nd Edition)" earlier. It's not the thickest book but it is the most information dense one I own. In today's environment of multicore and SMT CPUs, any programmer should have a deep understanding of IPC. An excellent partner to a good C book.
The C Programming Language by Kernighan and Ritchie (popularly known as "K&R") is certainly, objectively (puns intended), and probably demonstrably, the most influential programming book. It was a strong, probably primary, influence on every one of the titles suggested in this story. Indeed, it is something like the "ur-text" of modern programming - the vast majority of all programming, since it was first published in 1978. It has influenced programs, programmers and programming books. The influence dependency tree of programming books revolves around K&R.
I say this despite (or perhaps as demonstrated by) the K&R block brace style, which I abhor. It saves a line to destroy column coherence. And despite popularizing the unitary "var++" (eg. in for() loops), rather than the semantically more consistent "++var". And a hundred other quirks Kernighan and Ritchie infected into programming (and programming books, and thereby programmers). The persistence of which is just part of the ample proof of K&R's paramount influence.
--
make install -not war
I still have mine. Schematics in the back. First edition (Had a c64 with a 4 digit serial number)
Taught me the machine, how it worked inside and out by the time I was 8 years old.
Two thumbs up would recommend.
...so you can spot the BS and hysterical religion when some idiot consultant comes up with their new XXX driven development or Agile methodology, or tries to replace on perfectly good framework, set of design patterns or tools with a new one that promises to be the best thing since sliced bread.
But seriously I think it's important to start kids young. My first books were on Apple IIe BASIC. In those days BASIC was what a lot of kids had access to. I saw LOGO later. I wouldn't change that. I'd change the books and systems I tried to use as a teenager and young adult though - MFC and Windows coding was such a waste of time given where my career went. And I never got far.
Agree with the previous AC about Mythical Man Month. Love the classic idea of a manager who needs a baby to meet a 1 month deadline throwing 9 women at the problem instead of one woman for 9 months. But I think you can get the gist without reading a whole book about it.
K&R is iconic, but not a good beginner's book at all, and while it does cover some things in great depth it does leave plenty out and is well dated now. Worth reading, but not first. It's good for understanding how the guts of the machine work but as C has been in decline for some time some of today's new coders will likely never use it.
I've never actually read Code Complete, but it sounds like a good introduction to a lot of ideas if you've not done a degree.
These posts express my own personal views, not those of my employer
The Design and Evolution of C++ by Bjarne Stroustrup
http://www.amazon.com/Design-Evolution-C-Bjarne-Stroustrup/dp/0201543303
This is the book that turned me into a grown up in the world of computer languages. It is the book that brought unparalleled insight and wisdom into every other computer language book, discussion about computer languages, or actual real world use of computer languages since reading.
If I could go back in time that far, I wouldn't be worried about telling myself to read some book, I would tell myself to buy MSFT stock in 1981, and Apple stock in 1983, and sell short in October '87 etc
Next question?
K&R as far as long-lasting impact. But my sentimental favorite? Doug Cooper's "Oh! Pascal!" I still have a copy of it.
"Here's what's happening. You're starting to drive like your Dad..." - Red Green
Anyone embarking on any career in IT should read Edward Yourdons Death March. Learn to recognise, and not contribute to, flawed projects. You can be as technically savvy as they come but no amount of technical skill will allow you to code your way out of a truly f@#!ked project.
The most influential programming book I owned was the first one I owned: The Z-80 Assembly manual. That got me started on real programming. The TRS-80 may not have been a great machine compared to what we have now, but it was a great bare-bones-metal learning tool.
I do not fail; I succeed at finding out what does not work.
It's "I, Robot" from Isaac Asimov. How many read that book early on and thought "I can do better than those three rules"...
Browsing at +1 - no ACs, I ignore their posts. So refreshing!
The book that started it all.
You kidding? You don't even need to go that far back to rake in dough on stocks.
Wish I was paying attention to things when Google came around..
vos nescitis quicquam, nec cogitatis quia expedit nobis ut unus moriatur homo pro populo et non tota gens pereat.
Strange. 10 years ago I used to get my news from slashdot first. Now, not so much anymore. This list is pretty exhaustive and has more backing than I expect you'd find anywhere else, including here: http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
Dianetics.
I have mod points and I am not afraid to use them.
For a nonnative english speaker, Stroustrup has a very good command of the english language. It gives appreciation of good code.
Namely, the C64 Programmer's Reference Guide, and more importantly, Machine Language for the C64 [...] by Jim Butterfield.
Damn straight. You beat me to it.
General Relativity: Space-time tells matter where to go; Matter tells space-time what shape to be.
The one you read? As opposed to hollow out to keep a flask of scotch in it?
Mostly random stuff.
Practical C Programming by Oulaline
My first Marc Rochkind explains the Unix environment and the shell in such a way that you can write your own. It was simply awesome when I was in college. I had a very good understanding of how to write a program to do anything on Unix after walking through that book. Great reference, too.
Second was the "dragon book" (Aho, Seti, Ullman).
Third was Richard Stevens "Unix Network Programming" (before there were multiple volumes).
I never read any programming book that has helped me significantly. But I remember copying code from magazines on a TI-99 before I knew how to do multiplication. I just copied the code one line at a time, and it either ran or didn't. The best thing I could do was print rockets. I didn't understand anything until I was 12 and got the IF-THEN statement. Once I had that, I was able to write branching games similar to my Choose your Own Adventure Books. After that the world was wide open.
God spoke to me
In terms of success, people skills are more useful than programming skills.
Words to men, as air to birds.
If you haven't read this you're missing out. It's the "why" that you won't find in a mere programming book. They all focus on the "how". It really opened my eyes, and I give a copy to every person that interns with me to read. http://www.amazon.com/UNIX-Philosophy-Mike-Gancarz/dp/1555581234
That would be my #1 choice. I've read most of the CS classics, and they're good. But I really *got* programming after reading Deitel's C++ textbook from cover-to-cover attempting at least half the exercises.
Petzold's Programming Windows comes second place.
Followed by Knuth's 2nd installation.
Got the first three volumes as a HS graduation present from my parents. Don't use it as much as I should, but that's because I'm not a programmer anymore.
The only CS book where 99% of the people touting it have never read it!
At least the C++ community saw it for the bullshit that it is. While they went somewhat template-crazy at times, at least they managed to avoid the sheer stupidity of "design patterns", for the most part. That's probably why most real software today is written in C++.
Ouch. So you're one of those then eh. I love how you say the C++ community saw it for the bullshit that it was, but then leave out the part where there have been hundreds of books published that relate the GoF patterns to C++. But then, I guess the Java community probably wrote those books too.
You'll have that sometimes...
Comment removed based on user account deletion
TAOCP is only useful for college students who want to look smart in the eyes of their clueless classmates.
In reality, it's terrible from a didactic standpoint. MIX is an impractical and verbose language, and an overall horrible way to explain algorithms to any audience. TAOCP is only interesting for the exercises, which most people will ignore for being too difficult to be solved during a casual read.
The only reason this book makes Top N lists is because people are intimidated by it, and peer pressure prevents them from treating it like the mess that it is.
UNIX and Unix 4ever
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
I thought about this one as well but I decided not to post because TMMM is really about program management, not programming, per se.
It's about programming in the sense that it helps you recognize when you are entering a project that will spiral down, so you can avoid emotional attachment or get out if possible.
And from the other angle if many developers have read it they can help steer the project away from that course early.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Seriously, doing proofs taught me more about logic and algorithm and problem solving than anything else. But yeah, also K&R.
In terms of success, people skills are more useful than programming skills.
I completely agree with you. It's nice to see someone contribute to this discussion who is so clever and intelligent.
Clever, intelligent, and handsome -if I might say so.
Vol 1 and Vol 2. Plus TCP/IP Illustrated, Volume 1, 2 and 3.
If you are doing any network programming, these books are amazing. Plus it all applies to Unix, Linux, Windows, and Mac.
For me it is the Design Patterns by the so-called Gang of Four.
http://en.wikipedia.org/wiki/Design_Patterns
My first computer was a Commodore 64 and I learned programming and general computer use on that, and most stuff was either Basic or Machine Language on that. When I got an XT and wanted to learn programming, I looked at both Turbo C and Turbo Basic in the local Radio Shack store (they were side by side on the shelf and exactly the same price, as I recall) and bought Turbo Basic because I figured I knew a bit more about Basic and it would be easier to get started doing things.
In hindsight I should have bought and learned Turbo C instead. I got to be pretty darn good with Basic programming and wrote some cool stuff with Turbo Basic (including some "shareware" that made a pretty decent buck for a while), but some years later I discovered two things:
1. C wasn't very hard to learn; in fact it took me less time to "get started" with C than it did when I started learning Basic programming on the XT.
2. I could do some cool stuff with Basic but similar stuff could be done more easily and directly with C. In other words, stuff that required a lot of "bending" in Basic could just be done in C without much fuss at all.
So in hindsight, I wish I had read the Turbo C Reference Manual when I first got my XT.
If you're a zombie and you know it, bite your friend!
I would say you would have to have 3 separate categories for this particular award:
1. Best computer science/algorithms book
Here I like MITs Introduction to Algorithms book and of course, Dr. Knuths tomes
2. Best programming(as in turning algorithms and ideas into computer code) book:
I am partial to Peter Van Der Lindens work, but thats just me.
3. Best book about computing in the "real world"
My vote goes to Mythical Man Month.
Monstar L
MIX was intentionally problematic to avoid dependencies on platform assumptions that might not be portable -- a questionable tactic, but it was intentional. For the rest, it's a valuable reference (I've used it since college), but not really didactic.
Quidnam Latine loqui modo coepi?
No different from any other slashdot poll.
I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
I don't remember any of the book titles, but I do remember borrowing many BASIC books from the local library, entering all the sample code into GWBASIC and then playing around with it to see what I could make it do. I suppose if I'd never found those books I probably would never have gotten into computer programming.
After that there weren't really any books; when I moved onto Pascal I learnt from some tutorials I found on a BBS, then I learnt C from internet guides and Java from university. Who reads books anymore when all the information you really need to learn this stuff is on the internet, easily locatable via Google?
the first 'programming books' that i read were "family and home office computing magazine", typing shit into a ti-99/4a.
then there were the kids programming books with simple ass little projects.
later on, there was Babbage's , and the giant purple MSDOS book by Microsoft that nobody remembers
then the Turbo Pascal 7.0 manual, with its introduction to object oriented programming.
these grown up "classic" books are just a bunch of egg head bullshit. especially Knuth, the hipster's guide to fucking up software (TeX being the fixed gear cycling of the computer world)
Influential: Having influence. Nuff said.
the 'gang of four' is a phrase coined during the Culutral Revolution of the 60s in China, a horrifically brutal period in which millions of people died, filled with mass starvation, torture, rape, murder, anarchy, mob violence, chaos, destruction, and other things.
then some fucktard computer dick comes along and writes a book about some obscure software engineering bullshit. what do they title it? "Gang of Four". oh thats FUCKING HILARIOUS
what is their next book titled, "Himmler and Heydrich"? I've got an idea! Lets write a garbage collector and call it the "Holodomor"! How fucking tongue in cheek!
Clue #1 that a poster has not read the book they are touting: The author's name is misspelled.
"To those who are overly cautious, everything is impossible. "
to the authors. i got a tiny fact wrong. they got an entire history of a nation of people wrong.
the soulless amorality of the computer science 'community' beggars belief sometimes.
I would definitely say that Code Complete has been one of the most helpful and insightful books that I've read about programming. Reading through it never gets old.
Great series encourages you to think deeper.
I loved the first edition of this book. This was one of the best introductions to object-oriented programming and Eiffel programming language. Written by Bertrand Meyer.
...richie - It is a good day to code.
Addison Wesley 1976.
It showed the Unix Philosophy to a larger audience than Version 6 could reach at the time.
Best programming book ever if you want to go for pragmatic influence rather than computer science.
It also came with the ability to get the code. While the code is now dated, the philosophy is still leading edge. And lots of us played with that code.
Ah the memories! Fortran was still ubiquitous. It made Fortran usable. Kind of makes me want to go dig up RATFOR and do something...
Perhaps I was lucky, but I did read the top three books I'd recommend as I was starting my first job:
1. Advanced Programming in the UNIX Environment, W. Richard Stevens. This was influential in teaching me what clean functional programming interfaces look like, and hopefully the code I've developed since then has lived up to that ideal.
2. Network Programming in the UNIX Environment, W. Richard Stevens. Much the same as the first title, but in some ways illustrating programming interfaces that tackle more complex/flexible situations.
3. Writing Solid Code. Steve Maguire. Fifteen years later I still daily use a few of the ideas presented in the title. However it also served to show me the ugliness of some programming conventions (e.g. Hungarian Notation and StudlyCaps()) and led me to avoid those practices in my own code when I have a choice (i.e. when not having to conform to the style of existing code).
Cyrano de Maniac
It seems that most things at work have to be negotiated: technologies used, features to implement, costs, what I'm going to do, what you're going to do, when it'll be done, how it'll be done, how we will know it was done right, etc.
It may seem odd but I would say Godel Escher Bach. I can't really think of any other book that I would consider worth while reading at the start of my carear. (I am actually thinking of before my college education.)
No, not very influential outside the Mac community, not all that influential within it. But the as posed here in Slashdot, "if you could go back in time," this is the one, and not because of what it had to say about the Mac, but because it is the only book I've ever read that truly accepts the idea of debugging. Every other book carries the implied notion that you should concentrate on writing bug-free software, and that a good programmer really ought to be able to do it.
About half of the book was devoted to debugging, and it is my personal surmise that the book was originally entitled "How to Debug Macintosh Software" and that the publishers made him change it. Some might charge that the way Mac software was at the time--A5 worlds, very little RAM to spare, and somewhat finicky memory management--writing Mac software intrinsically required more debugging than other environments. It doesn't matter.
What matters was that this is the only book I read that honestly and truly embraced debugging as a fundamental and legitimate part of the software development process.
"How to Do Nothing," kids activities, back in print!
It's nice to see the almost complete absence of any titles reflecting current "flavor of the month" development techniques. About the closest it gets is "Design Patterns", which I've not got the highest opinion of (for reasons I'll explain in a footnote) but which at least codified some common best practices in a way that they could be taught, rather than learned by trial and error.
Always been a bit bemused by "Code Complete". Read it (well, the first edition), enjoyed it, and thought it contained a lot of good stuff, but at the time I was perplexed by it being a Microsoft Press book. Seemed kinda like the Pope penning the definitive case for atheism.
Somewhat comforted to see The Dragon Book in there, even if it is in its newer edition. Think I've still got that one around. That, and the Hennessy and Patterson book "Computer Architecture: A Quantitative Approach". My edition's horribly out of date, but so am I..
(*) Big problem with design patterns is that there's a tendency to take them as Holy Scripture of some sort, and/or to unnecessarily squeeze algorithms into a given design pattern. However, the problem there doesn't really lie with the book, but with the reader (or the teacher of the course, I guess). "Design Patterns" strikes me as something that should be read after a decent level of programming ability has been reached and not before - there's a level of expertise required to know when using a pattern that'll make maintenance of the software a joy for all who touch the code, and when to just wing it. Too many people immediately jump in and conclude that they must use a Visitor pattern on each Decorator, except where there's a Mediator involved, in which case it's necessary to employ the Churning Curds and The Knot Of Fame, before finally employing The Clinging Creeper to either a Flyweight object for the Proxy, or an Abstract Singleton. Then they code it, and you end up with an exponential number of classes, several mutually inclusive interfaces, and a system so flexible that you have to embed a dedicated parser to make any use of it beyond initiating a single object.
You missed the boat if you havent read any Richard Stevens. ANY decent bit of *nix network code has benefited from "UNIX Network Programming", it geek-e-ly changed my life.
My wife still hates it when I bring that book to bed.
Me too, seeing how easy BASIC was got me interested in writing programs, then from there I wanted to learn more. So the book from high school computers, Hands on BASIC with a PET by Pelkham, while no where near a definitive guide was greatly influential That and David Ahl's BASIC Computer Games compilation books.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
The Elements of Computing Systems: Building a Modern Computer from First Principles. I don't think that I've purchased another book that has a more complete look at modern computing.
-Josh
maybe?
Please login before trolling.
Perhaps I'm trolling, perhaps I'm not.
As someone interested in algorithms, and the sorts of things in Knuth (complexity, number theoretic things, etc.) I have to agree. It's a huge mess that no one is willing to criticize and fewer people read. You're better off starting with a book by Herb Wilf, Dexter Kozen or any of a dozen other well written books. Note that this also goes for Knuth's Discrete Math book.
.. and also "Pitfalls of Object Oriented Development" by Bruce Webster.
The best book on programming for the layman is "Alice in Wonderland"; but that's because it's the best book on anything for the layman.
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
by Jez Humble, David Farley
It's not the programming book that most undergraduates are accustomed to...but it will be!
Gödel, Escher, Bach: An eternal golden braid.
Modern Operating Systems.
Facts and Fallacies of Software Engineering by Robert L. Glass (forward by Alan M. Davis)
For me, it was Design Patterns: Elements of Reusable Object-Oriented Software by gang of 4
Honestly, those are terrible books. If nothing else the signal-to-noise ratio is extremely disproportionate. I mean there are nuggets of good information in the books, but a 1100+ page language tutorial is unnecessary. It would be a stretch to call the series programming books -- let alone "influential" programming books.
Win a signed Stephen Carpenter ESP Guitar from the Deftones: http://def-tag.com/?r=0008781
Seriously that book is loaded. I mean loaded with 10k lines of code! Very detailed oriented if you ever want to dig deep and try some excersizes as well as skip some.
Too bad my ex has my Dietel and Dietel how to program C++ and Java books. Nothing online compares to the detail of these books
http://saveie6.com/
Knuth teaches goto statements so I wouldn't listen to him or read any of his works. All the other books and any computer science professor will tell you gotos are bad and unstructured.
http://saveie6.com/
Oh, you said programming... well, database design is important too.
"The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
Intertech Machinery Inc. provides the most precise Injection Mould andRubber Molds from Taiwan. With applying excellent unscrewing device in molds,
Intertech is also very professional for making flip top Cap Molds in the world.
And yet, for others of us, it was our starting book back in the 80's.
Windbourne - moderating.
I was just having this conversation with some colleagues the other day. Without a doubt, Code Complete tops the list for me, though admittedly I have not read it cover to cover, nor do understand or even implement everything in it. But it's great.
Also:
TAOCP - I'm one of the few programmers out there who will sacrifice my ego and admit there is a lot of it I don't understand completely. But it really is a timeless and valuable book.
Code Complete - Can be applied to programming in many different languages and offers a fresh way of looking at problems.
The Mythical Man Month - Ok, so not as technical but amazingly accurate in discussing software projects and how they progress in real life.
Object Oriented Thought Process (Matt Weisfeld) - This isnt as well known, but was my first introduction to true OOP programming, and offers a clear, concise explanation of it.
K&R - A little dated, but the concepts are still great. Not exactly a beginner book and focused on C, but could be applied to just about any language to make you solve problems better.
Newer Stuff
Anything Deitel - These books are expensive but incredibly detailed and packed with great information.
Head First Design Patterns - I already had a good understanding of them previous to reading the book, but had I read it first I would have much smarter, much earlier.
The Psychology of Computer Programming: 1971. Recently reprinted. Excellent.
Programming in C and Software Tools are two that he wrote, but he's also been editor or reviewer for a staggering number of classic C and Unix books published by Addison Wesley over the last three decades, including all of W. Richard Stevens' books IIRC.
Kernighan's involvement is practically proof that a book is worth careful study.
As for Addison Wesley, their track record has been pretty good, but they've also pushed a lot of fluffy books on agile/extreme programming and similar fads over the years, usually with price tags like $34.95 for a 200 page trade paperback.
Seriously, how many other professions have such books? Teach yourself brain surgery, teach yourself plumbing, teach yourself law... No ours is the only profession in which someone can think themselves an expert in a few weeks time. The good thing is many people can improve their lives by studying one of these books and switching jobs. The bad thing is this may be part of why CS graduates have been declining.
I agree with your view on Design Patterns completely, but never really saw it put into words like that. For a giant project that's going to evolve and have lots of people working on it over time, it only makes sense to use patterns and practices based on others who have solved that same problem. However the tendency to over complicate more simple projects to fit in with a set of patterns can end up being counterproductive and a huge waste of time. Sometimes an application really is so simple that just breaking something into a couple of classes and documenting it good is all you'll ever need to do with it.
Apparently its the only book sold
Heh.
For someone seriously interested in programming and CS in general, this is a book(s) that has few equals.
Yes, it takes careful reading, more than a bit of math and the exercises are sometimes more than difficult.
So its tough, sometimes absurdly so, but it also covers so much and so well. Those intimidated by it are often poseurs - claiming to be serious computer types, but lacking in understanding and ability.
I'm an old geezer (I've been programming for 50+ years, starting with the UNIVAC I), but by far the most thought-provoking and "educational" book for me has been Bentley's Programming Pearls -- I currently have a copy in my bedroom along with the 3 volumes of Knuth!
MIX was intentionally problematic to avoid dependencies on platform assumptions that might not be portable -- a questionable tactic, but it was intentional.
Do you realise just how absurd this is? An author decides to create a fictitious language with which to describe a concept. That is perfectly fine. Many ideas in mathematics and science become dramatically easier to convey when described with a well designed language or notation. However, the author makes the language intentionally verbose and difficult to comprehend, greatly compromising the primary purpose of the book.
This does not make *any* sense, unless Knuth was trying to troll generations of students who were too insecure to admit they couldn't understand MIX, or posers who used TAOCP to brag to their classmates.
No ASM programming?
Enjoy being useless when you need to work at the bare-metal level.
Also, enjoy being dog-ass slow and having boated code.
For a perfect example of why ASM rocks, see MenuetOS.
Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
Well, the list goes on, but they've been programming people for centuries in some cases, billions of people.
Oh wait, did you mean some OTHER kind of programming?
Michael Abrash, "Zen of code optimisation"
1996: I thought I was a good programmer.
This book really shook many ideas I had and my vision is still influenced.
The lesson : look at what the algorithm really does and build everything around it.
Slashdot stopped being a technology site ages ago. Rare stories like this one are more about the nostalgia aspect. One can almost hear the editors thoughts: "Remember being a nerd... 10+ years ago? How quaint that was."
Unlocked a gold mine for me.
http://www.amazon.com/Advanced-Assembly-Language-Programming-Allen/dp/1565290372
Join the Slashcott! Feb 10 thru Feb 17!
The Peter Norton Programmer's guide to the IBM PC.
A.K.A. the pink shirt book.
the 'gang of four' is a phrase coined during the Culutral Revolution of the 60s in China, a horrifically brutal period in which millions of people died, filled with mass starvation, torture, rape, murder, anarchy, mob violence, chaos, destruction, and other things.
then some fucktard computer dick comes along and writes a book about some obscure software engineering bullshit. what do they title it? "Gang of Four". oh thats FUCKING HILARIOUS
what is their next book titled, "Himmler and Heydrich"? I've got an idea! Lets write a garbage collector and call it the "Holodomor"! How fucking tongue in cheek!
Well, are the authors murdering, torturing and raping people? You're judging them because of the name they've picked?
Hey, if people want to call themselves after Himmler and Heydrich while giving a positive contribution to society more power to them. I judge people based on what they do, not based on their sense of humor. It's not immoral for me to publish a computer science book and use the pen name of Adolf Hitler.
Those intimidated by it are often poseurs - claiming to be serious computer types, but lacking in understanding and ability.
I think you've just described the majority of people who recommend this book, having never read it. People who are intimidated by a book just shy away from it and don't actively bring it up to make themselves look smart.
Starting Forth by Leo Brodie -- especially the "under the hood" chapter. Runner-up for me is the PostScript Language Tutorial and Cookbook. These books gave me whole news way of thinking about programming, which doesn't happen very often.
The books that first grounded me in the hard and software of computing were "Peter Norton's Guide to Programming the IBM PC", Jeff Duntemann's "Complete Turbo Pascal" and , and Bruce Eckel's "Using C++" and "Thinking in C++".
Each of these books are paragons of clear writing and thought, conveying much more than the rudiments of their topic -- the years of experience and practical perspective of each of the authors.
I began my software career reading these books (ca. 1985), eventually completing a formal MS in CS. Yet sometimes your greatest influences arise not from ivory towers but from the school of hard knocks.
Some of the concepts are dated as the concepts of objects have superceded the types of non-object or pre-object modules in Myers' world. But the power of this book is not algorithms, not on using goto or not using goto statement, not on the merits of any particular programming language. It is that if you are to code anything but the most trivial computer program, you are going to have to figure out how to divide it into managable pieces and then have the pieces work together.
The problem with choosing some of these books is that they won't make as much sense until you've had some programming experience.
Coder's Stone: The programming language quick ref for iPad
And yet, for others of us, it was our starting book back in the 80's.
More realistically I think for my generation in the UK, this was our starting book. But in mitigation, expecting six year olds to read Knuth might have been a bit much!
The first programming book I ever read was "The Complete Idiot's Guide to QBASIC." It was great for me when I was 8 years old, taught me what the word "pizzazz" meant and to this date, remains the only book on programming I have read to completion (and I'm a recent honours grad.)
Design patterns have raped, murdered, tortured, enslaved and brought chaos to many thousands of software projects around the world. Nothing else has come close to causing so many problems.
Design patterns have given dipshits and fools a false sense of ability. They can spew out the names of the patterns, and somehow think this will lead to maintainable, reliable, and otherwise good software. Little do they realize that what they produce is total crap. It always is. Their use of design patterns absolutely everywhere just makes it so much worse.
Was William B. Jones's "Assembly Language for the IBM PC family"
While I don't do assembly at all professionally, after reading through this one it made me wish the author had written stuff on some other languages too.
William of Ockham had no beard. The most likely explanation is that it was chewed off by squirrels every morning.
Admittedly the C is very Fortran-esque, but of all my CS books, this is the one that is the most worn out. That and the C std-lib book that goes with the ANSI update to the K&R classic.
Agreed, a little known book for C++ from the ground up. Is an extremely well organized book "Starting Out With C++" by Gaddis. Dietel and Dietel C++ is manageable but its a thicket of information that makes it tough for some (I have gone through Deitel C++ and Dietel Java). There are a thousand books on C++ and probably a thousand squared number of paths to learning C++. Whatever your C++ journey, have fun!
The C classic is wonderful The C Programming Language Brian Kernighan and Dennis Ritchie.
Knuth is computer philosophy. Makes your soul shine. Treat it like philosophy, read it at leisure and think hard about every word on every page.
After years of programming I have to say the most influential book for me by far is "The Design of Everyday Things" by Donald Norman. In the end, you're designing a tool for someone... whether it's a end user or an api. The days of control-alt-delete are over... or at least they should be. Thinking about the user interface (whether it's mechanical, gui, api,or sdk) should not be something the programmer slaps on after the functionality is completed.
That's definitely a problem with people reading it when they're not yet at an architectural level to understand it. You aren't supposed to look at a problem and ask "What patterns can I use?". You're supposed to come up with a solution to a problem, realize that it's forming a pattern, and use that to both describe the solution to others and to identify potential strengths and weaknesses of your solution.
Unfortunately too many people without much architecture ability read it and try to apply it to a problem rather than to their solution, leading to a lot of pain. Also leading to my least favorite interview question "What's your favorite design pattern?". The only correct response- "The one that solves my problem".
I still have more fans than freaks. WTF is wrong with you people?
Did you bother with the OP? It's a link to internetsecuritydb.com linking to the stackoverflow.com post you linked to.
If you wanna go with most reads in a bookstore coffee shop you really must include something like "Learn Java in 21 days". MILLIONS must have read that baby back in the day.
Cwm, fjord-bank glyphs vext quiz
by Stan Kelly-Bootle
e.g.
Loop, infinite
n. See infinite loop.
Infinite loop
n. See loop, infinite.
This book will give you the tools solve complex problems, with out scratching your head too much ;)
Harry Potter. Think about it...
THINK ABOUT IT!
For me it was and will be Dromey's How to Solve it by Computer
Algorithms + Data Structures = Programs by Niklaus Wirth
I read this book back in the late 1970's. (I was still in High School where we had time-shared access to a PDP/11-70 running RSTS/E. Programming was in Basic-Plus. To put this in perspective, this was the same time frame as the TRS-80, TI 99/4A, and Commodore PET!) Our SysOp at SPHS saw my voracious appetite for all things computing and STRONGLY encouraged me to get and read this book. (Thanks Mike!) But enough with the background!
This book made an indelible impression on me. It introduced different approaches to tackle problems (algorithms) and different ways of organizing the information I had available (data structures). But, most importantly, it encouraged me to iterate between the Data and the Code to find a reasonably optimal synthesis of the two.
Prior to this, my experience with data structures had been limited to "scalars" (integers, floating point, and some character strings) and multi-dimensional arrays. It was a real eye-opener to be exposed to structured records as well as linked lists and trees!
Similarly, my coding experience was limited to combinations of the usual control structures of sequences, conditional statements, looping, and subroutines/functions. Did I ever struggle trying to understand recursion!
Then, toss in a generous helping of structured programming and step-wise refinement. This single work completely transformed my perspective on programming, its challenges, and its promises... I was hooked for good!
Amazon Link. Prentice-Hall 1975; ISBN 0-13-022418-9; 366 pages, 102 figures.
I later had the good fortune to read a number of the other books recommended here, K&R, TAOCP, Mythical Man Month, and I'd highly recommend those, as well. Nevertheless, I read Wirth's A+DS=P first, and it's made a world of difference in my life.
It was written by Kent Beck, and is quite easily his best work.
Code Complete is the only programming book I read (almost) cover to cover after I was already working as a developer. Truly the bible of programming (as opposed to the bible of X programming language). As a largely self-taught programmer (does 1st year Fortran and Pascal count as a CS education?) it neatly captured most of the lessons I had painfully learnt over a 10 year period. Once I read it, I thought "why the hell isn't this force-fed to every CS student?".
Apart from that, K&R's C book was one I kept going back to as I was only an occasional C programmer. Lean but information dense.
It's funny. You talk like you know what you're talking about, but you clearly don't. -- MagikSlinger: C++ programmer for 20 years, and Java programmer for 10 years.
The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com
K&R
Code Complete
Drink some Sanka buddy.
not even sure it's available anymore; but that, and maybe the 16-bit DOS art of assembly.
I'm surprised no one has mentioned "A FORTRAN Coloring Book." Yes, it's a real book: http://www.seas.gwu.edu/~kaufman1/FortranColoringBook/ColoringBkCover.html
I would call it influential due to the imitators it had in the end-user publishing field. There were many friendly computer books with cutsy images, but A FORTRAN Coloring Book was the first.
Cool, a book that teaches how to con people!
Advanced Programming in the UNIX(R) Environment
"Classic: a book which people praise, but don't read." - Mark Twain
I guess he meant it with regards to classic literature. It seems extendable to classics in other art fields, and classics in technical fields too I suppose
I listen to both RIAA and non-RIAA stuff if I like the music, tangential business/politics nonwithstanding.
and underlying code, I would say Sam's Teach Yourself C++ in 24 Hours.
Actually, that was a really good systems programming book, in style and content during the Win95 era.
Windows 3.x actually. The Win95 version was a fairly straight derivative of the original and was a bit lacking due to that. It did go from 16-bit to 32-bit and it was expanded for the newer APIs to a degree but it did not stand out as it once did.
Jeffrey Richter's Advanced Windows was the stand out systems programming book for 32-bit Windows.
I wonder if he meant that sentiment and phrasing in part as a reference to Winston Churchill's "It has been said that democracy is the worst form of government except all the others that have been tried."...
I listen to both RIAA and non-RIAA stuff if I like the music, tangential business/politics nonwithstanding.
For anyone doing OS and BIOS level programming on the PC in the DOS days (and not writing games), the "Peter Norton Programmer's Guide to the IBM PC & PS/2" was a great book for understanding BIOS and DOS calls.
Peter Norton was one of the visionaries of the IBM PC software days and the DOS versions of the Norton Utilities were a godsend for things like repairing a damaged floppy disk or doing low-level hex editing.
It wasnt until Norton sold his company to Symantec that the Norton product line became the piece of junk it is today.
Well now it all depends. I agree in general, but when it comes to something specific (like networks), I have (sitting on the desk in front of me right now) Unix Network Programming: Networking APIs: Sockets and XTI by W. Richard Stevens. For networks specifically, Stevens wins. For general programming, Knuth has put into print a lot of good software (and algorithms). He has single-handedly bashed the hell out of submarine patent trolls with prior art (and for that I am massively glad).
I read a draft version of Knuth's book... Absolutely terrible. Basic mistakes throughout the book..
I'm sure the final product was great.. but I lost all respect for Knuth's programming ability after that.
Aho and Ullman's classic Principles of Compiler Design and the followup they did with Sethi Compilers: Principles Techniques and Tools
My wife bought me a first printing as gift one year.
Required reading for internet skeptics
http://www.amazon.com/Dating-Design-Patterns-Solveig-Haugland/dp/0974312002/ref=sr_1_1?ie=UTF8&qid=1315193378&sr=8-1
_Dating_ Design Patterns.
I listen to both RIAA and non-RIAA stuff if I like the music, tangential business/politics nonwithstanding.
Commodore 64 Programmers Reference Guide
The Dragon book sucks, they themselves admit it, quote: "The authors, recognizing that few readers will ever go on to construct a compiler...".
This book is on my BOTTOM 10 books ever. It has no useful code and only makes you think of the dragon. Not of the compiler you want to make. So that's the end of your project.
If you must write a compiler, use Parrrot PGE.
No Dragon inside.
Slit my wrists now, please!!!
Oh, come on. The mantra about goto always being evil is bullocks. Spaghetti programming is bad, but when you use a goto to avoid complexity, it's not to be shunned.
Everybody says that goto is bad, but very few of those who say it can give a rational explanation of why. In short, they're fanbois.
Or, put it another way, try to make a CPU without branching, only subroutines...
Principles of Operating Systems by Sacha Krakowiak.
Because it is important to understand the general principles of operating systems (parallel activities, synchronization, resource allocation, memory management...) when programming.
Slashdot, fix the reply notifications... You won't get away with it...
This does not make *any* sense, unless Knuth was trying to troll generations of students who were too insecure to admit they couldn't understand MIX.
So Knuth is kinda like the L. Ron Hubbard of Computer Science?
I'm sure it is a series including wonders like, "The Cultural Revolution," and, "The Long March," and the masterwork of the series, "The Great Leap Forward."
Design Patterns: Elements of Reusable Object-Oriented Software by the "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides).
Not that there were any main-stream OO languages available when I started programming (mumble) years ago, nor was it written for another decade or more, but...
Go permanent? In your dreams and my worst nightmares.
Excellent book. There was a Creative Commons release of the book a few years ago.
linked anyway to this page, I'd love to see a story titled What Is/Was the Most Influential Operating System?
Slashdot, fix the reply notifications... You won't get away with it...
Effective Java, by Josh Bloch.
TAOCP is a great work of scholarship, probably the greatest single one in computer science; but how often do you actually use it in practice?
I use the lessons from Code Complete every time i write code (its still the best thing microsoft ever produced); and I'd also like to nominate Design Patterns as the book I that would have saved me the most heartache if I'd read it earlier
"already a C++ expert"
Wow, a book for C++ experts makes no sense unless one is "already a C++ expert".
Any more wisdom to share?
I started with Pascal, so the most influential book for me is Walter Savitch's "Turbo Pascal: An Introduction to the Art and Science of Programming."
It's the best book on learning to program that i've ever read and it's still the yardstick by which i compare other entry-level programming books. It's very clear, detailed, informative, and sensible. The fun quotes in every section are an added bonus.
Ever looked at the assembly produced by a for loop? It uses jmp calls. jmp is the exact same thing as goto. If your professor is telling you that gotos are bad, they're either not very good professor or you're in a 100 level CS course where they don't want to confuse you too much.
Goto is bad because of the bad code it enables - even though fundamentally, assembler is all about goto (jmp, etc). A useful technique that enables code to be hacked to death and made unmaintainable deserves to lie in its shallow grave.
Man who leaps off cliff jumps to conclusion.
I wish I had discovered design patterns earlier in my career.
Beside that, maybe "Enjoying the Good Life: How to Pick a Career in Anything Other than Software Development So You'll Still Have Your Hair by 35". ;)
Truckin like the Doo-Dah man...
Oh please. You're referring to an english translation of a chinese turn of phrase. The words that chinese people utter, when they refer to "The Gang of Four" certainly sound nothing like the words we use in English. You can't expect computer nerds to be well versed in obscure (yes. it's fucking obscure) chinese political groups and their sorted past.
You react as though their pet name for the book is The Rape of Nanking, and that their nickname may as well be Khymer Rouge.
Nigger please.
on x86, you'll see a compare instruction, then usually a conditional jump. Often JLE (jump near if less than or equal to)
Both volumes by Bentley.
There are other works specific to certain languages, which rise and decline in importance with the popularity of these languages. The fundamentals of how to program are hard to learn better than from this.
Of course, the question asked about the most influential work, not the best one, so this answer is more idealistic than anything. If it were more influential, we would have better programmers, and possibly less arguments about this or that language being better.
Somebody knows what they are talking about. I suspect an excellent education at MIT.
When you look at all these books they show how the author understood the subject and wrote his or her code. They don't teach - crawl-walk-run type of teaching in their text books. The first problem is to show what is given and what is assumed (assumption regarding input, output and the range and values of variables etc). Secondly they don't teach how to translate the explicitly defined problem into an algorithm (based on the assumptions). Thirdly, they don't teach how to allocate memory (memory management - data structure). Once I figured out these three different problem every one has to understand, programming had been a breeze to me. I don't think I learned this type of thinking from any text book. Of course, later on, Knuth etc., helped me.I ended up writing books and made money.
Nowhere near the first coding book I read, but Programming Perl opened my eyes to what's achievable using "mere" scripting languages. I haven't used Perl for some years now, but the lessons I learned from that book stay with me.
Pretty sure K&R C was my first programming book, but I haven't retained much of that beyond C syntax. It certainly didn't impact my career as Programming Perl did
You don't understand why goto is considered bad: it allows for disordered structure and program flow (aka "spaghetti code.").
Of course you can do gotos in assembly - many languages have goto and they have to run on the hardware, but that's not the point.
In assembly, you have to enforce the code structure yourself. In higher-level languages, the compiler enforces it for you. The language "keeps track" of gotos needed for conditionals and loops so that you don't have to. Structured programming saves work and avoids mistakes.
Have you read your SICP today?
Since it was first posed back in 2008, this question has now become the second most popular question of all time on StackOverflow.
Thank you for not bothering to read the summary, Matt.
I would have to go with any one of the many recent books on financial programming. No, I am not recommending financial programming as a field, I am just pointing out that all those graphs of historical stock prices would have been very useful 20 years ago :-)
Spot on!
The C classic is wonderful The C Programming Language Brian Kernighan and Dennis Ritchie.
Although Knuth is ofcourse the number one, there should definitely be a place for Numerical Recipes in the top 5, in any language you are comfortable with. Personally, that would be FORTRAN, but any other is just as fine.
Not straight software dev or programming language books - but they were the most information-dense books I ever read.
Many older books have now dated, but two that I would recommend are "Classics in Software Engineering" (edited I think by Ed Yourdon), giving a great perspective on how to approach programming and programming style; and "The psychology of Computer Programming" by Gerry Weinberg, an approach to thought processes, both individual and group, involved in software development. I have no idea if they are still in print, but they served me well for many years
ISO 8652 is probably the one thing I would tell myself to read very early on, probably right after Peter Norton's Programming the IBM PC
hmmm, what's on my shelf... I would say Assembly language and Computer Architecture by Anthony J. Dos Reis http://www.amazon.com/Assembly-Language-Computer-Architecture-Using/dp/0534405274/ref=sr_1_1?ie=UTF8&qid=1315205447&sr=8-1 is a modern classic but perhaps not most influential. For that I would say K&R C as well.
If you're programming in assembly, goto is all you've got. If you're using higher level languages there are other options, usually far more appropriate than a goto.
Those flow control in higher level languages may all compile into jumps, but they shield you from doing stupid things with JMP you shouldn't be doing in ASM either.
The statement of "goto is bad" isn't about the assembly language where there are no other choices, it's about using it in languages where there are other choices.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
Came here for this. In days long forgotten when I actually bothered to pump out code, any time I ran into a difficult problem, off to Knuth I went. Even if the solution you needed wasn't there, something about the hardcore nature of Knuth cleared the mind after banging one's head against a wall.
Since I've given up coding, I can't say there's much out there that's influential for me. I can say I wish 'SQL For Dummies' was more influential.
For the love of god, PHP "rockstars", lern2index.
Did everyone forget about Stoustrup's The C++ Programming Language? Easily the book I spent most time on.
An introduction to Database systems, C. S. Date
Algorithms, Sedgewick
The dragon book.
Some of those books are freely available as Creative Commons downloads and yet the Web master offers commissioned links to Amazon to by the books (and he does NOT offer links to the free downloads). Some of these freely available books are sold for well over 100 dollars on Amazon.
If you want to make a patent troll like Amazon rich, then go ahead and buy these books. Otherwise download them from the authors Web site or pick them up from the Pirate Bay.
Wikipedia can be your guide for the Creative Commons books.
That's why I can't take the Agile Manifesto seriously. Any group that thinks a semantical term used and misued by many a fanatical political grouping (see where I'm going here) as a substitue for reasoned and nuanced thinking (there is no silver bullet) deserves serious scorn and derision.
You're totally wrong about goto statements.
I really, really, really doubt Mensa Babe has an MIT education -- or potentially ANY higher education. Or, if she (he?) does it was probably not excellent. Competent people don't run around shouting their IQ to the world and writing crap in their signatures like "Karma: Positive (probably because of superiour(sic!) intellect)". We just get shit done.
My IQ is 169. Do I create an account called "MyIqIs169"? No. Because it's stupid and irrelevant.
Gödel, Escher, Bach: An Eternal Golden Braid (commonly GEB) by Douglas Hofstadter.
You will learn about logic, programming, translation, intelligence, limits, infinity.
But sadly, not about debugging.
--
The All Mighty UnWise Anon
Also, in the assembly you do not get to name the variables. You just get a chunk of the heap, and it just adds an offset to it.
You professor should teach you that instead to declare a bunch of variables (which may lead to syntax error), you must just declare one byte array and use it as a memory space, manually calculating the offset of each variables.
If your professor is telling you that you should use named variables, they're either not very good professor or you're in a 100 level CS course where they don't want to confuse you too much.
...
Why did you stop at the gotos? There are so many things that high level languages do not do *right* (i.e., as assembly code).
Why can't
... that's the one that will be of most influence on me :)
'The unexamined life is not worth living' - Socrates
Influential, but not in a good way.
Title is misleading.
Certainly Knuth's series 'The Art of Computer Programming' is on of the most influential books on the topic. But I'd never recommend it to a beginner.
So, decide; most influential book or best book for a beginner?
Even if it's somehow outdated (and no longer in print), every single program we write today is highly influenced by "Structured Programming" by Edsger Wybe Dijkstra, C. A. R. Hoare and Ole-Johan Dahl. Before this book, programs used to be a mess of spaghetti code and the familiar constructs like if-then-else or while loops did not exist.
The one that changed everything for me was the smaller of two books that came with Blitz Basic 2 (for my Amiga). It was a cross between a reference manual and a guide to programming, and from it I learned to write code. 20 years later, I'm still coding, full-time now, and I still love it.
The problem back then (for me at least) was that compilers, SDKs and reference manuals cost a fortune. I earned £4 a week delivering newspapers, so I couldn't afford £300 for a C compiler and £200 for the Commodore SDK. Once you outgrew the included basic, it was quite hard to know where to go next.
But I'm not suggesting that's a classic by any stretch, it's just a book that had a profound impact on me. As for classics that might have been overlooked so far in this discussion, how about Game Programming Gems? Over the years I'm quite sure that they've made a pretty sound impact on the world of games programming. My favourite books (which are mentioned above, but aren't technical guides per se) are Mythical Man Month and Peopleware. Peopleware in particular taught me that good programming is as much about people as it is about syntax. I also liked Extreme Programming by Beck.
In Fortran GOTO is essential and JMP in assembly is effectively a GOTO (or vice versa). Just because it doesn't look pretty doesn't mean somebody attempting to cover the entire field should ignore it.
Not nearly as popular as "Harry Potter and the art of computer programming".
The name is very likely to be a joke, a band name or something that sounded cool at the time.
For instance I am not really an old database program or an Aston Martin car.
The programming "book" that influenced me the most was QBasic's help file. Next was MS Word's macro (and later on, VBA) help file.
Couldn't agree more. TAOCP seems more like a book aimed at telling you how clever Knuth is than a book aimed at teaching. The idea of starting with a low-level programming language and building high-level constructs on top of it is great, but the execution of TAOCP is very poor. Part of the reason for this is that Knuth is a great theoretician and a terrible programmer. TeX should show you that TAOCP is not a book about programming - who, in the '70s, would invent a new programming language in which structured programming is impossible? Only Knuth. It combines the worst aspects of Lisp and an assembly language.
I am TheRaven on Soylent News
Bullshit. I have a PhD in computer science, and I wouldn't recommend TAOCP to anyone. Sure, it covers the material, but it covers it amazingly badly. Knuth manages to take simple concepts and make them incomprehensible. Read pretty much any textbook on theoretical computer science other than TAOCP and you'll learn a lot more.
I am TheRaven on Soylent News
My first book on programming was the CPC 464 programming handbook, which only explained all Basic commands. Later I learned Z80 assembler and Commodore Basic. Then I learned Pascal with a Turbo Pascal handbook from the library. That book told me to use pointers for dynamic memory usage. And I learned about paging. And then I learned a little bit of C with K&Rs book.
However, the biggest boost (approx. 200% at least) in improving programming skills came from my first semester in computer science. We had a lecture called Programming with 2 2 hour lectures a week and 2 hour exercise course. We learned about all known programming pattern and how to use them in different languages. Our professor was a big Scheme fan, so most of his examples where in Scheme. But functional programming was very influential for me. It changed my way to code in Pascal and C.
Ah yes and I learned to use libraries. ;-) Something you do not, when you are on a DOS machine.
To others reading: the book is not actually titled GoF, it's an affectionate nickname
Ignore this dumbass (decora is a known troll)
The statement of "goto is bad" isn't about the assembly language where there are no other choices, it's about using it in languages where there are other choices.
The original statement was 'Go To Statement Considered Harmful'. The essay - which really kick-started the structured programming revolution - was not about using goto, it was about providing it in the language at all. If you're using C, for example, then you don't have a go-to statement in the original sense. You have a very limited version that only allows flow control within a function scope. The go-to statements that Djikstra was complaining about were ones that made things like variable scoping impossible. They allowed jumping anywhere inside a program, without a return mechanism. This made reasoning about the code insanely hard. If you learned to program after the '70s, then you've probably never used a language (other than an assembly language) where this kind of thing was possible. The closest that we have now is setjmp()/longjmp().
I am TheRaven on Soylent News
Maybe this is a bigger indictment of most programmers than the books themselves not being influential. Personally I have read all the books apart from the most recent one many times. Any programmer who hasn't read it at least once is a programmer who doesn't care for his craft.
Really? Tanenbaum is pretty specialised - certainly worth reading, but not sure it's in the most influential. The MINIX book is way too heavy on source code and light on general theory, although Modern Operating Systems is a lot better. If you want something with the detail of the MINIX book, read either Amit Singh's OS X book (which also has a lot of detail about processor architecture) or one of Kirk McCusick's BSD books.
The Knuth series teaches algorithms, but does it badly. It's also light on the general theory. If you want to understand the theoretical side, start with Church and Turing, take a side track into Gödel, and then visit Dijkstra. Skip Knuth entirely. If you want something more in the practical side, read some of Alan Kay and Dan Ingalls' papers from PARC.
I am TheRaven on Soylent News
Indeed. When you are the bast hacker of all, but you are not able to understand other people, you cannot bring all your genius on the road. This is like a car (I hate car analogies) with a really fat engine but without wheels. Even though best systems are developed in teams. Therefore people skills are very important. Therefore we had a course in soft skills at university. ;-)
The book was written in 1994 where using google to find the meaning of every single phrase on the planet was not as viable.
Blew my mind away. Any randomly selected page was useful.
"Doing what i can, with what i have." ~ Burt Gummer
Even the 6502 had JSR and RTS.
Not sure why my brain insists on remembering thirty year old stuff like that, and yet I forget where my keys are.
Mod parent up.
The article is about that very StackOverflow poll, and it even links to it in the first sentence. The Slashdot story refers to it: "Since it was first posed back in 2008, this question has now become the second most popular question of all time on StackOverflow." This is not an "Ask Slashdot" story. Did you read past the title?
Algorithms + Data Structures = Programs
http://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189
Slightly more practical than the Knuth books (though replacing MIX with Pascal doesn't increase the opportunities for cut-and-paste coding).
And as an added bonus, no mention of the dreaded words "design pattern" in the entire text.
Well you're just a pure fountain of joy, aren't you?
I'm only a casual programmer - I've been doing it for the last 20+ years, I've used it in my career, there are schools still running on my code, and I've written any tool that I needed and couldn't find a decent utility for elsewhere. I don't consider it a serious pursuit for myself and write more games and one-off utilities than I do serious projects.
Listed in order, this is every physical "programming" book I've ever read in those 20+ years:
- ZX Spectrum BASIC manual
- INPUT series (from Marshal Cavendish)
- O'Reilly Java in a Nutshell (probably 2nd/3rd edition, I can't remember)
- O'Reilly Physics for Game Developers
- OpenGL Superbible, 4th edition
The first one got me programming all on its own. The second helped immensely and allowed me to get a rough grasp of things that I couldn't quite understand at that age. It also taught me how to break the problems down and generate code rather than just showing me how their code worked.
After those, I was writing games, utilities, network management tools, I removed the CD protection on my copies of Desert Strike using only MS DOS debug (but never distributed the code which was already out there anyway), contributing to open-source projects (everything from games to single-floppy-linux-distros), and basically able to write anything I needed given enough time and enthusiasm. Hell, I taught my own sixth-form (Year 12/13) classmates for two years because I understood programming better than my teachers.
Then, YEARS later, I read the Java book (because I was starting uni and they made a Java course compulsory and I just wanted a quick reference and that book was cheap - I never attended those programming lectures for two years after I'd got the hang of Java syntax in the first week, and passed them with flying colours - that was my first introduction to OO, even).
Again, YEARS after graduating, I read the physics one and didn't do a damn thing about it because I thought it was horrible, Windows- and even compiler-specific and physics was the only subject that I ever really "failed" (i.e. did terribly on, or actually failed) despite everyone telling me that I'd be good at it because I was good at maths. I binned it after a single reading - I knew exactly what it was trying to teach me but in terms of actually walking away knowing something, it was worthless.
And this year I read the OpenGL book because I thought I'd finally see what all the fuss was about (gaming for me is 2D - it's what I was brought up on, it's easier to program and do the art, and it's much less demanding and never really goes out of fashion - and I wanted to use OpenGL acceleration on my 2D games). That, admittedly, is one of the best "programming" books that I've ever read except they have a tendency to butcher previous versions for each iteration in order to keep it "up-to-date".
Now, I have a Maths & CS degree, I've run my own business in and worked in IT since graduating. I'm responsible for school systems and quite a bit of my own code makes that possible.
I've been exposed to Knuth, etc. but if you asked me what book I've give my younger-self, it would have to be the first two and the OpenGL one.
To me, learning programming isn't about the memorisation of coroutine techniques, but about the ability to formulate a problem into code and have the computer solve it. I don't think books can really teach that and I only use books, references and guides in order to learn the *syntax* of a language, or to learn about a particular technique (e.g. the matrix-operations that OpenGL performs are a wonderful insight into how something quite removed (conceptually) from computing can be formulated in a way which fits into a computing technique really well).
Until you actually sit and do it on a computer for a project you need yourself, you're just nodding along going "This is cool" with no knowledge of how practical is it to apply to a project (I've seen no end of people start a ten-line utility by writing flow-charts and a
I wouldn't want to use the D & D books to learn a new language on the job and not all of D & D books were great, but when I was in school they made very good TEXTBOOKS. They were academic in scope, taught concepts beyond the language and covered concepts completely. Best of all I could understand them. I couldn't understand K&R's as a raw beginner programmer.
I think for me, it has to be the Commodore 64 Users Manual. Why? Because that's what taught me BASIC, and the phrase in that manual, something like "don't worry, you can't break the computer, unless you're an elephant".
Runner up in close second, a series of kids "detective" adventure type books in which they used little BASIC programs to help them solve the "crime". That taught me to think of the computer as a tool that could help me solve problems, if I just gave it the right instructions.
NZ Electronics Enthusiasts: Check out my Trade Me Listings
The best It book I had (a russian programmer stole it).
Its coverage on bounded non determinacy was inspired for its day.
I don't know about a particular book, but I would ( and have ) push Python on any beginner programmer. The first language learned and the first lessons dictate habits that last a career.
Python is built to teach good habits and it is a practical language at the same time.
C for dummies was the book that my girlfriend taught C from and programming in general. With its friendly writing it helps alleviate the learning curve for a noob programmer. I think it's the book I'd recommend to anyone starting programming - and to me too. Unfortunately, I was born too early for this book, and started programming with ZX Spectrum Basic and assembly language. Which is cool too, but by far not as cool as C :)
The biggest problem with the question posed by this article is that even if I had a time machine and could meet myself when I started programming, I'd have a hard time selling "The C Programming Language" to my 5 year old self. Seriously, most of us started programming as kids, and we did it for fun. Reading long books is no fun, and CS theory is seriously no fun at all.
Personally I started with "Inside ATARI Basic" by Bill Carris. It was a very fun read and was definitely aimed at kids and beginner adults. Unfortunately my walk through the book came to a screeching halt when trying to understand what FOR and NEXT did. The book explained that FOR and NEXT are like the two parts of an Oreo cookie, and the code in between them was like the cream in the middle. Mmmmm, Oreo cookies. Yum! But what does it actually do? No explanation at all. At that point I gave up on BASIC and moved to LOGO. It was only 5 years later that it was explained to me that FOR-NEXT was a loop structure, which is what broke the barriers for me and allowed me to move from BASIC to Assembly, then (much later on) on to Java, C and C++.
But I digress. My main point here is that nobody starts programming by reading Knuth cover to cover and then digging in, and that most of the "must read" and influential books on the subject make no sense to the beginner.
Forever after, groups of writers were only ever willing to assemble up to, and including, three persons _OR_ in groups of five or more. If, at some point, they wished to go from three or less to five or more they would need to do this without stopping at the number four. An atomic operation would be required, unless of course no reference was made to the gang in the time they were four nor do any writing.
very influential programming book...
Donald 'Duck' Dunn: We had a band powerful enough to turn goat piss into gasoline.
Many of these algorithms were at the time being explained for the first time. The Knuth version of the algorithm is extremely important for people writing libraries and still quite influential. As far as MIX and verbose, any assembler is going to be verbose.
Algorithms and Data Structures (1985)
http://www.ethoberon.ethz.ch/WirthPubl/AD.pdf
6502 programming by R. Zaks
Back in the days when C++ was a typo in somebody's mind... ...and still is.
Sort of. There are 3 levels of anti-gotoism
1) Arbitrary jumps. Which in practice are like function calls with no return mechanism. And you are right that stack based has replaced this. A pure plus for everyone.
2) Violations of one entrance / one exit. Things like "last" statement in loops or "if x then return" etc... inside loops. These are still used
3) Complex flow. Things like event driven programming make complex flow more common than it ever way in the goto hayday. I'm not sure there is a choice but...
"Lions' Commentary on UNIX 6th Edition, with Source Code" was the best programming book I've ever read. It's a well explained walk through important and great code. It should be on any great programming book list!
How did this troll get +4 insightful?
There is no book called "Gang of Four".
Some people for some reason refer to the 4 authors of the book Design Patterns as the Gang of Four.
I prefer the refactoring book by martin fowler.
Although mine didn't have exactly the same cover:
http://www.amazon.com/Programming-6502-Rodnay-Zaks/dp/0895880466
A fantastically to-the-point and useful book. In -84, -85.
Or whatever year it was, I don't remember. To me it felt like opening a treasure chest.
Baboons are cute.
No love for Gödel, Escher, Bach yet? All these technical books are fine but I found the beauty of programming in this book.
JSR and JMP aren't interchangeable (atleast not on a 6502). They handle the registers and stack differently. On a typical CPU, you can't do flow control like if/while/switch from higher-level languages without jumping.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
was oh my! Modula-2, words of wit and wisdom for all.
... because suggesting "Introduction to Algorithms" as one you should have read at the beginning of your career, when it is only 2 years old, says a lot on the length of careers the voters have had.
I guess I learned the principles of programming from "Algorithms and Data Structures" by Niklaus Wirth.
I read "The Design and Evolution of C++" by Bjarne Stroustrup later, and buy understanding his design constraints and decissions he made I could forgive him for lot of the shit that I considerd a cluster fuck up in C++.
Most influenced I perhaps was by "Design Patterns. Elements of Reusable Object-Oriented Software" Erich Gamma, Richard Helm, Ralph E. Johnson and John Matthew Vlissides (+ 2005, R.I.P.)
I found it amazing to "name" larger "structures" in programming / design and/or architecture. I basically knew all those patterns because I was involved in oo framework development and research. But having some guys just grabbing them out of existing code, displaying them and giving them a name was very stunning for me.
Also the original edition of that book was excellent printed with sidenotes on the margines and graphical overviews in the inside of the book covers.
I guess I have roughly 50 computer science books ... which reminds me to get: "XUnit Test Patterns" by Gerard Meszaros, see: http://xunitpatterns.com/ This is an excellent book about Software Testing.
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Then you must be happy to hear that the Gang of Four were convicted in the Show Trial Against the Gang of Four for Crimes Against Computer Science, which was held in the OOPSLA (Object-Oriented Programming, Systems, Languages & Applications) conference in 1999. Unfortunately their disciples were not subjected to the same harsh punishments and their heresy continues to spread.
A lot of the books mentioned are fairly specific to C, C++, Java, etc... but I like to get down to the basics of programming logic, application design, and "KISS". Joyce Farrell's Programming Logic and Design does exactly that and forces you to think how you can improve the optimization of your algorithms through careful planning. I can honestly say I have written better code (and documentation) as a result of reading the book and practicing its philosophy. I also think Joyce's Java Programming text was a lot more comprehensible than the Deitel How to Program Java text.
Nuff said
If you already can program Knuth is surely worth reading. But if you are a beginner, then simply don't.
I really would not fancy a guy who is applying for a job and his example code consists of 30 lines where every variable just named with one letter. Even if he points out: oh but that is how Knuth does it ;D
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
"Algorithms + Data Structures = Programs" by Niklaus Wirth.
You seem to fail to graps the difference between an low level assembly JMP instruction and GOTOs in high level languages. Your complete posting makes no sense. Why don't you read the relevant Essay or look at some old Fortran or Basic code to get at least a remote idea about what you are bragging? Hint: http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Well, Knuth would hardly need to supply any example code if he applies for a job, so it kinda makes sense. ~
But if you're disciplined and only use the goto to build structures, you'll have code you can actually maintain.
A Discipline of Programming by E.W. Dijkstra (1976)
Enjoy being useless when you need to work at the bare-metal level.
Awww he thinks assembly is bare-metal. How cute. Although a non-technical person like you would make such a mistake.. so its acceptable I suppose.
The first book that got me thinking deeply about computing, not as a collection of hacks and tricks, but as something to be done properly. It's not a programming manual as such, but it's chock-full of advice-by-example, illustrating some of the really good bits of design in the Beeb, how the various subsystems interacted with each other, how to make best use of extremely limited memory without sacrificing design -- and the value of writing something well, which could allow it to be used in ways you never thought of.
I've read many great books since then, of course -- K&R, Knuth, Sedgewick, Programming Pearls, Effective Java, Programming in Scala, and more -- but the Advanced User Guide has probably had the most influence on me and how I think about computers. It also has the most annotations and other scribblings all over it!
Ceterum censeo subscriptionem esse delendam.
The most important programming book for me was Mapping the Commodore 64 by Shelon Leemon. I learned how a computer really worked under the hood. It made working with pointers later much easier. But most of all, it helped stoke the fire.
--I'm so big, my sig has its own sig.
-- See?
Can you name a reason why GOTO statements are a bad thing? You sound like someone who heard it from their APCS teacher, did not pay attention to the reason why, and now repeats it religiously. "All the other books" must not include compilers textbooks or textbooks on machine architecture.
Palm trees and 8
A useful technique that enables code to be hacked to death and made unmaintainable deserves to lie in its shallow grave.
So do you only program in SKI or BKCW? Just about any useful programming language is going to have features that allow you to hack your code to death...
Palm trees and 8
For me it was Gilman and Rose's A Programming Language. (APL), developed by Dr Kenneth Iverson. He opened my mind to thinking of solutions to problems in a different way. Sadly, APL has dwindled to almost nothing, and is probably only used by Actuaries and some aficionados. Dr Iverson's son and his peers developed J as an alternative. Once you think of the solution by not thinking of the underlying programming language, progress in thinking can be made.
Leslie Satenstein Montreal Quebec Canada
To be fair, I have turned to Knuth for reference on a few occasions when I needed a very detailed explanation of an algorithm and the background and reasoning behind that algorithm. The way I see it, TAOCP is something that should be used as a reference, for those cases where you need a lot of detail.
Palm trees and 8
Personally, I would have to say 6809 Assembly Language Programming by William Barden.
MIX was intentionally problematic to avoid dependencies on platform assumptions that might not be portable
A side-side-project that I want to work on some day is to write a "companion" for TAOCP, which presents the algorithms in Scheme or Haskell (or some similar language). I understand Knuth's point about getting to the machine level and really understanding what the machine is doing, but presenting the algorithms in a high level language would be useful for the vast majority of people who own his books.
Palm trees and 8
You forgot Forth on the Atari.
No one has mentioned the Dragon Book yet?
It might be the Basic manuals that came with the Sinclair ZX81 or the TRS-80 or the Commodore 64
when I was learning c++, i had a copy of stroustrup, and got nowhere with it. Then I printed out the entire c++ FAQ and read it on various bus trips. It actually explains it like an FAQ should. Then I went back to stroustrup and was able to understand it.
I wrote my first program at the age of six, and I still can't work out how this website works.
I thought that was the most influential book in sending people to sleep.
"The Mythical Man-Month" in software engineering.
And "Out of the Crisis" with Deming's 14 Points to quality engineering.
I'm an aerospace engineer converted to software developer. I didn't take software design or software engineering serious the first 4 yrs of my career and only used FORTRAN prior to getting a job writing real-time GN&C flight software in extremely specialized languages that 99% of the world has never heard about. You've seen my work, I'm absolutely positive.
The "Effective C++" and "More Effective C++" programming books actually made a real difference in my programming style.
I've read "The C Language" and lots of other normal C++, Java books. None are very good..
In my first C++ programming class, we used a book by "Terrible" (author). I can't recall the name of the book and gave it away to a friend. I can't find the book online anywhere.
When I finally decided to learn the craft of software design and engineering, I purchased all the Knuth books. Brilliant - for what I read. Also picked up a C++ Algorithms book and lots of UNIX/Linux admin books from DNS, Essential System Administration, and a number of CDROM Bookshelf book/CDROM combos (Perl, Unix, Linux, Web Admin). I still use the Perl one almost daily. These are from O'Reily.
These days, I'm reading "Modern Perl" so I'm ready when Perl6 is production ready. Perl doesn't look like C code anymore. It is extremely OO.
Concepts, Techniques, and Models of Computer Programming. They call it the new SICP book. I only read the first 50 pages, but it's quite intresting read. It covers parallel programming, constraint programming, and old lispy topics as well, like program transformation.
http://www.amazon.com/Concepts-Techniques-Models-Computer-Programming/dp/0262220695
For me the most influential books at the beginning of my path were the Philips VG-8000 manuals.
Which came along with the VG-8000 I received as a gift from my father of course.
All the rest was important and useful (The Art of Computer Programming etc), but those are things I got afterwards, when I was well on my path already.
Most influential for me? The MSX Basic version 1.0 Programming manual.
I have nothing against the 2nd ed. K&R, it's just that only the 1st ed. was available in the early 80's. It was the best programming book I had read at the time. Both books are great in that they are small.
Programming the Z80 and Programming the 6502 (both from Zaks) are probably the best assembly language programming books I have read because they focus on processor internals and how computers work. Understanding assembly can make you a better C coder. And who doesn't love inline assembly? :-)
Hacker's Delight is a great read. You can perform a lot of magic by shifting bits around. This book is often cited as the "lost TAOCS book".
I prefer Concrete Mathematics over TAOCS as far as Knuth books go.
Published in 1984 The UNIX Programming Environment by Brian W. Kernighan and Rob Pike - http://en.wikipedia.org/wiki/The_Unix_Programming_Environment . The book remains interesting, useful and relevant even now after more than 27 years. It remains a 'must read' for anyone who uses UNIX like systems. Compare this with most of the 'Programming Books' now, which goes out of date within a few months after publishing.
For instance I am not really an old database program or an Aston Martin car.
Prove it!
jesus thats fucked
Back in the day, I found Illustrating Pascal, ISBN 0/521/33695/3 by D.Alcock to be very useful. ref: http://www.amazon.co.uk/gp/reader/0521336953/ref=sib_dp_pt#reader-link It helped me make the jump from programming as a hobby, in various forms of BASIC, to proper programming languages.
Ever tried to maintain that assembly code? That's why jmp/goto is bad.
"Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
Well many things in it go over my head, but I have used it for random number generator related work, and sorting and searching was also helpful. I certainly didn't go through it while trying to do every exercise.
Je me souviens.
"Classic: a book which people praise, but don't read." - Mark Twain
I guess he meant it with regards to classic literature. It seems extendable to classics in other art fields, and classics in technical fields too I suppose
We never read classics, because they're already available in video.
My sincerest apologies for my grievous error.
The author's surname is Carnegie
There, feel better now?
Words to men, as air to birds.
Doug was in my Chinese-1 class at Stanford in 1976. I think he was chilling out at his Stanford Prof Dad's house after just finishing his physics PhD and working on his book. I think Doug was exploring the Whorf-Sapir-Heinlein hypothesis that language influences how you think. Chinese was the most radically different language from English you could readily study at the time. I was interested in Chinese philosophical classics in the original (a level I never reached).
Anyways, Doug gave me this clever little vignettes he was writing that reminded me of the mathematical puzzles in Scientific America because I was one of the few techies in the Chinese class. I never guess these would win the Pulizer non-fiction prize and become a computer classic.
Ken suggested that small, bottom up skunkworks are more productive than massive managed software projects. This certainly changed how we did things over a decade ago. The compromise between the two methodolgies is Agile.
Or a programmer that writes software, not algorithms.
I don't care which sort routine is most optimal. I merely need a 'good enough' one that I can pull out of the standard language libraries and use.
Let the computer scientists model, design and provide reference implementations for new algorithms. The rest of us will turn them into useful software.
Maybe if you work at Google, or a market trading company, or one of those other roles that comprises a thousandth of one percent of programming jobs where that shit actually matters then it's useful. The rest of us just need to know when to use an array in preference to a linked list and focus instead on functionality, interface and the several hundred constraints we're dealing with that are more important than a marginal improvement in efficiency.
That's why I can't take the Agile Manifesto seriously. Any group that thinks a semantical term used and misued by many a fanatical political grouping (see where I'm going here) as a substitue for reasoned and nuanced thinking (there is no silver bullet) deserves serious scorn and derision.
A "manifesto" is when a number of people think alike, condense their thinking into a short text and publish it hoping to swing even more people. What's wrong with that, exactly: thinking alike, writing it down, or telling people about it?
For me, the most influential resources were:
Carter, An Introduction to Computer Science Using Java
King, C Programming: A Modern Approach
CLRS, Introduction to Algorithms
Hall, Beej's Guide to Network Programming
Wall, Programming Perl
Raymond, How To Become A Hacker
http://www.w3schools.com/
No, that doesn't follow. There are uncountable other ways to make code unmaintainable.
I haven't seen this mentioned so... Clean Code.
and he has a new one thats probably worth reading... The Clean Coder.
Not a book, but a must read for anyone working with computers.
GOOGLE
Reprinted from columns in Communications of the ACM by Jon Bentley.
"Almost every wise saying has an opposite one, no less wise, to balance it." - George Santayana
The Joy of C, 3rd Edition by Lawrence H. Miller and Alexander E. Quilici (Jan 16, 1997)
most fixed gear cycling is hipsters who are following a fashion trend. the courier profession is dying, and track competitions are highly specialized racing events that used 'fixed gear' because of their arcane rule system (which also, by the way, bans recumbents).
yup. just about like TeX users.
The Fortran Coloring Book, with the program listings in Creative Computing and 101 Basic Games tied for a close second...
Ken
This was the one.
As a student I learnt C using K&R's classic in 1989, the year after it came out. Then later in a job, I used Deitel and Deitel to pick up both C++ and Java ... great books, but K&R and D & D are totally different in approach.
I get your point and I largely agree with it, but perhaps you should take a closer look at the code listing in Knuth's books...
That's abstraction over language though; the things in Knuth's books are often directly usable in modern applications just translating into the language you have to work with, adjusting implementation as suits the language you are working with.
A good operating system book might have some nice bits on schedulers or managing concurrency in applications or filesystems, but very little of that is going to be very useful in most modern application development.
Not to say OS classes are not valuable and I think everyone seriously interested in CS should work through one of those books, I just think it should be after you have the fundamentals of algorithms down. Then you can even better appreciate what is going on in the OS books.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
....I only just got the freaking pun in the title. Just now. September 2011.
Lord help me!
Do daemons dream of electric sleep()?
You've probably never heard of this book, but when you move from code monkey to engineer/architect you must read this book, http://en.wikipedia.org/wiki/A_Pattern_Language. The other one you should read is the Toyoda Way http://en.wikipedia.org/wiki/The_Toyota_Way
Better hope your manager doesn't read Slashdot. She'll be asking herself, "what use have I got for someone who takes weeks to realise he needs to use his editor's 'show white space characters' command when dealing with a white space sensitive language?"
A manifesto is ultimately an opinion or philosophy, not a fact of life or immutable physical laws. My objections don't lie with the intent but rather the substitution of logic with belief. All religious creeds begin with a "manifesto" establishing common belief systems. I think Agile is another form of belief, not backed up by much more than anecdotes.
by Robert C Martin. Its got nuggets of gold in every chapter and covers a whole gammut of topics.
I know its language specific, but the way the book was written and structured made learning a new (and challenging) language easy for me ... really inspired writing.
Not that I'd vote for one, but just a bit surprised considering the silver bullet it was meant to be for software engineering in general.
There is a Scheme compiler called "Stalin". It has also been subject of similar criticism from some sensitive fellows. Whatever - it's not like it was the compiler that killed their grandparents.
Kernighan and Plaugher wrote "Software Tools" to assert that small, capable, tightly focused programs could be hooked together to accomplish large tasks. Unix/Linux organization is a prime example of this approach.
Ideas like deriving code from specifications, developing proof outlines and code in tandem, and just generally more rigorously thinking about code and why it works.
- "History shows again and again how nature points out the folly of men" -- Blue Oyster Cult, 'Godzilla'
For something more contemporary, I'd recommend anyone read Martin Fowler's "Refactoring: Improving the design of existing code". A great perspective on mitigating risk when introducing changes into new, often complex and/or unfamiliar, systems.
Since my manager just spent a week fixing a build script bug that ended up being this problem, he'd not only agree with me but he'd probably be more vehement.
So lets see, that's now the 5th work around I'm supposed to be using, all because of a idiotic design decision in the language. Or I can just use languages that don't do stupid shit like this. Decisions decisions.
I still have more fans than freaks. WTF is wrong with you people?
Well written, concise and substantive programming books are few and far between...
I agree with the selection of "Design Patterns: Elements of Reusable Object-Oriented Software" but if you are going to mention this book, then you really have to go to the source of it all that influenced computer science significantly towards modular and object-oriented design:
"Notes on the Synthesis of Form" by Christopher Alexander
http://www.amazon.com/Notes-Synthesis-Form-Harvard-Paperbacks/dp/0674627512
and then the following which influenced computer science greatly towards using design patterns and reusable code:
"A Pattern Language: Towns, Buildings, Construction" by Christopher Alexander
http://www.amazon.com/Pattern-Language-Buildings-Construction-Environmental/dp/0195019199
Lets stop producing programmers that are educated and trained first to be hacks...and produce programmers that early on understand their profession is grounded first on design.
One other thing, you can't mention Design Patterns unless you also accompany it with the idea of, and some source of AntiPatterns.
Amiga Hardware Reference Manual: knowing how your program operates in physical reality will change your perception of how your code should best be structured. It will also open your mind to multiple processes running on multiple devices whilst sharing resources efficiently such as to allow real-time performance.
Leela: "Is all the work done by children?" Alien: "No, not the whipping."
How many of us got a start with "Basic Computer Games" by David H. Ahl?
Without that, I bet many would not be posting here.
--- If it's worth doing, it's worth doing in Perl!
There was a number of books outside the top 10 that have been mentioned in the comments here, note that the original article has been updated to include the books placed in spots 11 through to 30... http://www.internetsecuritydb.com/2011/09/top-ten-most-influential-programming.html
Yeah agree with your view on Design Patterns ... there was a stage several years ago when if you went to an interview you were almost guaranteed to get a question on design patterns ... and if you didn't know anything about them, then sorry, better luck next time ... it was as if to be considered a good developer you must able to memorize a few design patterns, which may or not be of any use in real projects you encountered anyway.