Recommended Reading
As suggested by a comment in Luis's blog... Here are some books that various GNOMErs think other GNOMErs should read. Please add books, add notes, and add yourself to the "Recommended By" lists of books you recommend.
Note: don't edit this page in Moin's GUI mode; it confuses the editor and you're likely to get errors. Just use text mode instead.
Contents
Software
The Mythical Man-Month: Essays on Software Engineering (20th Anniversary Edition)
by Fredrick Brooks, Jr.
I just re-read this recently and was amazed at how relevant a lot of it still is, despite having been written about things that happened back when time_t was a negative number.
- All programmers are optimists. Perhaps this modern sorcery especially attracts those who believe in happy endings and fairy godmothers. Perhaps the hundreds of nitty frustrations drive away all but those who habitually focus on the end goal. Perhaps it is merely that computers are young, programmers are younger, and the young are always optimists. But however the selection process works, the result is indisputable: "This time it will surely run," or "I just found the last bug."
Also, it's the source of all sorts of things that you ought to know about, like Brooks' law, the second-system effect, and "No Silver Bullet". (Yes, you could just follow the links and read the Wikipedia articles, but the original is better, and has charts and graphs and anecdotes about ancient operating systems.) -- DanWinship
Wetware
Beyond the Desktop Metaphor: Designing Integrated Digital Work Environments
by Victor Kaptelinin and Mary Czerwinski (Editors)
Amazon emailed me to recommend “Beyond the Desktop Metaphor: Designing Integrated Digital Work Environments.” It looks like a deep, serious study of options for moving beyond a desktop metaphor. Obviously I haven’t read it, nor do I plan to (Property Law calls) but it looks like it should be interesting to anyone who wants to seriously rethink the desktop. -- Amazon's AI, via LuisVilla4's blog entry about this book.
The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
by Alan Cooper
A usability classic. Lots of hackers don't like it because Cooper is very "first thing we do is kill all the programmers" at times, but you have to read it imagining that he's just spent several months being forced to use the very very worst software ever written, and so is understandably angry and sort of ranting, but making good points in his rants. If you get beyond the attitude, there's a lot of great stuff here. Also, it's not too long (250 pages). (Note to self: reread this and add better notes.) -- DanWinship
See also: About Face 2.0, also by Cooper, is slightly less ranty and slightly more applied. I highly recommend it. It is, however, a very dense, serious read. If you're looking for something with a less dense approach (but as a result, slightly less information), try Designing From Both Sides Of The Screen. -- LuisVilla4
- Book
The Design of Everyday Things by Donald Norman
- Recommended by
- Notes
- This is a design and usability book which will change your life. I don't mean that as hyperbole - once you read this book, your way of looking at the world and living in it will change. Never again will you pull a door handle you should have pushed without thinking "affordance". Never again will you spend thirty seconds figuring out how some common household item works without wondering whether the designer could have done a better job. And as a programmer, you will think a little bit more about making your users' lives easier by putting a little thought into your design.
- Book
Emotional Design: why we love (or hate) everyday things by Donald Norman
- Recommended by
- Notes
- In the Design of Everyday Things, Norman addresses the pure utility of objects - why so many award-winning designs are unusable and why. One comment he makes is that designers reject some of his conclusions, because they consider that following his advice would make usable, but ugly and boring, design. In this follow-up book, he explores a counter-intuitive (but proven) claim - all else being equal, aesthetically pleasing designs work better. What in-built components of the human psyche dictate our reactions to objects we use every day? What makes us have emotional attachments to objects? How can we tap into those feelings as computer programmers? This is another great exploration of the human relationship with things, and is useful for everyone who wants their users to love their programs.
- Book
Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Sussman, and Julie Sussman (available online!)
- Recommended by
- Notes
This is the most beautiful book on Computer Science ever written. It is the first-semester textbook for Computer Science at some of the best universities, but it's far from trivial material. The book teaches you how to program using Scheme (a dialect of Lisp), but the important part is that it really teaches you how to write beautiful programs with solid principles. If you already know programming, reading this book will reorder and clean up all the ideas in your head, and you'll learn a bunch as well. If you didn't know Scheme/Lisp before, this book will also let you know why GNOME seems so Lisp-y at times. You'll see the real reason for things like the callback/user_data idiom, filters, accumulators, and other constructs. You will be a much better programmer after reading this book, even if you don't use Scheme ever again in your life.
- Book
Computer Organization and Design: The Hardware/Software Interface, by David Patterson and John Hennessy
- Recommended by
- Notes
- If you are interested in performance, you should read at least parts of this book. It explains how CPUs, memory, and I/O all work at a low level, and how they can be exploited. There's a beautiful explanation of how the CPU caches information from RAM: if you ever wondered about the difference between L1 and L2 caches, fully-associative or N-way associative caches, etc., you should read this. You'll learn about page tables, page faults, the translation-lookaside buffer (TLB), and other concepts about virtual memory that you need to know to write fast programs.
- Book
Getting Things Done, The Art of Stress-Free Productivity, by David Allen
- Recommended by
- Notes
Getting Things Done(GTD) is a book on being productive for today's knowledge workers. These days you almost drown in information from so many sides (e-mail, web, phone, rss, snail mail,...), and it becomes so hard to decide what to do next, that you cannot getanythingdone. David Allen proposes a nifty system for categorizing all the incoming stuff, and deciding what's your 'NextAction'.
I've read quite some books on productivity. but this one is by far the most useful. And there are lot of good ideas there for Gnome -- to become theProductive Desktop:)
- Book
- Recommended by
- Notes
- This book is a design patterns like approach into user interfaces, it has a collection of problems and a couple of recipes to solve them. Examples are taken from several devices and platforms such as Mac OS X, GMail, PDAs, so it is not specific to "native apps" or the web, but very high level and practical.
- Book
Don't Make Me Think, by Steve Krug
- Recommended by
AlbertoRuiz, Kathy Sierra in her GUADEC 2006 keynote
- Notes
- A really human oriented book, although is web specific, it has some tips on how to understand the whole usability thing, listen and learn from users and perform usability tests without much effort and resources and how to identify problems from them.
- Book
Advanced Programming in the UNIX Environment, by Richard Stevens
- Recommended by
- Notes
- This book will teach you what Linux and UNIX are all about, from the bottom up. I wish I was young enough to read this again for the first time.
- Book
The C Programming Language, by Brian W. Kernighan and Dennis M. Ritchie
- Recommended by
- Notes
- This is the most succinct and beautiful description of the C language, straight from the authors' mouth.
- Online Book
Magic Ink, by Bret Victor
- Recommended by
- Notes
- An online study with practical examples pleading to redefine the way we display information while avoiding interaction.
- Book
Elements of Programming Style by Brian W. Kernighan and P. J. Plauger
- Recommended by
- Notes
Like Structure and Interpretation of Computer Programs above, this book teaches you how to write clean, readable, aesthetically beautiful code. In the open source development model, the ability to write code that is understandable by your peers is probably the most important skill you can have (along with the ability to communicate clearly and concisely in English).
The authors take examples of actual code from programming textbooks, analyze its shortcomings from a stylistic standpoint, and rewrite them cleanly. After most examples is a simple, one-line guideline: "Replace repetitive expressions by calls to a common function", "Don't patch bad code -- rewrite it", and "Make it right before you make it faster".
There are some downsides to this book. First, it's out of print. You'll have to pick up a used copy somewhere -- I got mine off of Amazon in excellent condition for about $10 about 4 years ago. Secondly, all the code samples are in Fortran or PL/I. This might be a challenge to inexperienced programmers who might get stuck on the syntax of these older languages, but fortunately the analysis of the examples by the authors mitigates this greatly. Experienced programmers should have no problem with these languages.
This book is -- or ought to be -- essential for any programmer, no matter how novice or experienced.
- Book
Democratizing Innovation, by Eric von Hippel (link includes CC-licensed pdf, but also available in print)
- Recommended by
- Notes
Interesting reading on how innovation can and does happen- not in R&D labs (which is good since GNOME doesn't have any) but out in the real world.
- Book
Flow: the Psychology of Optimal Experience, by Mihaly Csikszentmihalyi
- Recommended by
- Kathy Sierra in her GUADEC 2006 keynote
- Notes
A book on how people achieve 'optimal experience', what the author calls 'flow'. "[C]ontains practical suggestions for how to promote conditions which are conducive to creating a flow experience." Kathy brought it up in the context of encouraging programmers to think about user 'flow' when designing software.
- Book
On Intelligence, by Jeff Hawkins (co-founder of Palm). (see also the book's website)
- Recommended by
- Kathy Sierra in her GUADEC 2006 keynote
- Notes
- Much of Kathy's talk discussed what things animate the human-animal mind- things like faces, play (which is good for survival), the unusual, the different. Doing these things, and trying to avoid the dull and the common, makes your software better, because they engage the mind instead of dulling it. In that vein, she recommends this book as a way to better understand the mind and hence to better understand the user.