Books

  • Library covers all computer science books I have read, am reading and would like to read in the future. That’s a large number of books, and I would like to mention a few outstanding books, which have helped me a lot in my study.

C

  • Practical C Programming is more that one book on C language; it covers the complete life cycle of software development. I could recommend it as the first book for anyone who’s interested in CS.

  • The C Book focuses on more C language and its standard. It’s difficult to remember all the details on the first time, so I revisit this book as I was writing one small real-time kernel.

  • C Programming FAQs: Frequently Asked Questions I found the website before knowing this book. All the questions strike my core doubts on C pointer and array, and explain them in very clear manner. I would consider this as the definite guide on C pointer and array.

Java

  • Thinking in Java is regarded as the bible of Java. However, I was unaware of this while reading. Most OOP concepts are explained clearly by him and Java serves as one good medium to consolidate all the ideas. I have read the second version twice, very carefully, and the third version once, briefly. I spent considerable amount of time on understanding generic in Java, but I still could not unfold all the mystery of it. (Using them is relatively easy, fortunately.) I could say Java is the best choice for learning OOP, and this book (at least the part before generic) is the best resource available so far for learning Java.

  • Head First Design Patterns Design patterns are inevitable while talking about OOP. I firstly heard of this buzz word from one casual conversation on Gang-of-Four book, and tried to read it, for a lot of positive reviews are given to it. Unfortunately, C++ is used in that book, and I had some difficulty following what the authors trying to cover, so I gave up without even finishing the first chapter, IIRC. After some time, when I was watching one video presentation, the presenter asked how many have heard of this GOF book and how many have finished reading the book. It turned out that almost everyone heard of this book, but only a few have finished it. Then, he pointed out that those who hasn’t finished reading the book should not be feel guilty, for it’s indeed quite difficult book. Head First Design Patterns is recommended by him as one alternative. It’s after watching this presentation that I started reading this book, and finished it in two or three months, IIRC. Even though one isn’t necessary to be an expert on design pattern, they mustn’t be completely lost when someone else discusses it.

  • Effective Java provides some expert experience on OOP. I don’t have much experience on working large OOP projects, so I couldn’t appreciate its true power, if any. However, some ideas I do use quite frequently include mutable vs immutable object, and equality between mutable objects (hashcode), etc.

Python

  • Dive Into Python I read both version 2 and 3 of this book. Python is one simple and elegant language, and it’s quite easy to pick up. By now, I could basically read Python code with reasonable speed and write it using Google as my aid.

Ruby

I didn’t learn Ruby quite systematically; I haven’t read any books on Ruby completely. Mostly, I will just use stackoverflow to find what I need. Maybe, I will find one and read it someday.

CoffeeScript

  • The Little Book on CoffeeScript The good part of JavaScript. I more or less use it as the alternative of scheme (could stand the excess parenthesis) while following SICP video lectures if static languages could do the job easily. Top one general purpose scripting language for me, at least.

Haskell

  • Real World Haskell is probably too difficult to be the first book on learning Haskell, at least to me. I managed to finished the part before monad, then it’s suspended indefinitely.

  • Learn You a Haskell is one much more rookie-friendly introductory material. I managed to cover all the first ten chapters, but suspended it on Functor chapter (monad). I guess I need better material to motivate myself to proceed.