Books I read in 2017

2017 is the year I found the joy of reading and blogging. I really regret I didn't start doing both earlier. In an information exploding era, books which have passed the test of time are really worth reading.1

My original plan was to write at least one review/summary post for every book I read. But 2017 has already gone so I decided to put a summary here for all the books I read in the past year.

I've read 26 books in 2017 and finished 17 of them. This number is not large but it's a good start. I will definitely read more books in 2018 (30 books maybe?, still working on setting a goal here).

Technical

General

Clean Code

It taught me a lot about how to write clean code. I thought I've written a review for it but turns out I haven't.

The most important take away for me is the only way to write clean code is to write short code. Short methods, short classes, short files, these are the things that make our code easier to read and clean. (I explained this in Sandi Metz's Rules for OOP - dsdshome)

And of course, there are more useful tips in this book that are worth reading. So go check out this one if you haven't yet. (I may not write a review for it since it's becoming an old topic in this site.)

Refactoring: Improving the Design of Existing Code

Playbook for software design and development - By thoughtbot

Thoughtbot is a company that I look up to. I started learning Vim because of some thoughtbot videos. And I learned Ruby and Rails also because of the work they are doing. Basically, thoughtbot introduced me into this web development world and I'm still listening to their podcasts (Giant Robots Smashing into other Giant Robots and The Bike Shed).

This playbook explains how thoughtbot builds products for their customers, runs their company. Some interesting facts that I noticed:

  1. They truly embraces TDD in their product development cycle, making their feedback cycle as short as possible.2
  2. Most of our designers use Vim as their primary text editor. (I really want to see how a designer works in Vim.)
  3. They are building their company using the same methodology they used to build their products. (Use a GitHub repo for the company itself and open issues, track bugs in there.)

Hackers and Painters

I've read this book before. And I read it again for my graduate thesis3. It's basically a Lisp evangelism book. And I'm pretty happy to use elisp in my daily life.

Soft Skills: The software developer's life manual

2017 was the year I went out of the school and started my career. I learned a lot about how to plan my career, time management, finance, etc. from this book.

Though this book doesn't cover other soft skills like communication (which I think is the most important soft skill for developers), it's still a great book for developers. If you are a developer just started your career like me, go read this book.

The Coding Dojo Handbook

I always keep a habit of doing some coding katas every day or so. I started doing katas from this book to mainly practice my TDD skills. You can check one of katas I did (FizzBuzz) here4.

Other than these useful katas, this book also explained how to organize a coding dojo, a place for developers to pair on coding katas. I wish I can attend/organize a event like this in 2018.

Ruby

Metaprogramming Ruby

This is the best book for learning Metaprogramming in Ruby.

But after all you don't need to learn Metaprogramming to use Ruby. IMHO, The most important skills for writing Ruby are still testing and Object-Oriented Design.

Metaprogramming is a abstract technique that's too powerful to be used to solve problems that can be solved easily by OOD.

So read this book to know how to write/read metaprogramming code and use them when you truly need this kind of power.

Mastering Exceptions in Ruby

Detailed explanations for Ruby Exceptions. Another useful resource on this topic is a talk from Avdi Grimm5.

Practical Object-Oriented Design in Ruby

Fearless Rails Refactoring

I started reading this book in December. But it definitely is a great book on Service Object. I'll write a review post for this book after I finish it.

Elixir

What's New in Ecto 2.1

It's not only a book for introducing new ideas in Ecto 2.1, but also a book on Ecto itself.

It makes clear that why Ecto is not an ORM, but a data-wrapper and can be used not only for relational databases, but also other data sources like Nosql, S3, etc.

The most exciting Ecto 2.1 feature is running database tests concurrently using SQL Sandbox. (Rails will not support this until 6.0) I tested with feature tests (Wallaby6) and model tests, it worked pretty well and can speed up the whole test suite further (given that Elixir/Erlang is a faster functional language compared to Ruby).

Programming Elixir

I now believe that the best way to learn a language is using it to solve a real problem instead of reading books talking about its features. (I learned Ruby and Rails by working on real projects. And I need to implement the ideas from a book (Refactoring/TDD) by myself to fully understand it.)

So I didn't finish this book and I won't regret it. I believe the official guide is good enough. Just read that and start working on an application.

Frontend

Learn CSS Layout

I realized that pure JS and CSS are so powerful these days7 and I really need to understand them well to become a better web developer. So I started going out of my comfort zone (backend) to the wild world (frontend).

This book is a short handbook for CSS layout. It starts with the most naive way to set the layout (display property) to the more modern way (flex layout).

And I even used it in my work to center items after read it. It's really useful.

TDD

Growing Object-Oriented Software Guided by Tests

Novel

Harry Potter and The Philosopher Stone

I need some books to read on my iPhone to spend my time and I chose Harry Potter as a start point.

I also watched the movie after I finished the book. And I was really amazed how the movie reproduced the whole story. It's like almost details are all reflected by the movie (with some minor changes). No wonder it could become one of the most successful movie series.

Others

最好的告别 Being Mortal

How to Read a Book

I read this book first to start my reading journey last year. I'll write a review for it. (How to read a book is a good book to guide us writing code)

GTD for Hackers

  • Actually, I'm already doing almost the same thing using org-mode as it said.
  • I'm still trying to find out the best way to manage different projects.
  • I might have used NEXT for a long time, but actually I'm not sure what it means to me.
  • And I'm also working on the review part recently.
    • Daily/Monthly/Yearly Review seems too heavy to me.
    • Maybe I should try Daily/Weekly/Monthly Review first, then try out yearly review.
  • About reading
    • I should stick to FIFO, since there are many things staying in my Read Later queue for a long time.
    • And I should cancel some of them if they are blocking the queue.
    • Just read them later if they appear in my sight again.
  • About the goal of GTD
    • The goal should still be actually doing useful things.
    • Not the GTD itself.

Ledger: Command-Line Accounting

I started using ledger8 to record my finance in 2017. This is the manual for this command line tool. But it's a book more than a manual. It's a great tutorial on double-entry accounting and I learned a lot from reading this book and using ledger.

You can check out this talk if you are interested in ledger: Conquering Your Finances with Emacs and Ledger from thoughtbot9

Word Power Made Easy

I read this book to expand my vocabularies. But I found that words in this book are too difficult for me currently. Maybe I will try to finish it in 2018.