Ask Slashdot: What Should Every Programmer Read?
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."
It's rather out of date but "The Joy of C" was my first programming book and I attest its style to easing me in to the development mindset.
For example, here; http://www.catb.org/jargon/htm...
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.
Je ne parle pas francais.
Everybody should RTFM.
Dear aunt, let's set so double the killer delete select all
An arbitrarily long strip of tape, divided into sections on which there appear symbols drawn from some finite alphabet. They should be able to work the rest out from that.
Code Complete is the #1 thing every programmer should read.
...you don't get to call yourself a "software engineer" or talk about others' software engineering practices.
"My life's work has been to prompt others... and be forgotten." --Cyrano de Bergerac
http://git-scm.com/documentati...
They're there for a reason.
The C Programming Language, so they learn how to properly document their work.
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.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
http://www.joelonsoftware.com/articles/Unicode.html
Dilbert.
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.
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...
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
code.
"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
Oliver's law of assumed responsibility: If you're seen fixing it, you will be blamed for breaking it.
Code. Lots and lots of code. Code from diverse sources, understanding the problems, understanding the solutions. Programming books/articles offer nice ideas, philosophies, anecdotes, whatever, but nothing will improve programming skill more than experience. Reading code, IMO, and at least for me, increases that experience much more than writing it or reading the meta about programming.
while(1) attack(People.Sandy);
The Psychology of Computer Programming, by Weinberg. Its from 1971 but still relevant. It tackles the management aspect of working in a team, how to handle difficult people etc. Clean Code, a great book for those interested in adopting a better coding style. Are your routines longer than 5 lines? Wrestling With Bears , goes into details about how to mitigate risk, evaluate and prioritize requirements and keep your projects on track. Test Driven iOS Development. Cocoa Design Patterns (if your an iOS developer); it really helps to understand what is happening under the hood of the API. Software Engineering by Ian Sommerville, for those interested in design, architecture and large systems. Its a rather long and very traditional (not agile friendly), but its comprehensive and good. Someone already mentioned K&R, I'd add C++ by Bjarne Stroustrump. Agile and Iterative Development: A Manager's Guide. Its not really a "managers guide", but more of a "How can I be a good team player" with an introduction on XP/UP and Scrum kind of a guide. Highly recommented.
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.
Play it cool, play it cool, 50-50 fire and ice.
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 roulette wheel, spin it, then type the language it falls on followed by "tutorial" into google and start following directions.
"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.
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 solving is the goal.
Then I suggest every programmer read every single one of the posts on this site: http://prog21.dadgum.com/ . The author has a remarkably clear head about things and a very mature outlook on programming.
A fool and his hard drive are soon parted.
"How to not fuck up"
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'.
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.
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.
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
Spoiler, everybody dies
After a year i go back and realize what a horrible programmer i am. It happens every year. But i'm getting better. I also spend a lot of time reading other people's code. I've found that if you are writing "new" code you haven't already seen in action, you just might wind up killing somone someday.
http://www.joelonsoftware.com/...
Things you think are in the Constitution, but are not.
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.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
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.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
... 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.
Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
Mostly so if you ever go into management you'll have a clue, unlike the vast majority of managers. (Unfortunately after reading it you see just how much stupid stuff management does.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
//it is okay if x overflows
x++;
or
x++;
Applied Cryptography by Bruce Schneier. Really any and all of his books.
+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.
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 pragmatic programmer and code complete
MouseClass extends ScrollClass, which extends TabClass, which extends SidebarClass, which extends PowerClass, w
"Politics and the English Language", George Orwell.
Mod this up!:
https://www.mtholyoke.edu/acad...
"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 your mind open and letting the ready-made phrases come crowding in. They will construct your sentences for you -- even think your thoughts for you, to a certain extent -- and at need they will perform the important service of partially concealing your meaning even from yourself. It is at this point that the special connection between politics and the debasement of language becomes clear."
His parody of a 'translation' of Ecclesiastes 9:11 into pretentious and imprecise modern jargon is priceless:
"Now that I have made this catalogue of swindles and perversions, let me give another example of the kind of writing that they lead to. This time it must of its nature be an imaginary one. I am going to translate a passage of good English into modern English of the worst sort. Here is a well-known verse from Ecclesiastes:
I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all.
Here it is in modern English:
Objective considerations of contemporary phenomena compel the conclusion that success or failure in competitive activities exhibits no tendency to be commensurate with innate capacity, but that a considerable element of the unpredictable must invariably be taken into account."
If you are doing C++, you absolutely must read the Frequently Questioned Answers:
"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.
Obviously I am going to be modded down, but hey. Truth is truth.
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.
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.