As part of an internal programme at Sun, I am a "SEED mentor" for another Sun employee (not a former employee of MySQL, but what we Sun Dolphins call Sun Classics). He is called Alok and lives in Bangalore, and sadly, our schedules crossed so that I couldn't meet him when I was at our Bangalore offices in July. So I am mentoring someone I've met only over phone -- but we're getting along just fine.
Two of the topics we've discussed recently are blogging and books. So after hanging up after our 9 CET 12:30 Indian time mentoring session, I got the idea to combine the two: write a blog entry about the books I recommended Alok.
One thing Alok is contemplating at the moment is the degree to which he should spend time on developing his business skills vs his engineering skills. That's a familiar topic for many of us in Engineering.
So what I ended up doing was to list some of the top books I've read and used over the years. Not just the freshest and most recent ones, but the ones I remember and go back to, even over a decade after I read them. And they have a strong engineering slant to it -- the general business books are missing from this list.
Steve McConnell: I started my list by three classics by Steve McConnell, published within Microsoft Press. (The "Microsoft Press" label may be surprising, as these books are truly timeless, as opposed to providing ideas that expire with the next file format change of Microsoft Word). These books are:
- Code Complete, a Practical Handbook of Software Construction, 1993 (see Code Complete Home, Wikipedia). "Welcome to Software Construction", "Characteristics of High-Quality Routines", "General Issues in Using Variables", "Code-Tuning Strategies" are some chapters in it. Very enjoyable, enlightening reading. I read it about 1995 and have been recommending it since. I managed to convince MySQL co-founder Monty to read it in 1995, and have been debating minute points of the book with him from time to time since then.
- Rapid Development, Taming Wild Software Schedules, 1996 (see Steve McConnell's Home Page). Some chapters: "Classic Mistakes", "Software-Development Fundamentals", "Lifecycle Planning", "Estimation", "Motivation", "Teamwork", "Feature-Set Control". Same style as Code Complete, and as good. I read it in 1996, and have used its arguments to punctuate wishful thinking by customers and colleagues of the "pointy-haired boss" category ever since. In fact, I should probably have done more of it.
- Software Project Survival Guide, How to Be Sure Your First Important Project Isn't Your Last, 1998: "The Successful Project at a Glance", "Hitting a Moving Target", "Quality Assurance", "Software Release". Good, and a quick read after the previous two books, which still are the ones which stick to my mind as providing the most meat.
Steve Maguire: There is another Steve who wrote books with Microsoft Press, in fact of a very similar nature. The topic of software engineering management is so important that I am happy recommending the two additional books to Alik. When Maguire wrote these books, at least I was spending much more of my time using Microsoft products than today, and the lessons he writes about are (as I see it) relevant also in Open Source.
- Writing Solid Code, Microsoft's Techniques for Developing Bug-Free C Programs, 1993: "Assert Yourself", "Step Through Your Code", "Risky Business", "The Rest Is Attitude". This is C specific, for good and for bad, compared to the language-unspecific Code Complete.
- Debugging the Development Process, Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams, 1994: "Laying the Groundwork", "The Systematic Approach", "Scheduling Madness", "Constant, Unceasing Improvement", "That Sinking Feeling". The preface starts with the sentence "This book might make Microsoft sound bad." which to me displays an attitude that I like, because we all know we make mistakes and pretending not to do so is not getting us anywhere -- whereas learning from other people's mistakes may do so.
A few other Software Engineering reference books: I also want to list three other books on IT for Alok.
- A Discipline for Software Engineering, Watts S. Humphrey, 1995. This was recommended to me after I read the McConnell books. "The Personal Software Process Strategy", "Why Forms Are Helpful", "Why Make Plans", "Measuring Software Size", "Popular Estimating Methods", "Design and Code Reviews".
- The Capability Maturity Model, Guidelines for Improving the Software Process, Carnegie Mellon University, Software Engineering Institute, 1995."Introducing Software Process Maturity", "Customer Satisfaction", "Skipping Maturity Levels". Introduces CMM and its five maturity levels of Heroics, Repeatable, Defined, Managed and Optimizing. I wish MySQL were more mature and less heroic.
- Agile Project Management with Scrum, Ken Schwaber, 2003. Yes, I have bought new books this century. "Scrum Roles", "Scrum Flow", "Product Backlog", "Sprint Backlog", "Bringing Order From Chaos", "Project Reporting -- Keeping Everything Visible". We try to apply Scrum for MySQL, but due to our virtual nature and to the timezones, we need to apply it a bit.
Nassim Nicholas Taleb: Next, I took the step towards business through the more philosophical. I read both NNT books this summer, and I found them very inspiring and insightful.
- Fooled by Randomness, The Hidden Role of Chance in Life and in the Markets, 2004 (see NNT's homepage, Wikipedia): "If You're So Rich, Why Aren't You So Smart?", "Europlayboy Mathematics", "Wittgenstein's Ruler". NNT has a somewhat peculiar writing style (mixing facts, opinion and personal anecdotes), but he clearly explains that random events influence us more than we believe, and what we should do about it. Winners tend to attribute their winning to being smart and hard-working, losers attribute their losing to bad luck.
- The Black Swan, The Impact of the Highly Improbable, 2007 (see Wikipedia on the Black Swan book and the Black swan theory). "Umberto Eco's Antilibrary", "How Not To Be A Sucker", "The Narrative Fallacy", "What Do You Do If You Cannot Predict". About why we don't know so much about the future, and why it's dangerous to pretend that we do, and what we should do instead. One of the best books I've read this century. Especially now in the financial crisis, there is plenty of material on the book and NNT's thinking, on Wikipedia, on NNT's own website and elsewhere.
Just One (Semi-) Business Book: I wanted to concentrate my advice to Alok on engineering and engineering management, but there's one book that describes the borderline from engineering to sales very well:
- Writing Winning Business Proposals, Your Guide To Landing the Client, Making the Sale, Persuading the Boss, Richard C. Freed, Shervin Freed, Joe Romano, 1995. "The Slots in a Proposal's Generic Structure", "Desired Results, Benefits, and Objectives", "The Four Buying Roles", "Determining What to Weave in Your Web of Persuasion". Very self descriptive book title, and it contains great advice about persuading both clients and bosses, in writing.
Meta-books on self management: At this point, I started to have a bad conscience towards Alok. Hey, already eleven books in my recommendation list. How is he ever going to have the time to read them, and to get any real work done at the same time? Thus, I decided to address those issues one at a time.
- The PhotoReading Whole Mind System, Paul R. Scheele, 1993. "Read this easy-toread book and all books will be easy to read", "5 breakthrough steps for improved comprehension and retention", "The secrets to PhotoReading at 25,000 words per minute", "5 time management strategies for instant results". I still re-read (ehh, re-glance) the book at times, and have recommended it to many people, the latest one being my son.
- Getting Things Done, The Art of Stress-Free Productivity, David Allen, 2001. It's about getting peace of mind to concentrate on what you (through your systematic pre-planning) know is the most important thing. It has plenty of associated GTD services and software; personally, I'm just using Omni Outliner and my Thunderbird inbox. But then again, I'm rereading this book just now.
To round it off, I wanted to provide Alok with an entertaining book, without too much of an emphasis on usefulness, but still some practical usability. In that category of books, I try to avoid English books, in favour of Swedish and German (as I tend to get more than my fair share of reading in English anyway), so I'm limited to a fraction of the books I would want to recommend. My choice ends up in a book recommended to me by Simon Phipps:
- The Curious Incident of the Dog in the Night-Time, Mark Haddon, 2003. Wikipedia says "The story is written in the first-person perspective of Christopher John Francis Boone, a 15-year-old autistic boy living in Swindon, Wiltshire. Although Christopher's condition within the autism spectrum is not stated explicitly within the novel, the summary on the book's inside cover describes it as Asperger syndrome." And while that doesn't sound entertaining, it is. It is both sad and fun, and I tend to believe Simon's claim that it "helps understand Open Source developers".
So, Alok, happy reading! I hope I haven't inundated you with much too long a list of Recommended Reading.