Ask Slashdot: What Should Every Programmer Read? 352
An anonymous reader writes "There's a blog post floating around right now listing articles every programmer should read. I'm curious what articles, books, etc., Slashdot readers would add to this list. Should The Art of Computer Programming, Design Patterns, or Structure and Interpretation
of Computer Programs be on the list? What about The Mythical Man-Month, or similar works that are about concepts relating to programming? Is there any code that every programmer should take a look at? Obviously, the nature of this question precludes articles about the nitty-gritty of particular languages, but I'm sure a lot of people would be interested in those, too. So if you can think of a few articles that every C++ programmer (or Perl, or Haskell, or whatever) should know, post those too."
The Joy of C (Score:4, Insightful)
The Fortran Coloring Book (Score:4, Interesting)
I wish I'd read Roger Kaufman's book before I started programming. It would've helped a lot.
Here's a few pages to get a taste of the style: http://www.cs.utsa.edu/~wagner... [utsa.edu]
Re: (Score:2)
Re:The Joy of C (Score:4, Funny)
The story of Mel (Score:5, Interesting)
For example, here; http://www.catb.org/jargon/htm... [catb.org]
Books to read (Score:5, Informative)
Clean Code by Robert C. Martin, Working Effectively with legacy code by Michael C. Feathers, Refactoring by Fowler, Design Patterns by the gang of four. If you are a C++ programmer, anything by Sutter or Meyers.
Re: (Score:2)
Re: (Score:2)
Design Patterns by the gang of four.
Beat me to it! I second this...
Re:Books to read (Score:5, Insightful)
The problem with that book is that too many people read it the wrong way. Instead of using it as a language to describe design, they attempt to find ways to force their code into patterns or to add patterns because they think they should use them. The result is worse code than if they had never read it. This is especially true of those who read the book before they've seen enough code to understand design. It should be read, but only at the proper time and in the proper way.
Re: (Score:3)
Re: (Score:3)
I can't recommend reading it. That would be unethical.
However, it is useful for leveling furniture and is an excellent source of kindling. So I guess it's not all bad.
Re: (Score:3)
Excellent suggestions all. I would add:
1) "Software Failure: Management Failure" by Stephen Flowers (somewhat dated, but an excellent collection of case studies of failed projects... technologies change but the lessons learned remain relevant.)
2) "Rapid Development" by Myers. The chapter on estimation alone is worth the price.
Re: (Score:2)
Also if you are a C++ program, the original K&R C book is a good read of how to keep things simple.
Both
Re: (Score:3)
If you're doing C++ everything by Meyers.
C++ FQA (and ignore the downmods) (Score:3, Informative)
If you are doing C++, you absolutely must read the Frequently Questioned Answers [yosefk.com]:
"C++ is a general-purpose programming language, not necessarily suitable for your special purpose."
It's a little (though not much) out of date, as it does not cover C++11. But the author has some comments on it, too [yosefk.com].
Obviously I am going to be modded down, but hey. Truth is truth.
TFM (Score:5, Funny)
Everybody should RTFM.
True Names... and Other Dangers. (Score:2)
No list is complete without Vernor Vinge's _True Names... and Other Dangers_. I don't care if it's a book, instead of an article, but still, it's required reading.
"How to Write a WINNING Resume" (Score:2)
Obviously... (Score:5, Funny)
Re:Obviously... (Score:5, Funny)
They should be able to work the rest out from that.
Actually, you can't make such a generalized determination. Surely some of them will halt.
Re: (Score:3)
They should be able to work the rest out from that.
Actually, you can't make such a generalized determination. Surely some of them will halt.
The ones that halt, you fire or reassign to the help desk. The number of halting systems tends to drop at that point. It's one of the poorly understood aspects of computability theory; but the empirical evidence is compelling.
Code Complete (Score:4, Informative)
Code Complete is the #1 thing every programmer should read.
Re: (Score:2)
Never read it, and decided to better stay away after perusing reviews.
Re: (Score:2, Informative)
Code Complete 2nd Edition is the holy grail of programming books. Required reading for serious professionals.
If you haven't read The Myythical Man-Month... (Score:5, Insightful)
...you don't get to call yourself a "software engineer" or talk about others' software engineering practices.
Re:If you haven't read The Myythical Man-Month... (Score:5, Informative)
Nonsense. The Mythical Man-Month is mostly about team-building, project management and a bit about software architecture. It has almost no software engineering content. Sure, it is a highly valuable source, but not a software-engineering one.
In other words... (Score:5, Insightful)
Nonsense. The Mythical Man-Month is mostly about team-building, project management and a bit about software architecture
In other words the mix of work for a programmer of every company I have been at.
You think you came to write code? Ha Ha! Let me acquaint you with Mr Process.
Re:If you haven't read The Myythical Man-Month... (Score:4, Interesting)
No need. The "Mythical Man Month" is merely a series of special cases of the law of diminishing returns and/or The Planning Fallacy. [wikipedia.org]
It's much more efficient to say: "Too many chiefs and not enough braves is bad, and it will always take longer than expected."
Re: (Score:3)
...you don't get to call yourself a "software engineer" or talk about others' software engineering practices.
Excellent book, but the software engineer who is just writing code doesn't need it, in fact they might not want to if they don't have good managers. Now if you MANAGE a project or other software engineers, THEN you should read this book every few years.
Re: (Score:2)
If you you do is write code, then you aren't a Software Engineer, you are a Programmer. An engineer is involved in requirements, specifications, design, and testing. On a good team, the experienced Software Engineers should also be consulted for process improvement, QA, and DevOps.
Re: (Score:2)
Can we stop using the term "engineer"? It's not only meaningless, it does a serious disservice to actual engineers.
Re: (Score:2, Insightful)
Yeah, it's the Bible of software engineering: everyone quotes it, but no one has read it.
git docs (Score:3)
Other Programmers Comments (Score:3, Insightful)
They're there for a reason.
no, the ones like (Score:3)
//it is okay if x overflows
x++;
or
x++;
Re: (Score:3)
First comment is still a little vague. Why is it ok to let it overflow?
Second one is a good comment.
K&R (Score:4, Insightful)
The C Programming Language, so they learn how to properly document their work.
Re: (Score:2)
K&R was an excellent introduction (short, expensive, valuable). However, I think I learned more about the why of C from reading Harbison & Steele, "C, A Reference Manual". It was a book for compiler implementers and programmers, and went into some of the design decisions, which really helped my comprehension.
There are no things every programmer should read (Score:4, Insightful)
Paradigms, styles, approaches are different. There is no "central" body of things that can capture this. Even absolute classics like "Goto considered harmful" can be misleading and counter-productive to read unless the reader can supply the right context. That said, every programmer should always work to understand his or her craft better and broaden their view. That includes reading about insights other people have had into the process.
Re: (Score:2)
But how do they get "the right context" without knowing what to read?
Re: (Score:3)
Even absolute classics like "Goto considered harmful" can be misleading
Only thing worse than GOTO statement is COMEFROM statement. Event driven programming is basically COMEFROM functions.
Re: (Score:2)
I'll second C2, and offer an additional recommendation: dig deep.
Text Encoding (Score:2, Informative)
http://www.joelonsoftware.com/articles/Unicode.html
Everything (Score:2)
(Quick scan to make sure that this is clean... well, good enough...)
Dilbert. (Score:4, Insightful)
Dilbert.
Re: (Score:2)
Dilbert.
http://www.dilbert.com/
That was my first idea too..
Two unexpected computer science books (Score:4, Insightful)
I'm gazing across my bookshelf full of O Reilly books, Knuth's series, TCP/IP Illustrated, and others... but the most important books are more mundane:
Godel Escher Bach: an Eternal Golden Braid, and Alice in Wonderland
Both of these books encompass the thinking and mindset which will make you a better programmer by planting the seed of logic, states, and recursion, and nourishing the hell out of it. It will massage the pathways to make someone actually want to be a programmer.
Re: (Score:2)
You can certainly find better books to help you learn a particular programming language. You can find better books about the history of programming. You can find better books on algorithmics that will make you a better programmer overall. You can even find better writing (although the skill that went into some chapters - "Crab Canon" in particular - simply blow me away), if you just want a good read overall.
But if you don't read GEB and fall in love - you need to find a dif
It's simple (Score:4, Insightful)
code.
I thought we already knew the answer (Score:4, Insightful)
"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."
- Alan Perlis, "Epigrams on Programming", ACM SIGPLAN Notices 17 (9), September 1982, pp. 7–13
Answer to title (Score:4, Insightful)
Books Ive recently read (Score:2)
A couple of classics (Score:2)
That's a good list of subject areas, and articles for technical areas, but if you're going to be an effective programmer, you need to venture out a bit. There are a couple of good books by Gerald Weinberg that will change the way you look at your profession. First is The Psychology of Computer Programming. It's a bit long in the tooth, but the lessons are still relevant. Same goes for Quality Software Management, Volume 1. Be warned, QSM, in particular, will make you dissatisfied with your managers.
Watership Down (Score:2)
You gotta disconnect from the tech every once in a while.
Re: (Score:2)
You gotta disconnect from the tech every once in a while.
Yikes, How does reading about a litter of talking rabbits help you with that? Do they have a kindle version?
How to Break Web Software: Functional and Security (Score:2)
Dale Carnegie (Score:4, Insightful)
"How to Win Friends and Influence People". Not for the advice; as a geek type you'll likely never be able to pull it off anyway. But in the spirit of knowing thy enemy; when the sales and marketing and pointy-haired businessmen try to manipulate you, you'll recognize the techniques and be able to put a source to them.
Re: (Score:3, Insightful)
You have entirely missed the point of the book. It is not about manipulation. It's about being genuine and being persuasive. They are different things.
I definitely agree that it is good to know when and how someone is trying to persuade you something, and it's a very valuable skill to increase your communication skills.
"as a geek type you'll likely never be able to pull it off anyway"
Resigning yourself to having
The Design of Everyday Things (Score:2)
I see some good suggestions on how to code well but it's important to know how to produce human interfaces that are understandable, effective and even fun.
For that, my favorite book is "The Design of Everyday Things." It's not about software design, it let's you see effective (and bad!) design all around you and will make you think about your own designs. The affordances, or clues, you provide on how things work without having to spell it out in documentation.
Good programming is just the start. Good problem
If this is about articles, (Score:3)
Then I suggest every programmer read every single one of the posts on this site: http://prog21.dadgum.com/ [dadgum.com] . The author has a remarkably clear head about things and a very mature outlook on programming.
Something with this title (Score:3)
It hasn't been written yet, but it needs to be written.
There are many that say 'how to do x'. But few/none that say 'How to not fuck up'.
Chip spec, Op Codes, Compiler Impl. At least once. (Score:2)
I'll just leave this free and open source CS101 course here: NAND to Tetris. [nand2tetris.org]
Strunk & White: The Elements of Style (Score:5, Interesting)
The best preparation for becoming a good programmer (or scientist or engineer) is to learn how to organize your thoughts and then address only what is necessary and sufficient to accomplish a given task.
I know no book that teaches clarity of thought better than Strunk & White's "The Elements of Style". Clear writing and great coding share a common wellspring.
Re: (Score:2)
I totally agree, just a great book all around.
Re: (Score:3)
Strunk & White were "grammatical incompetents," [chronicle.com] and The Elements of Style is considered by linguists to be a pretty awful book.
Code Complete by Steve McConnell (Score:5, Informative)
My boss gave me this book when I started by my first job out of college. By far one of the best books on software development and construction out there. It is timeless and even though I no longer write code for a living, I refer back to it on many occasions still. You want a book to make a you a better programmer; you can't go wrong here.
"Code Complete" by Steve McConnell (Score:3, Informative)
Whereas other programming books are filled with conjecture and opinion ("I think this" or "I think that"), Steve McConnell went out and did the hard work of researching what actually works, then providing actual citations for everything he found. Following the guidelines and tactics in this book is like adding 10 years of experience to your programming skills. This book is a masterpiece in the field of programming.
http://www.amazon.ca/Code-Complete-Steve-McConnell/dp/0735619670
A Game of Thrones (Score:3, Funny)
Re: (Score:2)
Spoiler, everybody dies
Including the reader... Or at least you wish you where dead for wasting all that time...
How about reading your code? (Score:5, Insightful)
Going by some of the software out there (Score:2)
Re: (Score:2)
Here, here.
Know who writes bad code? Everybody.
Nothing is more instructive than a review of your own old work.
Re: (Score:2)
Nothing! (Score:2)
Re: (Score:2)
Worse. Advice. Ever.
Hey, you don't need to learn about class, or environment, or understand memory to be a programmer! Just use VB.
That the same mentality, stop it.
Why you think OS = Good programming; is beyond me.
Re: (Score:2)
Law of Leaky Abstractions (Score:3)
http://www.joelonsoftware.com/... [joelonsoftware.com]
These book are CRITICAL for your career (Score:2, Insightful)
7 habits of highly effective people.
Never Eat alone
EMotional Intellegence 2.0
The Five Dysfunctions of a Team
What, were you thinking of programming books? bah, mostly worhtless for your career.
Understanding people? that is how you make it.
I used to be all about the programming books. I write solid, clean code. I use small methods, functions., etc. I wrote some really good code, did some amazing things with very limited memory.
None of that gets you dick in the long run.
Career and business wise, understanding
Mark Twain's Rules of Literary Art (Score:2)
Re: (Score:2)
The Cathedral and the Bazaar by Raymond (Score:2)
There is a wikipedia entry about it, in case you have interest:
http://en.wikipedia.org/wiki/T... [wikipedia.org]
Books every programmer should read (Score:2)
#define BOOKS_EVERY_PROGRAMMER_SHOULD_READ_H
"The TAO of Programming", "Back to Basics: A Complete Guide to Traditional Skills - Abigail R. Gehring", "Paper: Bitcoin: A Peer-to-Peer Electronic Cash System - Satoshi Nakamoto",
"Murach's Mainframe COBOL - Mike Murach, Anne Prince and Raul Menendez", "Cosmos - Carl Sagan", "The Persian Expedition - Xenophon",
"Democracy in America - Alexis de Tocqueville", "Crucial Confrontations: Tools for talking about broken pr
I highly recommend... (Score:3)
... my upcoming book, "Quit Fucking Up Perfectly Good Software with Overly-'Designed', Non-User-Tested Bullshit, I'm Looking at You, Apple Mozilla Google Microsoft Adobe Slashdot and Certain People at My Company Who Shall Remain Nameless", in stores this fall.
So far it's just the cover and then 168 pages of the title being repeated but I think I'll get it wrapped up pretty soon.
Notes on Programming in C by Rob Pike (Score:2)
Names and unicode (Score:2)
Anyone developing software needs a clue about names, and about unicode and text encodings.
http://www.kalzumeus.com/2010/... [kalzumeus.com]
http://www.joelonsoftware.com/... [joelonsoftware.com]
(Then learn lots, lots more about text encodings).
Also, whether or not they use SQL directly, about metacharacter attacks and SQL injection:
http://bobby-tables.com/ [bobby-tables.com]
http://watchguard.com/infocent... [watchguard.com]
Peopleware: Productive Projects and Teams (Score:4, Insightful)
"A lot" (Score:2)
The correct answer to this question is "A programmer should read a lot".
Applied Cryptography by Bruce Schneier (Score:3, Insightful)
Applied Cryptography by Bruce Schneier. Really any and all of his books.
C Programming Language, by K&R (Score:2)
+1 for, The C Programming Language, by K&R
(Brian W. Kernighan, Dennis M. Ritchie)
Because if you have never programmed in C (or assembler) then you really don't know how a computer works.
Lists and links of top Programming Books (Score:4, Informative)
This is one of those questions that's going to keep being asked... Perhaps one day I'll be fast enough to get a first post on this that people actually read...
Link summary from last time:
General comments
I've noticed which book answers tend to fall a bunch of categories:
If you're going to ask someone "which book?" try limit the categories they should give you an answer for...
The Most Important Book! (Score:2, Flamebait)
Zen and the Art of Motorcycle Maintenance
The Programmers Stone (Score:2)
If you don't read it, you don't get it.
Try (Score:4, Informative)
Re: (Score:2, Insightful)
I'm sure I'm not alone. This type of "article" seems to come up every other week.
What is a good read about programming?
If I want to get into programming, which language should I start with?
If I want to get my child into programming, where should I start?
Should schools push teaching programming?
Can I get a programming job with two semesters of classes done?
I've programmed for my whole life, can I learn a new language?
Isn't the rule of thumb for answers to headline questions to be "No"?
Seriously. Make a roule
Re: (Score:2)
eh, they're not that hard to read. doing all of the problems would be another story (especially the ones that are open research questions... :-/), but for the content the presentation is amazingly straightforward (this is the real accomplishment of Knuth). i casually read vol. 1 and did ~25% of the problems one summer with a friend.
that linked story is hilarious, though.
Re: (Score:2)
Excellent recommendation. Also a good life manual. Keep life simple.
Re: (Score:2)
Yuck. GoF crap. Even the title contains nonsense "Reusable Object-Oriented Software" What a joke!
Re: (Score:3)
"Politics and the English Language", George Orwell.
Mod this up!:
https://www.mtholyoke.edu/acad... [mtholyoke.edu]
"A scrupulous writer, in every sentence that he writes, will ask himself at least four questions, thus: 1. What am I trying to say? 2. What words will express it? 3. What image or idiom will make it clearer? 4. Is this image fresh enough to have an effect? And he will probably ask himself two more: 1. Could I put it more shortly? 2. Have I said anything that is avoidably ugly? But you are not obliged to go to all this trouble. You can shirk it by simply throwing
Re: (Score:3)
As programmers need to have clear analytical thought, they'd be much better off reading The Blind Watchmaker or The God Delusion than The Bible.
Re: (Score:3)
I think you're mistaken about what the Bible means by "faith". It is not belief contrary to overwhelming or clear evidence. It's the willingness to take a risk that something is true, in cases where the evidence is ambiguous or mixed.
Garden of eden? Noah's Ark with at least 2 examples of every land species? Bringing a dead person back to life? There's no ambiguous or mixed evidence. If you believe this stuff, it's blind faith. And it's the opposite of analytical thinking.
I'm not aware of anywhere in the Bible where irrationality is endorsed.
I think it's telling that I'm talking about analytical thinking, and you keep responding as if I said rationality.
Anyhow, this off-topic thread is going nowhere.