Ask Slashdot: What Books Should An Aspiring Coder Read?
Earlier this month Bill Gates released his summer reading list, which included Seveneves, by Neal Stephenson and mathematician Jordan Ellenberg's book How Not to be Wrong. Now an anonymous Slashdot reader asks for your book recommendations.
I've been trying to learn more about coding, but I need a break sometimes from technical documentation and O'Reilly books. Are there any good books that can provide some good general context and maybe teach me about our place in the history of technology or the state of the programming profession today?
In the U.S., Memorial Day is considered the "unofficial" first weekend of summer -- so what should be on this geek's summer reading list? Cracking the Coding Interview? Godel, Escher, Bach? This year's Nebula award winners? George Takei's The Internet Strikes Back? Leave your suggestions in the comments. What books should an aspiring coder be reading?
In the U.S., Memorial Day is considered the "unofficial" first weekend of summer -- so what should be on this geek's summer reading list? Cracking the Coding Interview? Godel, Escher, Bach? This year's Nebula award winners? George Takei's The Internet Strikes Back? Leave your suggestions in the comments. What books should an aspiring coder be reading?
Whatever he damn well pleases.
What is the single most influential book every programmer should read?
"They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety."
Read your chemistry textbook, especially the chapter on thermodynamics. Knowledge of real things... an arcane skill these days.
Blast from the past? Today we read online docs and stackoverflow.
When all you have is a hammer, every problem starts to look like a thumb.
Sounds more like a mental illness.
Maybe. A lucrative one that develops your mental muscles.
When all you have is a hammer, every problem starts to look like a thumb.
Why? People obsessing over soap opera relationship drama are too busy thinking of ways to manipulate the meat market to think about anything requiring rational thought.
https://www.edx.org/ Not a book, but good resources for learning.
Unix Power Tools is from O'Reilly but, it's not really a traditional book. It's more like 1000 pages of super useful Unix anecdotes. When I've worked at companies that had interns, I've always bought a copy for them and dropped it on their desk. I would consider it required reading for anyone working on Unix/Linux machines.
Jonnie Goodboy Tyler is the engineers hero. With his bare hands, ingenuity and scraps of knowledge, he takes down a power empire. Great read.
Read a book about something else, and find a career that doesn't suck. Software sucks. It may take you a few years to realize it, but eventually you will discover the truth.
The Mythical Man Month - Frederick P. Brooks, Jr.
Death March (2nd Edition) - Edward Yourdon
Snowcrash.
In the free world the media isn't government run; the government is media run.
Amazon Link: http://www.amazon.com/Dreaming...
It's an old book (first published in 2008 with mixed popularity), but 8 years later I remember it being a nice story on "what it's like to code" and accurately described the state of software engineering of its time. This was before Big Data was a thing, so you may find a lot of it out of date, but I think it fits what you're looking for.
Good luck!
Dianetics by L Ron Hubbard is a great read. Especially if you like tragic comedies.
"To Engineer Is Human: The Role of Failure in Successful Design" by Henry Petrosky http://www.amazon.com/Engineer...
We learn much more from failure.
"The Design of Design, Essays from a Computer Scientist" by Frederick Brooks http://www.amazon.com/Design-E...
This isn't as well known or quite as easy to read as "Mythical Man-Month."
Both of these books should take you outside of 'pure coding' into thinking about the systems the code is part of, and how those systems interact with humans and with other systems.
So what? It's his first project. If he can't bring a toy project to 'completion', coding is not for him. The sooner he learns that, the better.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
I tend to agree about GEB despite the praise it gets. I also found it pretentious as well as being pedantic and excessively verbose. I've made several attempts to read it, but just can't will myself past the first few chapters. That being said, there's clearly a large audience it appeals to. Maybe check it out from the library and save yourself some cash (I regret buying it).
Donald Trump: 'Think Big and Kick Ass in Business and Life'. To understand the 'thinking' behind the nightmarish dystopia you might be coding in for the next five years.
UNIX Power Tools by O'Reilly is a great treatise on programming in general because it does concepts such as loops, conditionals, environment, I/O, formatting, etc etc.... all via shell scripting, no "hardcore" compiled languages. Just 1056 pages of the concepts of programming, with examples and loads of documentation. You can take the concepts into oher languages easily enough later on. I've been re-reading it over and over for almost 20 yrs now, its that good.
C|N>K
If you include works of fiction, Cryptonomicon should be required reading.
The Prince by Niccolo Machiavelli
Like it or not, you got to survive dick-head bosses, power struggles and office politics to have a decent career (more than your coding skills or knowledge)
Did you read more than the title of the article? He wasn't asking for programming how-to suggestions, he was asking for NON technical book suggestions that provide a different perspective on programming that he could read when he needs a break.
Still, my suggestion would be - when you need a *break*, make it a real BREAK. You are better off reading something totally unrelated to your work/study that stimulates your imagination than something directly related.
Personally in the (still somewhat limiting) area of technical non-fiction, I got a more interesting perspective on science history and human nature out of books like Genome, Chaos, or Gun, Germs & Steel than something like The Mythical Man Month (which when read by experienced software engineers pretty much just points out what they have already experienced, or by novices what they will inevitably experience - those sorts of books need to be read by *managers*/executives who make the stupid decisions or they really don't do much good...)
Death March, and also the Unix-Hater's Handbook. Both are fairly educational, and the latter is a bit dated but a funny and mostly accurate roasting of Unix. You don't need to dislike Unix to enjoy it, and it's educational too.
For every problem, there is at least one solution that is simple, neat, and wrong.
Hard to say, since it depends entirely on what sort of thing you like!
If you want technical stuff that isn't gory details, something like Fred Brooks' The Mythical Man-Month is probably worth a shot. A lot of stuff from this book has passed into common wisdom, but actually reading the first-hand accounts makes it far more real!
If you want lighter entertainment reading that's vaguely computer related, I can strongly recommend Charles Stross's "The Laundry Files" books. These are a mash-up of spy thriller and Lovecraftian horror with a hacker protagonist, in a world where computers are the ultimate key to summoning up tentacled creatures from beyond.
But if your favorite author is Dostoevsky, then this may not be to your tastes. As I say, it depends entirely on what sort of thing you like.
http://www.amazon.com/Coders-W... Read this one a while back. There's interviews with the (then) new kids on the block as well as some old unix greybeards, so there's a good amount of perspective in there. Another more historical book I can recommend is When Computers Were Human http://www.amazon.com/When-Com...
"Professional" coders who can't communicate write terrible code. It's not good enough to bring code the completion if no one else can read it afterwards.
I'll tell you what to read. Find a large open source project that interests you and subscribe to the developer mailing list. Watch the developers mailing list until you read enough patches and emails so that you recognize what a good patch looks like. Now find a bug and submit a patch. Next, get some feedback and correct your mistakes. Finally, an aspiring coder can code.
Comment removed based on user account deletion
An 'aspiring coder' isn't ready to work on real projects. I feel sorry for the developers of any project someone with so little experience tries to help. The best they can do is just drive him away.
He needs toy projects and he needs to live with his own mistakes.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
I thoroughly enjoyed The Cuckoo's Egg by Cliff Stoll.
Read this seminal book on programming: 1984, by George Orwell. It'll help you spot future trends in software development.
Just cruising through this digital world at 33 1/3 rpm...
A Pattern Language by Christopher Alexander. Really a book about architecture and urban planning, but sets out the idea of a pattern language that has been very influential in many fields, particularly software engineering.
The Mythical Man-Month by Frederick Brooks on a lot of the pitfalls of managing big software projects.
Depending on the anonymous reader's level of experience and literacy, Why's Poignant Guide to Ruby ( http://www.rubyinside.com/medi... ) may be a good introduction to the language, or to programming in general. It's a bit too whimsical to really teach you design patterns or anything, but as far as a first-time guide to the idea of variables and loops, it might be just what is needed.
For non-fiction I'd suggest:
Mind Change: How digital technologies are leaving their mark on our brains - Susan Greenfield
The Knowledge: How to rebuild our world from scratch - Lewis Dartnell
For fiction, try:
The Circle - Dave Eggers
The Owner Series (The Departure, Zero Point and Jupiter War) - Neal Asher
Neptune's Brood - Charles Stross
Yup, not a single one of them has anything to do with code or coding, but a few of them certainly provide some context / insight into where we are today, and where we might be going.
Coders code. It's what we do.
Write something. Anything.
Create a screensaver, a simple unity game, it doesn't matter. Just code something up.
No... The mind needs a complete break at times throughout the day. Personally, I would recommend going for a walk. You're body, eyes, etc. need a break from staring at the screen, sitting still (or standing still, if you have a standing desk), etc.
As for books, that comes down to taste. My thought is keep trying something new until you find something that you enjoy reading about. Maybe one week read about art, next week about history (pick a time period that interests you), etc.
https://en.wikipedia.org/wiki/... - to understand the people that make computers
https://en.wikipedia.org/wiki/... - to understand computers
https://en.wikipedia.org/wiki/... - to understand users of computers.
Have fun!
Just saying it like it are.
I would read books about stuff that interests you.
Reading a book about a new technology just because it is hot makes only sense: if it interests you.
Reading about e.g. angular.js just because it is hot, but you never really want to use JavaScript ... pointless.
Perhaps you find this interesting: http://www.amazon.com/History-...
I only have volume 2: http://www.amazon.com/History-...
It is a good read. A collection of articles about a few dozen programming languages. You can read one in 30 mins before going to bed e.g.
Regards
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Check out, "Design Patterns - Elements of Reusable Object-Oriented Software".
Not enough coders read code. So many coders write bad code and keep writing it bad, because they think they are brilliant and never learn to be critical about code. You get better returns on your time investment by learning from others mistakes. It's like a English class in high school. How much of the time do you actually spend writing papers? Most of the time you're reading others work. In fact you're expected to cite a lot of other people work to write a strong paper. You really shouldn't write authoritatively until you've become an expert. To become an expert on something it's advisable to read a lot of what other experts say.
It takes a long time to make the several thousand mistakes, so you can be a great coder. It takes significantly less time to peruse GitHub to find several thousands of mistakes, so you know how not to write code.
Skim some old books of decades past, so you at least get a feel for the history of computer programming and know what was taught to undergraduates in different eras.
For the late-70s era, I recommend Roger Kaufman's A FORTRAN Coloring Book.
I also recommend skimming both the original (1978) and second (1988) editions of Kernighan and Ritchie's The C Programming Language.
While I don't have specific recommendations, it would be worth a trip to a university library to find early instructional books using the BASIC, COBOL, and JAVA languages if you don't know those already. Then pick up something on a late-1990s/early-2000s version of Microsoft's Visual Basic. Again, these are just for skimming and picking up a bit of history, not for learning the languages (unless you actually want to, of course - in which case also get a modern book on the language you want to learn).
If you've never used an assembly language, I recommend learning at least enough to do a "hello world" and call and return from a subroutine on whatever real or simulated processor you have handy. I know that's not a book recommendation but it may lead you to find a book on the topic worth reading or skimming. Today almost nobody uses assembly language except in very specialized environments, but it's still good to understand what is going on at the chip-architecture level (what we used to call the "bare metal" before sophisticated microcode and the like made that statement not-exactly-true).
On a non-technical level, find yourself a good, up-to-date book on computer security practices from a human-being point of view and a good book on businesses how they work (yes, that's a very broad topic, feel free to pick a sub-topic). For the business book, I'd go for an older book that has withstood the test of time. The Peter Principle qualifies but it's not the only good book out there.
It's somewhat dated in that it doesn't exactly apply to some modern programming models, but Brooks's The Mythical Man-Month is worth reading cover-to-cover.
In the spirit of complete honesty, I've only read some of the books mentioned above cover-to-cover.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
Will Durant's Story of Civization, Ceaser and Christ (or how to die and influence the western world for millennia) , although The Age of Voltaire ("The incarnation of the Enlightenment") is good too. Mostly for his style for telling a story. Code tells a story, and if it looks like every keystroke resulted in an electric shock, it isn't maintainable (readable) and probably doesn't work well. Durant's eleven volumes in a summer can be hard, but reading a few pages every day at work so when your boss asks, say "understanding the decay of absolute monarchy is important" (at least from Voltaire).
Natural Logic by Neil Tennant - *before* learning to program.
A philosophical joy ride.
Someone said that Alice in Wonderland is the best book on programming. "The Idea Factory" is about technology in the last century, and touches on computers, and is also quite readable. "The Art of Unix Programming" is worth a read, along with the jargon dictionary, and they're free. "Zero Bugs and Program Faster" has code examples from across half a century. This series was really great, but might be hard to find.
"First they came for the slanderers and i said nothing."
An effective cheap solution would be to install https://addons.mozilla.org/en-... and set it to bring up random tech related sites. So random breaks of varying tech content, often when people need a break it's because they are stuck, so this activity can expose you to random new ideas, only problem is it might be to distracting, just one more click.
Chaos - everything, everywhere, everywhen
Software development can be a grind. Perspective is valuable.
Geoffrey James, The Tao of Programming
http://www.mit.edu/~xela/tao.h...
Neal Stephenson, In the Beginning Was the Command Line
http://cristal.inria.fr/~weis/...
Vernor Vinge, True Names
Dale Carnegie, How to Win Friends and Influence People
https://en.wikipedia.org/wiki/...
Read a game rule book and then implement all those constraints, conditions and dependencies into code. Then read a book about the programming language you used to work out how you could have done it better, then look at a DIFFERENT set of rules, doing it better from scratch instead of tinkering at the edges of the first.
Bonus points if it's not a game but a simulation of a real system, but games are normally more precisely described with possibly more motivation.
If I could send every programmer, project manager, and product manager to one course/seminar, it would be the Dale Carnegie Human Relations course. Understanding customer requirements from the customer's point of view, diving deep into customer issues, and communicating back and forth amongst all of the stakeholders in a software project require human skills that, sadly, some coders lack. People skills, project management skills, and productivity skills (such as GTD and the Pomodoro Technique) are just as important as, if not more important than, technical skills. Learn the people skills first. They'll get you set up to learn the rest on the fly.
"Startup: A Silicon Valley Adventure" by Jerry Kaplan.
http://www.amazon.com/Startup-Silicon-Adventure-Jerry-Kaplan/dp/0140257314/
"Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft" by G. Pascal Zachary.
http://www.amazon.com/Showstopper-Breakneck-Windows-Generation-Microsoft/dp/1497638836/
In the U.S., Memorial Day is considered the "unofficial" first weekend of summer
Assuming that the last "unofficial" weekend of summer is the labour day weekend, that would mean that Canada has a longer summer. Our first weekend of summer is the May Two-Four, the weekend before Memorial Day.
When our name is on the back of your car, we're behind you all the way!
Code takes you from the basics of how information and numbers are encoded electronically, to how they are stored and transmitted in modern computer systems.
This is the book I wish I had read 20 years ago!
Atlas fucking Shrugged? If you are going to get politics from SF I suggest trying something well written and consistent like the Heinlien stuff instead of that "bring back the Tsar" thing with it's jailbait nobility fucking her way into the group of "great men".
If daddy wasn't rich Atlas fucking Shrugged is telling you to be a good little serf and do what you are told by Rand's dreams of a lost Russian nobility. Read Conrad's "Under Western Eyes" and as an antidote to both Tsarist and Commie screeds.
RTFM.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
> Coders code. It's what we do.
I'm afraid that "practice makes perfict" is the method you're describing. And the better metaphor is "perfect practice makes perfect". Poor practice ingrains horrible habits, and some good literature and especially good mentorship can be invaluable to learning _good_ coding, instead of simply publishing bad tools in public source repositories.
I'll personally recommend Kernighan and Richie's "The C Programming Language" as a critical tutorial in understanding how, and why, "types" of data matter and what "arrays" and data structures really are. "UNIX Power Tools" is a close second, due to the breadth of excellent hacks and workarounds that are invaluable to a skilled administrator. And I'm finding it difficult to select between "Don Quixote" by Cervantes, or "The Prince" by Machiavelli. Don Quixote portrays the wisdom and sorrows of pursuing dreams. The Prince includes a great deal of distasteful but illuminating advice about how to deal with bureaucrats and management, and why they make their choices.
Yeah, tell that to my dumb colleague who reads NOTHING (including the code he needs to work on) and then starts deiscussion with "I know how it works!"
The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
http://www.amazon.com/Pragmati...
This may be a bit out of left field as a suggestion, but How to Lie With Statistics by Darrell Huff is short, funny, enlightening, and teaches a lot about the presentation of technical information. It's a painless introduction to the subjects that Edward Tufte goes into in far more depth.
Q: What does the "B." in Benoit B. Mandelbrot stand for? A: Benoit B. Mandelbrot
I gave some talks on different books that'll be interesting for technical people, and in the end compiled them in a list in goodreads:
https://www.goodreads.com/list...
A depressing but unsurprising litany of dull technical books, bad science fiction, and Any Rand. Don't read books with code in them, or books about coding, that's what the internet is for.
Read fiction, because it's good for you. Read things that seem a bit unlikely to entertain at first. Read The Inferno, Frankenstein, Pride and Prejudice, The French Lieutenant's Woman, Nineteen Eighty Four, Animal Farm, Wise Children, Ridley Walker. The only halfway technical book I ever enjoyed was Chaos by James Gleik, and that was when I was thirteen. Read proper books. Life's too short to spend any of it reading about code. Believe me.
The Mythical Man Month
It kinda changed me
YMMV
Muchas Gracias, Señor Edward Snowden !
If you don't know anything, reading a bunch of code won't teach you to recognize bad code. You have to have some criterion upon which to measure the quality. Even reading a bunch of other people's ideas of what bad code is only goes so far. If you don't know how to write code, and if you have little experience doing so, you won't be able to place other people's ideas into context.
e.g. reading the statement that "GOTO is harmful" doesn't really help anyone get better at coding. On the other hand, if you've written a 300 line program without the benefit of subroutines, you'll instinctively understand that statement, if you haven't already figured it out for yourself.
In what way is VB not a full dialect? It supports everything the older BASICs supported, and then some. The last version I used (5 or 6) still supported the LET keyword.
Learn some soft skills to bring your career to the next level:
Comment removed based on user account deletion
Seriously helped me
I recommend "The Cathedral and the Bazaar" by Raymond
https://en.wikipedia.org/wiki/...
Uh, Linux geek since 1999.
"The Sciences of the Artificial" by Herbert Simon. First edition is better than the later editions but you'll never find it so just read one of the later editions. Original focus was on the structural differences between natural sciences like chemistry or medicine and what Simon labels the artificial (from "artifice" - man made) sciences like engineering and economics. Simon won the Nobel Prize for Economics, the Turing Award, etc. Wiki him and then read the book. It's not very long and full of interesting ideas.
"The Structure of Scientific Revolutions" by Thomas Kuhn. Sufficiently well known it requires no introduction. Just read it; it's good and will get you to think.
+1
Why not both? The first two shou;ld be required reading in any case.
It's kind of interesting. At this point, the Brooks book is taken as gospel, and yet, at the same time, management everywhere attempts to emulate all the worst parts,
Michael Arbib's "Brains, Machines, and Mathematics." Oldie but goodie.
Coding is not unlike trying to write, stringing symbols together into meaningful sentences. Writing prose would better than reading. But reading is helpful for improving writing.
Don Quixote portrays the wisdom and sorrows of pursuing dreams
Don Quixote is satire, not some crappy self help manual. There is no wisdom in tilting at windmills.
To have a right to do a thing is not at all the same as to be right in doing it
A little late to the party here, but if anyone is still reading this thread, Neuromancer is a great novel. Even after 30 odd years or so it still brings the mojo. And the anti-hero hero is a programmer.
'Completion' not completion. Lots of ways to be 'done' with something. But sooner or later, even 'aspiring coders' want something to show for their work.
Screensavers and Unity Games are (or can be) fairly simple and visual. Unity store lets you avoid the whole asset tar baby for simple stuff.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
Tilting at windmills, or at the right windmills, can inspire people to do more than they realized was possible. This includes yourself.
This kid has likely never written a sort before.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
excellent choice - this book is wonderful.
nonfiction broad-interest: Steven Levy: Hackers Tracy Kidder: The Soul of a New Machine Cristopher Moore and Stephan Mertens: The Nature of Computation fiction/fun: Neal Stephenson: Reamde (note the spelling) Geoffrey James: The Tao of Programming nonfiction textbookish but worth reading through: Marc Rochkind: Advanced UNIX Programming W. Richard Stevens: Advanced Programming in the UNIX Environment Michael Kerrisk: The Linux Programming Interface Thompson and Ritchie: Bell System Technical Journal "The UNIX Time-Sharing System" and all the other reprints in which they discuss the evolution of UNIX Kernighan and Ritchie: The C Programming Language