At the end of every year, I write a review of books I have read in the past year. This year, I’m splitting the book reviews into 2 blogs: tech and non-tech books, as they probably cater for different audiences.
Check out the full 2020 book review blog here.
This year, I read a couple of technical books, some of which were a real intellectual delight to read. Maybe you would find them helpful too.
Head First Design Patterns | Elisabeth Freeman & Kathy Sierra
Finishing reading this 600+ page book is officially one of my 2020 achievements.
Head First Design Patterns is one of the most enlightening books I have read in the past few years. A big thank-you to my former colleague who recommended this book to me instead, when I put my hand on the “notorious” Design Patterns: Elements of Reusable Object-Oriented Software.
This book is inspiring in many ways. For one thing, the authors really write in order for readers to understand, instead of just displaying pages of information after information. I have learned a few things about how to grasp abstract or difficult concepts as well as how to get them across from this book. For example, loading a message with emotional context (e.g. surprise, humour or interest) is a useful trick to leave a more noticable impression on the recipients, because our brain is wired to pay attention to the biochemistry of emotions. Similar techniques include usage of visual cues, conversational style, stories and more. Tricks like those are all over the place in the book, making it by far the most fun and joyful technical book I have ever experienced so far. If you happen to be one of the victims of dull and serious-looking tech books, try this one.
Second, I thoroughly enjoyed the content itself too. I’m still quite new to design patterns. Getting to look at code at the patterns level is a paradigm-shifting idea for me. After I started reading this book, I’ve started to recognise places in the codebase where I could use e.g. the factory pattern or the iterator pattern. In addition, it makes it easier to read others’ code and communicate using a shared vocabulary after I know patterns. Therefore even if you are not interested (!) in a delightful reading experience, this is a great pattern beginners’ book solely for practical purposes too. It explains the important design patterns very well and truly drives the OO basics and principles home.
Data Structures and Algorithms with Python | Kent D. Lee & Steve Hubbard
One silver lining of 2020 is that many publishers and universities have made available lots of valuable content online for everyone. I downloaded this E-Book for free when Springer put together a list of specialised e-books online free of charge for a short while this year. Thank you, Springer!
Most algorithm books are not written with Python, so this one (it’s designed as a university textbook) would be a fair option if you are a Python programmer. One thing to note about this book is that the code quality is not at a professional level. Quite a handful of code snippets are not compilable, likely due to written in an outdated Python version and not enough effort invested to proof-running of the code examples. Besides there’s not much style or patterns in the code. Nevertheless, it’s a good solid review of Python data structures for me.
The authors discuss lower level, in-depth Python-specifc knowledge, e.g. how and why lists in Python are implemented internally in a certain way and how that affect the computational complexity of various list operations. If you type along, you will gain a good understanding of what the built-in data structures and also fancier ones like trees and heaps look like in Python.
I like going back to the fundamentals from time to time, because that’s what everything else is built upon and that’s what I need to acutally understand a concept. Besides, when you start to think about performance, sound knowledge of the basic data structures is always helpful.
我的第一本算法书 Algorithms Illustrated | 石田保輝 & 宮崎修一
Originally written by 2 Japanese authors (「アルゴリズム図鑑」or Algorithms Illustrated) and translated into Chinese and Korean, this book has been a hit in the East Asian market. After reading it, I’d say that it deserves its fame.
This book would be a really good starting point for someone who has never learned about computer algorithms. I wish I could be one of the those lucky people. The more learning experience you have, the more you realise the privilege an absolute beginner has – they can still choose how their journey would begin in that new field. A bad start can have as lasting negative impact as one’s life. Just think about the many kids who hate a certain subject for years after encountering a lousy school teacher.
This book explains 7 data structures and 26 algorithms through colorful step-by-step illustrations and highly accessible language. Even though I already knew most of the information, I still learned something new. For example, it occurred to me for the first time why stacks were used for DFS and queues for BFS algorithms.
I hope this book would get translated into more languages to help pave a less painful learning journey into algorithms for a wider audience.
Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation | Jez Humble & David Farley
As a person relatively new to the tech industry, this book is an eye opener for me on the software engineering landscape prior to the new CI/CD norm. Although it’s a classic, I am not sure whether this textbook-like 400+ page book is worth recommending. In my opinion, in most cases, if you are still working without CI/CD environment on production software, then you should either introduce it to the company or switch to another more modern one, rather than learning how to ship CI/CD-less.
Grokking the System Design Interview | educative.io
I prefer text-based tutorials to videos, as 1-minute spent in reading text gives you much higher density of information than 1-minute spent on videos. In addition, text-based content is more up-to-date (since it’s lower maintenance) and in bigger quantity than content in audio or video format. So when I found this e-learning site (educative.io
) focused on offering textual content, I was willing to give it a try.
System Design is a relatively new but interesting topic for me. I have had some experience crafting distributed system architecture at work but never formally learned about it. Often the most efficient way to learn a new field is to study the exam materials directly. That’s why I took this course on system design interviews. Since the content is in text, it’s basically like a succinct book.
The course covers both the fundamentals, such as load balancing, caching and database design, and a handful of system design case studies. I had pretty positive experience reading through the course materials, as I recognised many concepts from my work for which I didn’t know the exact term before. I find it useful to accumulate a shared vocabulary to communicate better with other engineers, and a generalisable step-by-step approach to system design problems.
Head First JavaScript | Elisabeth Freeman & Eric Freeman
I love Head First books, but I didn’t get a lot out of this one, mostly because I already knew some basics in JavaScript and programming in general, so I should have started with something at a bit more advanced level. I’d still recommend it for an absolute beginner.
Programming TypeScript: Making Your JavaScript Applications Scale | Boris Cherny
There are not many books talking about TypeScript, and there’s a reason: it’s probably not worth the trouble to write or read a TypeScript book. TypeScript (JavaScript with typing) is not classic or sophisticated enough to write about it in a lasting medium. In the end, I find the offical documentation online more informative and surely more up-to-date than books.