I’d say that if there’s one easy way to summarise how I work, it’s as an information focus. I’m not great at following a solution all the way to the bitter end so you should never let me be a programmer (ahem): when all that’s left is the second 90% of the effort in fixing the bugs, tidying up edge cases and iterating on the interaction, I’m already bored and looking for the next thing. Where I’m good is where there’s a big problem to solve, and I can draw analogies with things I’ve seen before and come up with the “maybe we should try this” suggestions.
Part of the input for that is the experience of working in lots of different contexts, and studying for a few different subjects. A lot of it comes from reading: my goodreads account lists 870 books and audiobooks that I’ve read and I know it to be an incomplete record. Here are a few that I think have been particularly helpful (professionally speaking, anyway).
- Douglas Adams, The Hitch-Hikers’ Guide to the Galaxy. Adams is someone who reminds us not to take the trappings of society too seriously, and to question whether what we’re doing is really necessary. Are digital watches really a neat idea? Also an honourable mention to the Dirk Gently novels for introducing the fundamental interconnectedness of all things.
- Steve Jackson and Ian Livingstone, The Warlock of Firetop Mountain. I can think of at least three software projects that I’ve been able to implement and describe as analogies to the choose your own adventure style of book.
- David Allen, Getting Things Done, because quite often it feels like there’s too much to do.
- Douglas Hofstadter, Godel, Escher, Bach: An Eternal Golden Braid is a book about looking for the patterns and connections in things.
- Victor Papanek, Design for the Real World, for reminding us of the people who are going to have to put up with the consequences of the things we create.
- Donald Broadbent, Perception and Communication, for being the first person to systematically explore that topic.
- Steven Hawking, A Brief History of Time, showing us how to make complex topics accessible.
- Roger Penrose, The Road to Reality, showing us how to make complex topics comprehensively presentable.
- Douglas Coupland, Microserfs, for poking fun at things I took seriously.
- Janet Abbate, Recoding Gender, because computering is more accessible to me than to others for no good reason.
- Joshua Bloch, Effective Java, Second Edition, for showing that part of the inaccessibility is a house of cards of unsuitable models with complex workarounds, and that programmers are people who delight in knowing, not addressing, the workarounds.
- Michael Feathers, Working Effectively with Legacy Code, the one book every programmer should read.
- Steve Krug, Don’t make me think!, a book about the necessity of removing exploration and uncertainty from computer interaction.
- Seymour Papert, Mindstorms, a book about the necessity of introducing exploration and uncertainty into computer interaction.
- Richard Stallman, Free as in Freedom 2.0, for suggesting that we should let other people choose between ther previous two options.
- Brad Cox, Object-Oriented Programming: An Evolutionary Approach, for succinctly and effortlessly explaining objects a whole decade before everybody else got confused by whether a dog is an animal or a square is a rectangle.
- Gregor Kiczales, Jim des Rivieres, and Daniel G. Bobrow, The Art of the Metaobject Protocol showed me that OOP is just one way to do OOP, and that functional programming is the same thing.
- Simson Garfinkel and Michael Mahoney, NEXTSTEP Programming: Step One was where I learnt to create software more worthwhile than a page of BASIC instructions.
- Gil Amelio, On the Firing Line: My 500 Days at Apple shows that the successful business wouldn’t be here if someone hadn’t managed the unsuccessful business first.
There were probably others.