If there is one thing I do a lot, it’s reading. We Chinese have a saying, “读万卷书不如行万里路”。 The literal translation being, “It is better to have travelled ten thousand miles than have read ten thousand scrolls. (It’s actually not ten thousand miles but ten thousand 里, ‘miles’ just sounds better) In short, it means that practical experience is more important than theoretical knowledge.

Not that I disagree with that, but one can still learn a lot from reading. To quote Isaac Newton,

“If I have seen further it is by standing on the shoulders of giants.”

There are a lot of giants we can learn from, along with wisdom from others’ life experience:

Competitive Programming 2

Authors: Steven Halim, Felix Halim

Website: https://sites.google.com/site/stevenhalim/

Genre: Algorithms, Competitive Programming

NOTE: There is a 3rd edition of the book available. I strongly recommend you to purchase the 3rd edition instead of the 2nd edition, as it contains more content than the 2nd edition, along with updates from the feedback of several batches of students in the CS3233 module at NUS.

This is one of the few technical books that I have read cover to cover, and certainly one of the most valuable books I own. It contains working C++ code of many computer algorithms commonly seen in programming contest problems, and covers some rather unconventional algorithms, data structures and problem solving methods that you probably will not encounter unless you have dabbled in competitive programming. And you must dabble quite seriously in it to attain the knowledge contained in this book, as both of the authors did.

This book is a very solid introduction to competitive programming, and will really stretch your mind especially if your daily programming work is not too algorithmic. To give a rough idea of what I mean by stretching your mind, here is a list of 10 of the algorithms / data structures covered, among the many:

  • Binary Indexed Tree
  • Convex Hull
  • Disjoint Set data structure
  • Dynamic Programming - various techniques
  • Fast Matrix Exponentiation
  • Maximum Flow
  • Minimum Spanning Tree
  • Sieve of Eratosthenes
  • Suffix Array
  • Tarjan’s Strongly Connected Components Algorithm

The above is just a short list of what you will be learning. Of course, you will have to do some of the recommended UVa Online Judge problems to get the most out of this book. Felix Halim, one of the authors of this book, has a site here (http://uhunt.felix-halim.net/) which will help you greatly should you choose to take up this quest.

Oh, and did I mention, I got this book for 20SGD (20 Singapore Dollars). Knowing how good it is, I will gladly purchase it even if it costs 70USD, which is the standard price of a Computer Science book.

As an update, the authors have kindly made the first edition of the book freely available. Go to the book site, and find the link under the “Selling Price (eBook)” row for the first edition, or click here to download it. If you like it, go purchase the 3rd edition and support the authors’ work!!!


Authors: Koh Khee Meng, Tan Eng Guan

Website: http://amzn.com/B0058BNM7E

Genre: Combinatorics

A very gentle introduction to the field of combinatorics, with emphasis placed on intuition, understanding and application over formal proofs. There is not much prerequisite knowledge required, except for basic high school mathematics. This book was probably written for upper secondary / junior college students in mind (15 to 18 years of age).

Table of Contents:

  1. The Addition Principle
  2. The Multiplication Principle
  3. Subsets and Arrangements
  4. Applications
  5. The Bijection Principle
  6. Distribution of Balls into Boxes
  7. More Applications of (BP)
  8. Distribution of Distinct Objects into Distinct Boxes
  9. Other Variations of the Distribution Problem
  10. The Binomial Expansion
  11. Some Useful Identities
  12. Pascal’s Triangle
  13. Miscellaneous Problems
  • Books Recommended for Further Reading
  • Answers to Exercises
  • Index

Big pluses:

  • Content is very easy to understand and examples are used to illustrate the principles; great for newcomers to the field and can serve as a very quick recap to someone more experienced
  • Depending on how you look at it, this can be a good or bad point, but I’ll state this as a good point because of the target audience of the book: There is less of an emphasis on extremely formal proofs but a lot more emphasis on intuition.
  • Written in a rather relaxed style, you won’t find this a heavy read unlike a typical math book
  • Extremely small and light unlike typical math books
  • Exercises scale up in difficulty so you won’t get too bored
  • Answers to exercises are available at the back of the book; most of them are given as mathematical formulae (instead of just some large numbers) so you can check your intuition vs. the authors’ intuition


  • While answers to the exercises are available, there are a number of calculation errors. These can be quite frustrating if the reader is not confident about his / her solution.
  • Take it that I’m complaining, but a very small number of exercises are very, very tough, even for someone like myself who has taken several mathematical courses at the undergraduate level. I had to consult the solutions manual (sold separately from this book) to find out the solutions. But some amount of difficult exercises is expected from pretty much any math book.
  • The above 2 points make it pretty much a must to purchase the solutions manual for an optimal reading experience

Statistics Done Wrong

Author: Alex Reinhart

Website: http://www.statisticsdonewrong.com/

Genre: Statistics

Seeing how I understand the big ideas in this book but some parts still leave me in a daze after my second reading, I think I am currently quite ill-equipped to write a review that will do justice to this book, but I shall do it anyway - I’ll just do up a better one when I gain more knowledge in Statistics.

Have you ever found yourself in the following scenario?: Say you’ve read a news article about a research finding which claims that food \( A \) provides a health benefit \( B \). Some time later, a different team of researchers claim that this same food \( A \) does not provide health benefit \( B \). On top of your surprise, you wonder why the two scientific studies show contradictory results. Is one team of researchers correct and the other wrong? Could it be possible that one of them is lying?

If your answer to the above question is yes, then Statistics Done Wrong is the perfect book for you - it illustrates some of the most common mistakes in Statistics that occur in scientific research. If you’re like myself and do not come from a hard science background at the undergraduate level and beyond - you might be pleasantly surprised to find out that that Statistics is used very heavily in scientific research. If you have some Statistics background, you will realize that some of the mistakes made by scientists are extremely fundamental and obvious to even a beginner in Statistics - ok, I have to admit, it has to be a very thoughtful beginner who has made the effort to learn the subject rigorously. And apparently, the mistakes highlighted in this book are the more fundamental ones - scientists do make more complex mistakes in Statistics. This paints a rather dismal picture - if Science could be wrong, what about everything else?

But don’t worry too much, for there are scientists who do realize that and are pushing for more rigorous Statistical methods in scientific research - this book is one such effort. Are you a scientist yourself? Read this book. Do you have a friend who’s a scientist? Give him/her a copy of this book.

To spoil things a little bit for you, these are probably the top 3 recurring themes in this book:

  • the misinterpretation and/or abuse of p-values and statistical significance
  • statistical power and the lack of it
  • multiple comparisons

There are a few more recurring themes but I shall not spoil the fun for you =)

If you are someone who has to deal with data in your day to day work, unless you already have substantial expertise in Statistics, at least at the graduate level, I believe that this book will make you question a lot of the assumptions and decisions you’ve made and will be making when it comes to data - quite likely it will shake your “belief system” to its foundations. I may be talking trash here but I’ll still say this: I think this book has never been more important, given how much hype the whole data movement has built up, because more and more people are going to get into a data related field not knowing what they’re doing and they will make a lot of mistakes that are highlighted in this book. Are you someone who works in a data intensive field? Read this book. Have a friend who works in a data intensive field? Give him/her a copy of this book. I sincerely thank you for it.

If there’s one thing you’ll get from reading this book, you will probably walk away doubting the validity of new scientific breakthroughs, especially for spectacular breakthroughs - at the very least, in cases where it applies, you will wonder if the stated effect size is exaggerated.

Do note that even though there’s a free copy of the book on the accompanying website http://www.statisticsdonewrong.com/, I’ve briefly browsed through it and some of it differs from the hardcopy that I own - if I’m right, the hardcopy is more up to date and has slightly more content. So do buy a copy of it and support the author’s work!!!

JavaScript: The Good Parts

Author: Douglas Crockford

Genre: JavaScript

A lot of people have said that, if there is only one JavaScript book that you read, this should be the one. I wholeheartedly agree with that statement. As a programming language that looks a lot like Java and C on the surface, but wildly deviates from them once you dig deep into it, JavaScript has a lot of quirks and gotchas that can really catch you by surprise if you assume it to be the same as the languages that it looks like. Due to JavaScript’s widespread availability on virtually all modern computers (modern web browsers come along with advanced JavaScript compilers) and its widespread usage, this can turn out to be a big problem if a JavaScript programmer does not have a good understanding of the language.

To understand what I mean, try answering the following questions:

  • What are the scoping rules for JavaScript variables?
  • How many different types of function invocation are there?
  • What happens when you pass too few or too many arguments to a function?
  • What is a really bad thing that can happen when you forget to prefix the new keyword when calling constructor functions?
  • How does one create private state in JavaScript?

If you are unable to answer some of the questions above, or if you are shocked by these questions, then “JavaScript: The Good Parts” will be a great read for you, for you will learn the above, and a lot more, after reading the book. Most importantly, you will learn about the well designed portions of the language from Douglas Crockford, one of the greats of JavaScript.

That said, everything is covered within less than 200 pages; the pace is fast and some of the content is deep. The author has mentioned that some parts of the book will require several readings for the reader to achieve full understanding, and I personally agree with it. The aspiring reader does not need to know any JavaScript, but is strongly recommended to have some programming experience.

If there is one book that “JavaScript: The Good Parts” resembles, it is “The C Programming Language” by Kernighan and Ritchie. Terse, some deep content, slightly dated but still very relevant, brings you up to speed but won’t make you an expert, widely regarded as a classic in its field.