My Favorite CS Books!

On Wednesday, 22nd April 2015, I handed in the report for my final year project. This was the last piece of work to be submitted as part of my degree and signaled the end of my time as an undergraduate. At the moment, I am in the limbo period of not technically being a graduate (a graduand is perhaps the correct phrase?).

This newfound freedom has encouraged me to write about some of the computer science books I have read and been influenced by, over the past 4 years. The majority of these books are quite approachable and I think could be picked up by someone without a technical background.

The Design of Everyday Things

alt text

by Donald Norman

I would consider Design of Everyday Things (DoET) to be a must read for anyone involved in technology or design. DoET was one the seminal texts on UX and remains relevant even today. This is a book that was designed to be read by anyone. Don uses excellent analogies to explain the problems with the design of everyday objects (such as door handles) and how they can affect the user.

If you are involved in the design of any product that will be used by humans, you should read this book. DoET can help make you aware of the user and potential problems that they may face. This should help you when making future design decisions.

Inside the Machine

alt text

by Jon Stokes

Like many computer science undergrads I tried to read Hennessy and Patterson. I really did try but H&P can be quite dry at times and not to mention it's absolutely huge. H&P has been the staple of courses in computer architecture, since the late 70's but it is a literal tome. The accessibility of H&P, for someone starting off in computer architecture, leaves much to be desired.

This is why I like Inside the Machine (ItM). ItM was written by a co-founder of Ars Technica and it doesn't try to be a hardcore computer science textbook. The content in ItM is very accessible and could probably be understood by anyone with a basic knowledge of computers. I would even describe ItM as being the computer science equivalent of a popular science book. ItM is a must read for anyone interested in computer architecture but are put off by the stalwart texts.

Design Patterns in Ruby

alt text

by Russ Olsen

I originally read Design Patterns in Ruby for two reasons: to introduce myself to Ruby and to learn about design patterns. While Olsen doesn't cover all of the Gang of Four design patterns, he covers those that he felt were relevant to Ruby and introduces some news ones that apply specifically to Ruby.

I feel this is a great book for anyone interested in learning a little bit about Ruby or design patterns. Olsen is very clear in his descriptions and uses analogies whenever possible. I would consider this to be one of the best technical books I have ever read.

Code

alt text

by Charles Petzold

I'm not quite sure how to accurately describe Code. It at times seems like a history book, while also an being an introduction to: logic, microprocessors, micro-coding, and programming. It's remarkable that so much fits into such a short book.

Petzold is a fantastic author who uses entertaining analogies to explain difficult technical concepts. Like Inside the Machine, I would consider this to be one of the few books that are the equivalent of a popular science book for computer science. I would recommend this book to anyone who is interested in learning about how computers work and don't want to spend 4 years doing a degree.

The Mythical Man-Month

alt text

By Fred Brooks

I have to admit I read this book quite recently (despite the fact that it has been on the reading list for some of my modules for 3 years). My reasoning for including it might also differ to my lectures reasoning though. I would consider this to be a great first hand account of the history of Software-Enginnering. Written in the 70's and later expanded upon in the 90's, it gives a great insight into what software engineering was like in it's infancy and how it gradually changed over 20 years.

The Mythical Man-Month celebrates it's 40th anniversary this year and is still a very insightful and entertaining read. I would recommend anyone interested in the history of computer science to read it.

Programming Collective Intelligence

alt text

By Toby Segaran

I first read Programming Collective Intelligence when I was working for a startup a few years ago. One of the projects that was in the pipeline was to implement a recommendation system and a friend of mine recommended I have a look at this book. The decision to read this book sparked my interest in machine learning and recommendation systems (which was the topic of my final year project).

This is a great book to introduce someone to machine learning. The book gives a high level overview of neural networks, clustering, collaborative filtering, genetic algorithms, and classification, to name but a few. This book doesn't go into each algorithm in huge detail but instead it explains the principles behind them. I would consider this a great stepping stone for getting interested in machine learning.

Real World Haskell

alt text

By Bryan O'Sullivan, John Goerzen, Donald Bruce Stewart

Some people may wonder why I have chosen Real World Haskell (RWH) over the more popular Learn You a Haskell (LYaH) and the main reason is that RWH covers pretty much everything in LYaH and more. The examples in RWH are also much more practical than the ones in LTaH. Personally I think LYaH is a great book to get started with Haskell but it doesn't really show you what you can do with it. Some people will probably disagree with me about this but it's how I feel having read both books.

That minor rant aside, this book should be read by anyone interested in learning about functional programming or who have read LYaH and want to learn more about Haskell.

Others

There are a few books which I should mention but didn't make it onto my list because I am still in the process of reading them.

I am sure I have forgotten a few other books so I will add them to the list in time.

λ;