Presents a dual biography of John Carmack and John Romero, the creators of the video games Doom and Quake, assessing the impact of their creation on American pop culture and revealing how their success eventually destroyed their relationship.
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?
I expect this list to be varied and to cover a wide range of things.
To search: Use the search box in the upper-right corner. To search the answers of the current question, use
inquestion:this. For example:
inquestion:this "Code Complete"
Applying UML and Patterns by Craig Larman.
The title of the book is slightly misleading; it does deal with UML and patterns, but it covers so much more. The subtitle of the book tells you a bit more: An Introduction to Object-Oriented Analysis and Design and Iterative Development.
This is the book for those who want to understand the whys and hows of OOP using C# 3.0. You don't want to miss it.
Masters of doom. As far as motivation and love for your profession go: it won't get any better than what's been described in this book, truthfully inspiring story!
It's about about what mindsets are required to reach mastery in any skill, and why. It's just awesome, and an easy read too.
Adding to the great ones mentioned above:
Pro Spring is a superb introduction to the world of Inversion of Control and Dependency Injection. If you're not aware of these practices and their implications - the balance of topics and technical detail in Pro Spring is excellent. It builds a great case and consequent personal foundation.
Another book I'd suggest would be Robert Martin's Agile Software Development (ASD). Code smells, agile techniques, test driven dev, principles ... a well-written balance of many different programming facets.
More traditional classics would include the infamous GoF Design Patterns, Bertrand Meyer's Object Oriented Software Construction, Booch's Object Oriented Analysis and Design, Scott Meyer's "Effective C++'" series and a lesser known book I enjoyed by Gunderloy, Coder to Developer.
And while books are nice ... don't forget radio!
... let me add one more thing. If you haven't already discovered safari - take a look. It is more addictive than stack overflow :-) I've found that with my google type habits - I need the more expensive subscription so I can look at any book at any time - but I'd recommend the trial to anyone even remotely interested.
(ah yes, a little obj-C today, cocoa tomorrow, patterns? soa? what was that example in that cookbook? What did Steve say in the second edition? Should I buy this book? ... a subscription like this is great if you'd like some continuity and context to what you're googling ...)
Database System Concepts is one of the best books you can read on understanding good database design principles.
Algorithms in C++ was invaluable to me in learning Big O notation and the ins and outs of the various sort algorithms. This was published before Sedgewick decided he could make more money by dividing it into 5 different books.
C++ FAQs is an amazing book that really shows you what you should and shouldn't be doing in C++. The backward compatibility of C++ leaves a lot of landmines about and this book helps one carefully avoid them while at the same time being a good introduction into OO design and intent.
Perfect Software: And Other Illusions about Testing by Gerald M. Weinberg
Here are two I haven't seen mentioned:
I wish I had read "Ruminations on C++" by Koenig and Moo much sooner. That was the book that made OO concepts really click for me.
And I recommend Michael Abrash's "Zen of Code Optimization" for anyone else planning on starting a programming career in the mid 90s.
Rapid Development by McConnell
O, well, how long ago it was.
I have a few good books that strongly influenced me that I've not seen on this list so far:
The Psychology of Everyday Things by Donald Norman. The general principles of design for other people. This may seem to be mostly good for UI but if you think about it, it has applications almost anywhere there is an interface that someone besides the original developer has to work with; e. g. an API and designing the interface in such a way that other developers form the correct mental model and get appropriate feedback from the API itself.
The Art of Software Testing by Glen Myers. A good, general introduction to testing software; good for programmers to read to help them think like a tester i. e. think of what may go wrong and prepare for it.
By the way, I realize the question was the "Single Most Influential Book" but the discussion seems to have changed to listing good books for developers to read so I hope I can be forgiven for listing two good books rather than just one.
C++ How to Program It is good for beginner.This is excellent book that full complete with 1500 pages.
Inside the C++ object model by Stanley Lippman
I bough this when I was a complete newbie and took me from only knowing that Java existed to a reliable team member in a short time
Not a programming book, but still a very important book every programmer should read:
The Pragmatic programmer was pretty good. However one that really made an impact when I was starting out was :
I know - it sounds and looks a bit cheesy on the outside and has probably dated a bit - but this was an awesome explanation of the internals of Win95 based on the Authors (Matt Pietrek) investigations using his own own tools - the code for which came with the book. Bear in mind this was before the whole open source thing and Microsoft was still pretty cagey about releasing documentation of internals - let alone source. There was some quote in there like "If you are working through some problem and hit some sticking point then you need to stop and really look deeply into that piece and really understand how it works". I've found this to be pretty good advice - particularly these days when you often have the source for a library and can go take a look. Its also inspired me to enjoy diving into the internals of how systems work, something that has proven invaluable over the course of my career.
Oh and I'd also throw in effective .net - great internals explanation of .Net from Don Box.
I recently read Dreaming in Code and found it to be an interesting read. Perhaps more so since the day I started reading it Chandler 1.0 was released. Reading about the growing pains and mistakes of a project team of talented people trying to "change the world" gives you a lot to learn from. Also Scott brings up a lot of programmer lore and wisdom in between that's just an entertaining read.
Beautiful Code had one or two things that made me think differently, particularly the chapter on top down operator precedence.
@Juan: I know Juan, I know - but there are some things that can only be learned by actually getting down to the task at hand. Speaking in abstract ideals all day simply makes you into an academic. It's in the application of the abstract that we truly grok the reason for their existence. :P
@Keith: Great mention of "The Inmates are Running the Asylum" by Alan Cooper - an eye opener for certain, any developer that has worked with me since I read that book has heard me mention the ideas it espouses. +1
This one isnt really a book for the beginning programmer, but if you're looking for SOA design books, then SOA in Practice: The Art of Distributed System Design is for you.
Advanced Programming in the UNIX Environment by W. Richard Stevens.
For me it was Design Patterns Explained it provided an 'Oh that's how it works' moment for me in regards to design patterns and has been very useful when teaching design patterns to others.
I'm a big fan of most titles by Robert C. Martin, especially Agile Software Development, Principles, and Practices and Clean Code: A Handbook of Agile Software Craftsmanship.
Code Craft by Pete Goodliffe is a good read!
The first book that made a real impact on me was Mastering Turbo Assembler by Tom Swan.
In addition to other people's suggestions, I'd recommend either acquiring a copy of SICP, or reading it online. It's one of the few books that I've read that I feel greatly increased my skill in designing software, particularly in creating good abstraction layers.
A book that is not directly related to programming, but is also a good read for programmers (IMO) is Concrete Mathematics. Most, if not all of the topics in it are useful for programmers to know about, and it does a better job of explaining things than any other math book I've read to date.
For me "Memory as a programming concept in C and C++" really opened my eyes to how memory management really works. If you're a C or C++ developer I consider it a must read. You will defiantly learn something or remember things you might have forgotten along the way.
Agile Software Development with Scrum by Ken Schwaber and Mike Beedle.
I used this book as the starting point to understanding Agile development.
Systemantics: How Systems Work and Especially How They Fail. Get it used cheap. But you might not get the humor until you've worked on a few failed projects.
The beauty of the book is the copyright year.
Probably the most profound takeaway "law" presented in the book:
The Fundamental Failure-Mode Theorem (F.F.T.): Complex systems usually operate in failure mode.
The idea being that there are failing parts in any given piece of software that are masked by failures in other parts or by validations in other parts. See a real-world example at the Therac-25 radiation machine, whose software flaws were masked by hardware failsafes. When the hardware failsafes were removed, the software race condition that had gone undetected all those years resulted in the machine killing 3 people.
It seems most people have already touched on the some very good books. One which really helped me out was Effective C#: 50 Ways to Improve your C#. I'd be remiss if I didn't mention The Tao of Pooh. Philosophy books can be good for the soul, and the code.
I saw a review of Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools on a blog talking also about XI-Factory, I read it and I must say this book is a must read. Altough not specifically targetted to programmers, it explains very clearly what is happening in the programming world right now with Model-Driven Architecture and so on..
Although the book is only 300 pages and favors Microsoft technologies it still offers some good language agnostic tidbits.
Discrete Mathematics For Computer Scientists by J.K. Truss.
While this doesn't teach you programming, it teaches you fundamental mathematics that every programmer should know. You may remember this stuff from university, but really, doing predicate logic will improve you programming skills, you need to learn Set Theory if you want to program using collections.
There really is a lot of interesting information in here that can get you thinking about problems in different ways. It's handy to have, just to pick up once in a while to learn something new.
It really helped me to understand the basics of not just Python but programming in general. Although it uses Python to demonstrate concepts, they apply to most, if not all, programming languages. Also: IT'S FREE!
Managing Gigabytes is an instant classic for thinking about the heavy lifting of information.
Object-Oriented Programming in Turbo C++. Not super popular, but it was the one that got me started, and was the first book that really helped me grok what an object was. Read this one waaaay back in high school. It sort of brings a tear to my eye...
I'm reading now Agile Software Development, Principles, Patterns and Practices. For those interested in XP and Object-Oriented Design, this is a classic reading.
My high school math teacher lent me a copy of Are Your Lights Figure Problem that I have re-read many times. It has been invaluable, as a developer, and in life generally.
Kernighan & Plauger's Elements of Programming Style. It illustrates the difference between gimmicky-clever and elegant-clever.
Here's an excellent book that is not as widely applauded, but is full of deep insight: Agile Software Development: The Cooperative Game, by Alistair Cockburn.
What's so special about it? Well, clearly everyone has heard the term "Agile", and it seems most are believers these days. Whether you believe or not, though, there are some deep principles behind why the Agile movement exists. This book uncovers and articulates these principles in a precise, scientific way. Some of the principles are (btw, these are my words, not Alistair's):
There is so much more in there too. I'll shut up now, but I HIGHLY recommend this book!
A great book about visual thinking techniques. There is also an expanded edition now. I can't speak to that version, as I do not own it; yet.
to get advanced in prolog i like these two books:
really opens the mind for logic programming and recursion schemes.
Agile Software Development by Alistair Cockburn
Do users ever touch your code? If you're not doing solely back-end work, I recommend About Face: The Essentials of User Interface Design — now in its third edition (linked). I used to think my users were stupid because they didn't "get" my interfaces. I was, of course, wrong. About Face turned me around.
Interesting what a large proportion the books mentioned here are C/C++ books.
While not strictly a software development book, I would highly recommend that Don't Make me Think! be considered in this list.
As so many people have listed Head First Design Patterns, which I agree is a very good book, I would like to see if so many people aware of a title called Design Patterns Explained: A New Perspective on Object-Oriented Design.
This title deals with design patterns excellently. The first half of the book is very accessible and the remaining chapters require only a firm grasp of the content already covered The reason I feel the second half of the book is less accessible is that it covers patterns that I, as a young developer admittedly lacking in experience, have not used much.
This title also introduces the concept behind design patterns, covering Christopher Alexander's initial work in architecture to the GoF first implementing documenting patterns in SmallTalk.
I think that anyone who enjoyed Head First Design Patterns but still finds the GoF very dry, should look into Design Patterns Explained as a much more readable (although not quite as comprehensive) alternative.
How influential a book is often depends on the reader and where they were in their career when they read the book. I have to give a shout-out to Head First Design Patterns. Great book and the very creative way it's written should be used as an example for other tech book writers. I.e. it's written in order to facilitate learning and internalizing the concepts.
Even though i've never programmed a game this book helped me understand a lot of things in a fun way.
This book pools together the collective experiences of some of the world's best programmers. It is a must read.
Extreme Programming Explained: Embrace Change by Kent Beck. While I don't advocate a hardcore XP-or-the-highway take on software development, I wish I had been introduced to the principles in this book much earlier in my career. Unit testing, refactoring, simplicity, continuous integration, cost/time/quality/scope - these changed the way I looked at development. Before Agile, it was all about the debugger and fear of change requests. After Agile, those demons did not loom as large.
One of my personal favorites is Hacker's Delight, because it was as much fun to read as it was educational.
I hope the second edition will be released soon!
You.Next(): Move Your Software Development Career to the Leadership Track ~ Michael C. Finley (Author), Honza Fedák (Author) link text
I've been arounda while, so most books that I have found influential don't necessarily apply today. I do believe it is universally important to understand the platform that you are developing for (both hardware and OS). I also think it's important to learn from other peoples mistakes. So two books I would recommend are:
Working Effectively with Legacy Code is a really amazing book that goes into great detail about how to properly unit test your code and what the true benefit of it is. It really opened my eyes.
This is a poll asking the Stackoverflow community what non-programming books they would recommend to fellow programmers.
Please post only ONE BOOK PER ANSWER.
Please search for your recommendation on this page before posting (there are over NINE PAGES so it is advisable to check them all). Many books have already been suggested and we want to avoid duplicates. If you find your recommendation is already present, vote it up or add some commentary.
Please elaborate on why you think a given book is worth reading from a programmer's perspective.
Note: this article is similar and contains other useful suggestions.
by Dale Carnegie
Although this was first published in 1936, the advice contained within is still as fresh and appropriate as ever. Don't be put off by the name. This isn't some underhand guide to having your way with unsuspecting victims, but rather common sense advice on how to get on with people, how to nurture relationships and make the most of yourself and your fellow man (and woman).
It is well known that technical folk (including programmers) are often thought of as not being terribly 'people oriented' (whether this is a justified stereotype or not is subject of another discussion) and so this book is an invaluable resource for teaching you the finer points of human interaction.
It's warm, heartfelt, sturdy, straightforward and timelessly written. Highly recommended.
by Eliyahu M. Goldratt and Jeff Cox
To elaborate: It is a book on how to approach problems. To identify bottlenecks in your system and work on them. So in short, it isn't a programming book, but shows (in novel format) how to problem solve -- and is thus very valuable to a programmer.
[Update Gishu] It's an eyeopener on how the throughput of your entire system depends on the bottlenecks. Optimizing other stages/operations will not produce any results. Although this is ingrained in developers who have had experience optimizing a scenario in their app; however zooming out to a more higher level and applying this can have profound gains. Beck's XP Book has a dedicated chapter on the Theory Of Constraints. Programmers who move onto Leads/PMs will find this a valuable addition to their toolkit.
for those more into game development.
This book will inspire anyone to think and be original.
This might not be a popular one, but
by Thomas Pynchon
Gravity's Rainbow is my favorite book of all time. I read through the whole thing last summer, and I'm in the process of reading it again. From a writer's point of view, it's pure, beautiful art. However, I recommend it here because it really forces the reader to think and make a lot of mental connections.
Of course, this book has a reputation for being impossible to finish. It's definitely the hardest book I've ever read. Pick it up at your own risk.
Don't Make Me Think by Steve Krug. An essential book about web usability. As Krug says, "Common sense isn't always obvious."
(Hint: Amazon.com has good usability)
Update: This is now part of the library at work. I've gotten about five people to read it so far. 100% positive reviews, predictably.
It's a very fast paced action story that's excellent to clear your head with. It's a fun book to read (will make you laugh), and the characters are rather tragic (will make you feel more satisfied at work). This is one of those books that is hard to explain the content without fear that people will think you different and odd, but all the same you must tell everyone about (I.e. makes you talk to people).
Here's a strange one for you all to think about.
It's a modern classic that everybody should read, and I'd be very surprised if English or Media Studies students weren't recommended to read it at some time. Reading should not only be informative and educational, but enjoyable as well. If you're not going to read a book for pure fun now and again then you'll only end up frustrated with the books you need to read as a programmer/developer.
This book is a real eye-opener; a book that'll really make you think about your own life, and for a programmer whom spends their day dealing with pure thought-stuff it's a great way to get you thinking on a different track.
The Humane Interface by Jef Raskin.
Questioning the Unquestionable and Thinking the Impermissible
by James P. Hogan
God programmer meet God marketing guy, and no it's not Steve Woz and Steve Jobs, but it's the Johns, Carmack and Romero.
Business, gaming and programming all rolled into one. a definitely page turner all the way until the end.
by Fred Brooks
My personal opinion is, apart from programming, in life we need to find a balance, about everything (or keep striving for it). Many times, I have found myself getting too immersed in one aspect of life (frequently programming/work) at the cost of others. Over the years I have learnt to recognize this and act accordingly.
In work, sometimes I have come across pretty difficult people, making it hard to work with them (not just my opinion, but also of other team members). Previously I used to try hard to convince them, make them more helpful, etc. and get frustrated when I don't succeed.
But this book Tigana, by Guy Gavriel Kay helped me understand that sometimes a person can be inherently complex, hard to work with, without he/she helping it. It is a science fiction novel, and it may not be completely appropriate here, but it helped me work better with my team, so I am linking to it here. It helped me become more objective in dealing with people I work with.
Games People Play by Eric Berne.
IMHO it is a very useful aid to understand and deal with office politics (among others).
We think we’re relating to other people – but actually we’re all playing games.
Forty years ago, Games People Play revolutionized our understanding of what really goes on during our most basic social interactions. More than five million copies later, Dr. Eric Berne’s classic is as astonishing–and revealing–as it was on the day it was first published. This anniversary edition features a new introduction by Dr. James R. Allen, president of the International Transactional Analysis Association, and Kurt Vonnegut’s brilliant Life magazine review from 1965. We play games all the time–sexual games, marital games, power games with our bosses, and competitive games with our friends. Detailing status contests like “Martini” (I know a better way), to lethal couples combat like “If It Weren’t For You” and “Uproar,” to flirtation favorites like “The Stocking Game” and “Let’s You and Him Fight,” Dr. Berne exposes the secret ploys and unconscious maneuvers that rule our intimate lives. Explosive when it first appeared, Games People Play is now widely recognized as the most original and influential popular psychology book of our time. It’s as powerful and eye-opening as ever.
Jeffrey K. Liker - The Toyota Way (Amazon link). A good if at times semi-boring read, but loads of information from the company which invented Lean.
As well as the mentioned Gadwell's Tipping Point, Blink is a good choice.
A Brief History of Everything by Ken Wilber.
In the ambitiously titled A Brief History of Everything, Wilber continues his search for the primary patterns that manifest in all realms of existence. Like Hegel in the West and Aurobindo in the East, Wilber is a thinker in the grand systematic tradition, an intellectual adventurer concerned with nothing less than the whole course of evolution, life's ultimate trajectory—in a word, everything. . . . Combining spiritual sensitivity with enormous intellectual understanding and a style of elegance and clarity, A Brief History of Everything is a clarion call for seeing the world as a whole, much at odds with the depressing reductionism of trendy Foucault-derivative academic philosophy.
Could not put this one down, The Evolution of Cooperation by Robert Axelrod. Its a fascinating read and as game theory books go it's pretty accessible.
The Fountainhead by Ayn Rand. Atlas Shrugged is already on this list, but the Fountainhead deals more with craftsmanship and integrity, rather than supply-side economic theory. Definitely worth a read for anyone in a creative field.
An analysis of the 12 worst Supreme Court decisions
Great and interesting book about how our liberties are being trodden on by the government. Libertarian viewpoint, but objective.
Snow Crash By Neal Stephenson
Ender's Game by Orson Scott Card
Burton G. Malkiel
Nothing else will teach you better how to get a handle on your money.
Niccolo Machiavelli's The Prince. After wondering why people acted so strangely at work, this book was the first of many, that taught me why.
How was JPod not posted? It's like a (already posted) Microserfs with internet. It's typical Coupland novel, must read for every techie, geek, webz hipster.
Here are some quotes
"You googled her?" "Of course I did. Didn't you?" I'd somehow forgotten to perform this essential task.
“After a week of intense googling, we’ve started to burn out knowing the answer to everything. God must feel that way all the time. I think people in the year 2020 are going to be nostalgic for the sensation of feeling clueless.”
“It turns out that only twenty percent of human beings have a sense of irony – which means that eighty percent of the world takes everything at face value. I can’t imagine anything worse than that. Okay, maybe I can, but imagine reading the morning newspaper and believing it all to be true on some level.”
Nothing too programmer-specific, but being in the industry that we are, it helps immensly to have a positive mindset depicted in this book.
Note: I had to move this book from my previous answer to here, to comply with the question's specific rule that one post -> one answer
This is probably not going to be popular, but "If liberty means anything at all it means the right to tell people what they do not want to hear."
by Neal Stephenson
It's very dated, but I have yet to find a single book (or essay for that matter) that gives a quasi-outsider's view of an industry that the public is apathetic to understand. The insights and descriptions are spot-on, even though the conditions have dramaticly changed over time.
by Alan Cooper
It's about using the right language to talk about projects - using stories (and personas) instead of 'features' to talk about stuff that needs to be realized. Also a lot of emphasis on interaction design and related activities. Delivering what is needed instead of what is asked for.
Also read these free manifestos
(Note: moved the other book to a separate answer)
Awaken the Giant Within by Anthony Robbins.
This book as about why stock markets are not predictable like casinos and the lottary. It is very readable though querky. It will help you to understand when statistical techneques do not work, why math is not understanding, why project managers can't predict schedules and how they can with less effort.
The book does not go into heavy math but will give you a feal for when the math can and more ofter can not be used.
Author: Nassim Nicholas Taleb. Also wrote 'Fooled By Randomness'
Read it if you work with mathematics, statistics or finance - Or if you have a pension.
Simon Singh's Fermat's Last Enigma is one of the greatest books I have ever read.
This non-programming book has taught me a lot about running after the solution of a problem, no matter how old and complex it is.
by Roger Penrose
Somehow in the line of Godel, Escher, Bach but, I think, easier to read.
Dealing with people you can't stand:
Dealing with People You Can't Stand: How to Bring Out the Best in People at Their Worst (Paperback) ~ Dr. Rick Brinkman (Author), Dr. Rick Kirschner (Author), Dr. Rick Kirschner (Author), Dr. Rick Brinkman (Author)
Sensation & Perception by E. Bruce Goldstein will really pull a lot of software engineers out of their comfort zones. I found it to be fascinating when I started thinking about effective scientific visualization techniques with the user's physiology and psychology in mind. Issues with the user's potential for color blindness, visual acuity, attention span and information processing abilities are just some of the reasons why I keep going back to this book.
If you're a Python developer, you will not get around viewing Monty Python stuff. But to quickly look up a quote you find in any Python doc, I really recommend those:
(as well as part two, they're great; Amazon) and
Reading doesn't give you the great look of a puzzled Michael Palin or the anger of a furious John Cleese, but it still is a worthwhile lecture.
by Tracy Kidder
"The Ultimate History of Video Games" of course!
Why? Because in one book you get history, fun, anecdotes, business decisions, project management, opinions, wonderful quotes, the hardware and the software ... all in all portraying an industry that went through numerous cycles, ups and downs, deaths and reincarnations. But most of all: Steven Kent managed to make this book a very entertaining read, you'll be captivated by each chapter.
This is similar to another question. Here is a link to my answer over there.
Now, Discover Your Strengths is my favorite personal/career development book. It teaches the most successful people become successful by focusing on building on their strengths, rather than covering up weaknesses. This book helps you find out where your strengths lie.
by Tom DeMarco and Timothy Lister
Great background on what managing risk means and lots of good tools for quantifying risks. They discuss a risk estimation tool which uses statistics to produce a pragmatic and reality-based understanding of the effects that risks will have on a given projects completion date and confidence level.
The prologue on "The Ethics of Belief" is not to be missed.
Concise, bare essential and time-less!
The First Quarter : A 25-year History of Video Games. Unabashed old-school video game geekery.
by Gabriel Garcia Marquez
by Steven Levy
Does a great job of outlining some of the eras in computing, from the enviroment that sprung up around the Tech Model Railroad Club at MIT, to the Homebrew Computing in the bay area, to the story of the game companies of the early 80s. Especially the MIT section has wonderful descriptions of hackers at work, doing what they do best (in a wholly non-technical writing style), bumming instructions, making the machine do their bidding, and in the mid-seventies, it describes the self-made community of hardware hackers (including Wozniak), who built their own computers. Hugely entertaining, and a good way to understand where some of these communities originate from (academics, hackers, tinkeres).
If you don't want your job to be outsourced (as have happened to many programmers) then you need to read this book, A Whole New Mind - Why Right-Brianers Will Rule The Future, actualize it, and put it into practice yesterday!
I would recommend: "Code" by Charles Petzold.
It completely opened my eyes on how computers actually work, explained and illustrated clearly. I learned that computers have no inherent understanding of numbers, letters, words or anything like that. These were human concepts and it was up to the computer programmer (at a very low level) to present they patterns of bits from computer memory to something users would find meaningful.
Despite its title, "Code" has nothing to do with coding, but explains how computers work at the electrical level.
by Tom DeMarco and Timothy Lister
This classic book encourages us to think about the people instead of the process. It's full of practical advice on team building, productivity and office environments. It's a must read, not just for managers, but anyone related to software development.
Get two copies, one for you and one for your manager.
by Robert M. Pirsig
This book is many things, but you could say it's sort of a philosophical take on what it means to "grok" something.
Commentry from Garth Gilmore:
I credit this book with teaching me more about software development than any programming book I ever read.
The central thread in the book is how our romantic (artistic) and classical (technical/rational) perceptions of the world are both derived from how we perceive quality in the environment around us. This understanding is then applied to apparently mundane tasks like motorcycle maintenance.
To give some examples of how this applies to coding:
Long story short its a good read :-)
Simon Singh's The Code Book is a great book about how cryptography was born and how people is always trying to challenge it.
by Douglas Adams
Life, the universe, and everything
"See first, think later, then test. But always see first. Otherwise you will only see what you were expecting. Most scientists forget that." -- Wonko the Sane
by Keith Ferrazzi
Comments from duplicate answer by Flory:
I did not think that I would like it before I got the book but I really enjoyed it. It is basically about how to build a relationships. Prior to reading it I expected it to be very trite and about how to use people for your own ends. Instead it was the opposite in how to be used to everyone's ends. Very interesting.
What is the name of this book?, by Raymond Smullyan. It is a wonderful book of puzzles about the intricacies of logic.
by Michio Kaku
There's a lot of space out there to get lost in.
-- John Robinson, Lost in Space
A Short History of Nearly Everything by Bill Bryson
by Neal Stephenson
This book follows parallel stories of a World War II code breaker and his present day descendant, and deals a lot with the development of computers (Alan Turing is actually a character in the book). A geek's must-read!
Stranger in a strange land because every programmer should grok the word "GROK".
Lessons Learned in Software Testing by Kaner, Bach, and Pettigrew. Brilliant book, easy to read.
The Thermodynamics of Pizza by Harold Morowitz.
This could have all kinds of morals, depending on how you take it. 1. You can use science to improve EVERYTHING! :-) 2. Make sure you choose the right level of abstraction when designing and coding. 3. You can really improve your life if you just take a few minutes to think about it.
by David Allen.
Written in 1966 this classic science fiction novel takes place on the penal colony Luna (the moon). The story is told by the only programmer/computer repairman on Luna, Manuel. Manuel has a secret. The master computer (Mike) that controls all of Luna has become a sentient AI and happens to have Manuel as its only friend. Mike is rough around the edges at first, its speech is fuzzy and it plays childish but dangerous jokes with its god-like abilities. As time wears on Mikes abilities fully develop into a mature being. With Manuel's guidance they will go on an adventure together that spurs the revolution of freeing Luna from Earth!
This novel is the first Robert A. Heinlein novels I have read but will certainly not be the last. The fact that this book was written in 1966 still astonishes me! It has barely any dated parts and could easily pass for a contemporary novel. It wont he Hugo award for best novel.
Truly one of the better "programmer" style novels I have read. Great adventure the whole way through. If anyone has a suggestion as to which Heinlein novel I read next, please leave a comment!
Written in 1950, Dianetics: The Evolution of a Science describes the optimum computer as an introduction to a science of the mind.
by George Orwell
This is an amazing book that details some very counter-intuitive conclusions about the LACK of THINKING actually predominates our decision process.
by Mark Haddon
It will give you some perspective of your odd co-workers.
Player Piano by Kurt Vonnegut
Beyond Fear by Bruce Schneier.
From Amazon: "Schneier provides an interesting view of the notion of security, outlining a simple five-step process that can be applied to deliver effective and sensible security decisions. These steps are addressed in detail throughout the book, and applied to various scenarios to show how simple, yet effective they can be....Overall, this book is an entertaining read, written in layman's terms, with a diverse range of examples and anecdotes that reinforce the notion of security as a process".
Or just consider it a straight read on understanding what security means - whether for computers or in real life. It can give you the tools to handle the ginormous amounts of FUD we encounter every day.... And it's entertaining, besides. (Even got my father to read it, and he's enjoying it...)
Universal Principles of Design, by William Lidwell, Kritina Holden, and Jill Butler
One of this biggest issues I have with many programs I have used is the lack of design put into the interface and into the product. This book goes in-depth describing how to enhance the usablilty within a interface. It also tells you all of the basic principals and rules of design, and they give many examples for many different applications whether its techinical or non-technical. The book reads a little like a college classroom book (and it probably is for many design schools), so it the not the most exciting thing to read, but I find the most informative when it comes to interface design.
I can't believe I didn't see this already listed:
by Frank Herbert
Dune is the pinnacle of Sci-Fi novels!
I've been really enjoying haiku recently. To that end, I'd very strongly recommend The Haiku Handbook: How to Write, Share, and Teach Haiku by William J. Higinson.
I recommend reading/writing haiku as a way to relax.
One notable premise contained within this book reminds me of the saying "If you go far enough away, then you're on your way back home". For example, the Eastern and Western approaches to philosophy and science were so diametrically opposed for centuries but perhaps they're coming around the other side towards similar conclusions these days?
It may be 30 or so years old, but it's still very much worth the read.
by Lynne Truss
Becoming a better communicator in people language, I believe, makes you a better communicator in code. Punctuation is a very good place to start improving your writing.
The Tipping Point is one of the best books that I have ever read.
Every programmer should read this book to learn how to pick up women.
Information theory, betting, value of information, etc.
21st Century Jet: The Making of the Boeing 777, by Karl Sabbagh
From coffee cup holder to three-hundred-foot wing, this book is the story of how a group of people came to build a brand new aeroplane.
The book describes the development of the Boeing 777, from initial concept, through requirements gathering, design, development, testing, production, and delivery. The engineers and management implemented a new development system, overcame changing requirements, met strict safety requirements, and continually optimized the solution. It describes how the designers and engineers worked to make the aircraft easier, safer, and more intuitive for everyone who would come in contact with it (air crew, maintenence crews, and passengers).
Software developers can learn a lot from this book. It's very well written, it reads like a novel. I've read it twice and highly recommend it.
Boeing Computer Services president John Warner said, the Boeing 777 is "three million parts flying in close formation." Sounds like software to me.
by Mihaly Csikszentmihalyi
The best and most productive coding is done in a flow state. This is a psychological study of the phenomemon. Although the book is scientifically rigorous it remains accessible to the lay-person.
Charles Perrow's "Normal Accidents" investigates what can happen when complex technology goes horribly wrong, and formulates his theory of the "normal accident": complex, tightly coupled systems will have accidents, because minor faults interact with catastrophic consequences. We see this all the time in programming and systems administration, and yet, as far as I know, few of these concepts are understood outside safety engineering.
(He also writes very well, and brings life to what could have been a rather dry book).
by George Lakoff
It's a book about how people categorize things, and about reasoning in general. It's long and extremely boring for some people, but it is still great.
If you live on the Unix side of the world, The Art of UNIX Programming by Eric Raymond (see also here). Despite its title, it is not a programming book, and it contains very few lines of code indeed. It's the best book I know about the Unix philosophy.
I found Zero: The Biography of a Dangerous Idea to be pretty decent. He has a followup to this called Decoding the Universe: How the New Science of Information Is Explaining Everything in the Cosmos, from Our Brains to Black Holes which I have but haven't read yet so I can't comment on how it is.
Secret Rendezvous by Kobo Abe. Abe's the frickin' man, man.
But seriously, if you like Murakami, you owe it to yourself to check out Abe.
Happiness is a Choice by Barry Neil Kaufman
It's a great book that can help you understand you can choose how to feel. Turns out you can be responsible for a lot more of your emotions than you think.
I can not believe this book has never been mentioned!! It is one of the best book about product management I have read in years. If you are working for a startup, it is a must read.
The Milkshake Moment: Overcoming Stupid Systems, Pointless Policies and Muddled Management to Realize Real Growth by Steven Little
Another one from a different angle from prior posts: Gödel, Escher, Bach: an Eternal Golden Braid, by Douglas Hofstadter.
The Right Stuff by Tom Wolfe
Walter Murch's "In the Blink of an Eye"
Or any other Speed Reading text. Learning my own quirks about how I read has helped me to be conscious of other aspects of how I think. Having the ability to control my reading speed has proven to be invaluable. I still choose to read books for pleasure at my previous reading speed with all its flaws.
I just bought it on Audible last week and I can't stop listening to it. It goes through the factors of successful people (ex: Bill Gates, Bill Joy, The Beatles). Fascinating!
by Hugh Sebag-Montefiore
Having a bad week at work? Well at least when you can't figure out some algorithm people aren't dying in their hundreds in the freezing North Atlantic waiting on you to work it out.
As well as being a great read about the dawn of the modern computing age, this book can help with perspective.
The Illuminatus! Trilogy by Robert Shea and Robert Anton Wilson. In many ways, this book changed the way I do my thinking. Not sure whether it is good or bad to completely distrust anything and everything, but at least it keeps ones mind critical instead of automatically accepting something as truth without questioning.
The book also introduced me to the concepts of discordianism, which I find having quite a few interesting points.
A great book about the development process. It also highlights how developers are doomed to keep repeating the same mistakes over and over again
Juggling is mandatory. All programmers must juggle. Sorry, it's a rule.
Rick Cook - The Wiz Biz
This is a compilation of the first two novels in a series, called 'Wizard's Bane' and 'Wizardry Compiled', respectively.
It all began when the wizards of the White League were under attack by their opponents of the Black League and one of their most powerful members cast a spell to bring forth a mighty wizard to aid their cause. What the spell delivers master hacker Walter "Wiz" Zumwalt. With the wizard who cast the spell dead, nobody can figure out what the shanghaied computer nerd is good for--because spells are not like computer programs.
Lots of in jokes for the Unix/Linux crowd to enjoy. Pretty much anybody in the software industry will enjoy it, I think.
I am about enjoy a two week break in Spain where I expect to have lots of time for relaxing and reading.
I normally read a lot of non-fiction so I'm looking for novel suggestions.
If there is another Cryptonomicon out there I'd love to hear about it!
UPDATE: In the end I took four books including Quicksilver. Quicksilver was fantastic and I look forward to continuing the series. I was disappointed with Gen X (Coupland) and Pattern Recognition (Gibson). Thanks for all the recommendations, I'm sure to return to this list when I have more free time.
See if you can run down "The Adolescence of P1," by Thomas J. Ryan:
Holds up extremely well, especially considering it was written in 1977.
There is the Wiz series by Rick Cook. I loved that series. A programmer gets transported to a world of magic and fun ensues.
There is the Otherworld series by Tad Williams. It is about a group of people that get trapped in a VR world.
I also liked Caverns of Socrates by Dennis L. McKiernan.
Well the answers are now three pages in. I'm going to have to put in a vote for Ender's Game by Orson Scott Card. It's a fast read, and enjoyable. I actually read it on a beach in St. Croix.
There are a whole bunch of books on the subject, but I read this the other day and literally could not put it down... which it pretty damn amazing given the subject matter!
The Difference Engine: Charles Babbage and the Quest to Build the First Computer
Nonfiction, but awesome awesome stories about some totally kick ass programmers:
Oh and equally cool in the hardware space:
Fire in the Valley is the history of the PC, beginning with the Altair, Jobs and Wozniak forming Apple, Gates and Allen forming Microsoft, and lots of other people and companies who were instrumental in the creation of the industry. It's long but interesting.
The Cuckoo's Egg is also very good.
Microserfs by Douglas Coupland.
Good reminder that, at the end of the day, programming is just a job and you need to make the most of the rest of your life too.
I just finished Fox Tales by Kerry Nietz ... fantastic book about a software development company!
This memoir of Fox Software details the company's growth from a college professor's side project to a 300-employee organization before its acquisition by Microsoft for $160 million in the early 1990s. Recounted are the...
Shimomura, a computer security expert that Mitnick allegedly targeted, and Markoff, a New York Times writer, tell the glamorous side of the story of a dangerous criminal mastermind. And Littman, a journalist who knew Mitnick at the time, tells a much different story of the events and raises questions about the motives behind the former book's authors.
Both books are worth checking out if you enjoy computer espionage stories, especially since the
stories events that inspired them are true.
I'd suggest The Wiz Biz by Rick Cook. It's a nice take on fantasy, having a programmer as the main character.
i've always liked "ME" by Thomas T. Thomas:
it reminds me very much of "The Adolescence of P1".
Since JPod is spoken for (and rightly so), I enjoyed Headcrash.
Neither JPod nor Headcrash is the second coming of Cryptonomicon, but they're both fun reads.
I don't know that it's 'the best' book, but an entertaining read (if not without problems) is "Takedown: The Pursuit and Capture of Kevin Mitnick, America's Most Wanted Computer Outlaw-By the Man Who Did It"
A lot of people who care a lot have complained about this book, but if you're just looking for a light read, it's quite enjoyable (if a bit old).
Chasm City by Alastair Reynolds.
On another thread, someone recommended The Pillars of the Earth by Ken Follett. I'm now halfway through it and it's pretty good. So far, the advertised similarity of cathedral-building to software-building is only vaguely apparent, but that doesn't stop it being a very enjoyable novel.
Hitchhiker's Guide to the Galaxy is absolutely worth the time spent, many times over. I took it on vacation and found myself in tears of laughter more often than not. A great quote I share when describing HHGG "When you read HHGG, you feel as if you understand the book better than anyone else who has ever read it". I found this quote to be absolutely true. I trust that you would not be disappointed.
I just finished The Raw Shark Texts by Steven Hall. It was a really good book which had me reading furiously. I think I have to read it again soon. It is a great tale with lots of twists and quarks.
Since you're looking for a programming novel, The Adolescence of P1 by Thomas J Ryan has to be on your list. As mentioned, it holds up well--though the first chunk of it is kinda trashy.
Another, better, read is Enigma, by Robert Harris. It's a historical novel about cracking the Nazi codes, Turing, and all that intrigue.
Browse cyberpunk reading lists for other ideas, but they're often not related to programming, per se, but rather electronic fantasy (usually nightmare) worlds. The Matrix is pretty typical of this genre.
Not exactly "the best", but worthy enough for this list.
The Bug (Ellen Ullman)
For the sake of completeness, Neal Stephenson's The Diamond Age: Or, a Young Lady's Illustrated Primer.
Wherein a young lady receives an AI book which is programmed to educate her and give her the proper tools in life.
SPOILER: She learns programming via her avatar in the book, who learns how to program Turing machines!
I want to learn the basic concepts like collision detection, rendering and others in a general way (keeping the library usage minimum). I believe that once my basic concepts are clear, it would help me in learning different libraries easily, like OpenGL, etc.
I know without libraries it will take long time to build things. I am doing this for learning so I don't care about productivity.
Note: 2D games are sufficient for me.
Good question - A decent place to start is
They have some pretty fun courses, no time limit and a decent forum. I actually met some good local dev's there and since have done some stuff together.
I'd also look at getting into the yearly Global Game Jam (http://globalgamejam.org/). It's a really great experience for novice and professional devs. You can also meet local people.
I mention "local people" cause sometimes its very difficult to do a game on your own - it really helps to have people to collaborate with. Though it brings in problems of its own (schedule conflicts, motivation, etc).
I'd take a look at the following books:
This are just a few books on the top of my head that I've enjoyed in my travels.
I'd focus on a language like python that'll get you up and running quickly. Not C++ - I think you lose a lot of productivity on the language it self, templates, smart pointers, vtables, etc. And then you have all the different version of DX, Win32 GDI etc. I think you'll be more productive in a different language. Maybe lua + python?
Also, I'd seriously look into mastering an engine. I wrote my own, and it was a great journey, but we never completed the GAME! We spent 6 months writing the engine, 2 months writing the game and got burnt out. Next time I'd use an engine for sure!
Unity3D works on iphone, web, desktop.
Torque is another leader, though I didn't find this one as slick as Unity.
Cocos2d is a iphone specific framework, based on a python framework. Really slick.
Another option is taking an existing game that allows Mods (HL2, Quake, etc) and build some mods for it. You can probably find tons of forums and groups already doing it and perhaps contribute to an existing project or start your own.
Another really gnalry idea would to be to get the Blue Book
And don't stop till you understand and have worked through it!!! You'd be a pretty good openGL / C coder by the time you made it through that book (cover to cover). Set aside a few months...heh.
Don't forget - you can always start with paper-prototyping games, you don't have to start building computer games.