2015 in Books

Published: 2015-12-28
Tagged: readings

This year was a pretty good year in regards to the books I've read. A pretty strict process of choosing books means I haven't read any book that I actively disliked and that most of these works have enriched me in some way - gave me new skills or opened a new and fascinating perspective on something I've missed.

Writing this post showed me how much new stuff I've learned and how radically my stance has changed on some things. What's more important, I want to read less books in 2016 and do more. Having accumulated this theoretical knowledge, it's really time to put it into use. Cutting down the number of books read from ~70 to, say, ~35 should give me hundreds of hours to build or experience exciting things.

Honorable mention

Your Career vs. the 4th Dimension - A Time Travel Story by Brandon Hays - this talk from the Keep Ruby Weird conference goes into detail about what's in store for you if you're a professional software developer, and, most importantly, how you can influence this path to your liking. I must have listened to this like 3 or 4 times and it made me look good and hard at my current situation and what I want my future to look like.

Non-fiction

Technical

Programming Elixir by Dave Thomas

This blew my mind. The book is masterfully written with a flow and abundance of examples that I think will make most people pick up Elixir easily and really enjoy it. Hats off to Dave Thomas for pouring his craft into this. The pacing is great - going slow enough to hammer in the details but fast enough not to get bored. The exercises at the end of each section are worth doing as they illustrate details related to the section.

At first I was a bit skeptical of this functional programming language with Ruby-esque syntax but as soon as I got over that detail - oh my god. I can't say what I like more about Elixir - the syntax which makes a programmer uber productive? Making the incredible Erlang VM so easy to use? I haven't gotten such a good vibe from a language or its community since I picked up Python which makes bet that Elixir will be big, really big.

Twisted Network Programming Essentials by Jessica McKellar

I read this because Twisted is the library used by Kivy to provide networking services. Short and with lots of good examples to follow, it gives you enough knowledge to start building your own asynchronous Python-driven applications fairly fast. My biggest take away from this piece was the asynchronous model that I can apply to Python 3.5's async/wait or to Javascript promises.

Kivy - Interactive Applications and Games in Python 2nd ed. by Roberto Ulloa

I've been interested in mobile application development for a while, but I couldn't stomach investmenting the time in picking up Java. Before considering it, I looked for and found a way to get Python code to run on mobile devices and came up with Kivy. Kivy is much more than that - it can run on any popular platform (Linux, OSX, Windows, Android, iOS) and works well with touch screen input. Because it's Python, it was easy to charge through the book, doing all the examples, and build enough of a mental model to start out on my own.

Postgresql High Performance by Gregory Smith

A must-have for everyone that depends on Postgres. It's a journey from the hardware level to the OS level to the application level on how to get the most out of postgres. Thanks to this I not only understood how different indexes work and how to configure postgres to work real fast, but also how to understand query plans (invaluable!) as well as how to benchmark performance.

Clean Code by Robert C. Martin

I knew this day would come. Eons ago I was intimidated by this book. I read it cover to cover and took extended notes and I actually reread those notes from time to time. It's an excellent overview of actionable techniques on how to produce higher quality code - everything from picking the right variable names to TDD is covered in depth. I think every developer should read this book at least once as it'll suddenly make then much more aware of the code they're writing. I think the biggest take away for was that I'm not writing code for the machine to run, but for the person who comes around weeks or months later and has to work in some changes to the code.

An Introduction to Programming in Go by Caleb Doxsey

I read this as a quick refresher about Go and to see what's changed since 1.2 (we're at 1.6 at the time of writing). I still don't use Go for either hobby or work projects but it's nice to witness the evolution of a young language.

Vagrant: Up and Running by Mitchell Hashimoto

I'd call this an extended tutorial to Vagrant. You can get everything that's in this book from the online tutorial on vagrant's own site.

UNIX and Linux System Administration Handbook by Evi Nemeth

This behemoth (1200+ pages) contains everything that a person charged with administering **nix machines could ever need. The material is presented in an approachable manner and each chapter stand on its own so it's possible to pick n' choose what you need. Everything is in there - from configuring GRUB to setting up postfix to user accounts to the difference between block and loop devices. I'd advise anyone to take notes because the amount of knowledge is staggering.

Programming Amazon EC2 by Jurg van Vliet

A little dated what with how fast Amazon changes its services, but it still gives a decent overview of AWS. Interestingly enough, it provides a lot of historical value as it shows just how revolutionary some of the AWS were when they came about.

Pro Git by Scott Chacon

I gave this book a reread to dust out some of my knowledge of git - especially the plumbing commands. After doing this, I'm confident enough in my git-fu that I can help out other people and build tools on top of git. Really easy to assimilate.

Learning Saltstack by Colton Myers

As with the Ansible book - this books shows us how to save enormous amounts of time using industrial strength configuration management.

Functional Python Programming by Steven F. Lott

Having played around with Clojure earlier, I was curious just how functional can you get with Python. This book shows us just how much - a lot, but there's some big barriers. The standard library provides a ton of FP-friendly tools which work great with the language itself, but the author also highlights shortcomings such as extensive mutability or dealing with recursion on a limited stack (ie. the need for manual tail-call optimization).

The Web Application Hacker's Handbook by Dafydd Stuttard

A much more in-depth look at web application security. This book looks at every aspect of security and drills down to the core of each while providing a bunch of examples. Lays down the theory behind vulnerability and shows how they work in practice. Along the way, it explains the mechanisms underlying the Web as we know it. A must-read for any web developer.

Ansible Configuration Management by Daniel Hall

Short and to the point about how to use Ansible to save yourself hours/days/weeks of work.

Mastering Bitcoin: Unlocking Digital Cryptocurrencies by Andreas M. Antonopoulos

Reading this got me hooked on all things blockchain related. I finally understood the commotion and enthusiasm as well as finally getting that bitcoin is so much more than just a cryptocurrency. It's well written and easy to digest, even the technical aspects.

The Basics of Web Hacking: Tools and Techniques to Attack the Web by Josh Pauli

An introductory text into web application security. Basic, but gives a good overview and enough context to allow you to delve deeper on your own.

Pro Bash Programming: Scripting the GNU/Linux Shell by Chris F. A. Johnson

Great book that delves into the nitty gritty of Bash. I won't use 50% of what's in this book, but reading it has built a much more complete mental model of how Bash works and its limits.

Soft

On Anarchism by Noam Chomsky

This was a solid punch in the gray matter. Chomsky covers things from how Anarchism is treated academically to what is "freedom". I found the latter to be really applicable in choosing careers paths as well as understanding my own place in this system of systems - I found that a lot of what's in this book applies perfectly to working in dysfunctional IT organizations. Most importantly, some of the views in this book question my perceptions of the world.

Unscalable by Charlie Guo

Here, the reader is treated to some difficult questions and interesting answers from 15 startups. It's fun to see how different companies tried to gauge and satisfy a market using different approaches, some of them very manual. Pretty inspiring.

I Will Teach You To Be Rich by Ramit Sethi

Lots of actionable insight here. My biggest take away from this book were about the difference in service between banks (ie. moving savings account from an APY of 0.05% to one of 1%) as well as how 401k's and Roth IRA's work. I think every one in their 20's should read this to understand how to start saving and investing.

Bargaining for Advantage by G. Richard Shell

An amazing book about something that's really hard for introverts. Shell dissects the negotiation process into smaller, tangible processes, and gives pointers on how to notice certain well known moves as well how to interpret them. This was a complete game changer for me, although I've barely begun applying what I learned from this book. Looking at my past negotiations, I see how badly I've approached them and how I've left a ton of money/benefits on the table.

Operating Manual for Spaceship Earth by Buckminster Fuller

Another eye opener. The metaphor of Earth being a spaceship and we the passengers changed my attitude towards what it means to be alive on this ball of rock flying through space. A great critique of established systems and what can we do to dismantle the sick ones and introduce healthier ones.

The Personal MBA by Josh Kaufman

This is an all-in-one solution if you're completely ignorant of business. First, there's a gentle overview from 20000 feet, then we're treated to a drilldown of the main topics such as marketing, selling, product creation, and a few others. The second half of the book is a bit more meta, dealing with the softer aspects like working with people, cognitive biases to look out for, understanding businesses as systems, and other similar items. Each chapter is composed of multiple topics and each topic is a fairly short brick-like piece that builds an overall mental model of how a business works and how to build one yourself.

The Xenophobe's Guide to the Germans by Stefan Zeidenitz

Each culture has certain peculiarities that are very implicit - they can only be learned by immersing yourself in that culture or by reading this book. Written in a very joking manner, this short piece is an excellent explanation of all those mysterious actions performed by Germans.

The Pragmatic Programmer by Andy Hunt and David Thomas

Re-reading this for the third time didn't fail to put new experiences into perspective. There are some parts of the text that I understood only now and some parts that made me think "everything old is new again".

The Clean Coder by Robert C. Martin

I feel like this is a book that should be given to every new software craftsman to read. While I don't agree with everything said in this book, it does provide the valuable perspective of what it means to be professional and how to handle situations in a way to avoid being management's scapegoat for unmet deadlines. I especially liked the chapter about saying "no" to unrealistic requests as well as the chapter on commitment.

Lean Thinking by James P. Womack and Daniel T. Jones

This book outlines lean principles in relation to manufacturing using relevant case studies. This is only distantly related to software development, except for the points on eliminating waste during the development cycle. It paints an interesting picture of a world where software plays a key role.

The Goal by Eliyahu M. Goldratt

"The Phoenix Project for manufacturing". Part prose, part manual for eliminating waste from an organization. My key take-aways here was the theory of constraints as well as value stream mapping.

Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future by Ashlee Vance

I'm sure I'm not the only person fascinated by a man who's standing up to multiple established players and doing things that are seemingly impossible. A very motivating read.

Zero to One by Peter Thiel

Interesting take on how new technologies, by their very novelty, create temporary monopolies and piles of wealth for those involved. The author also writes about the culture surrounding this process.

What the Doormouse Said by John Markoff

If you like reading about the roots of technology you work with every day, this book will pull you in. The author does a great of showing how accidental the evolution of modern computing was and how many giants provided shoulders to stand on for us today.

Black Code by Ronald J. Deibert

A sobering about the dark side of the most democratizing tool humanity has ever built - the Internet. I wrote a somewhat extended review here

Soft Skills by John Z. Sonmez

In retrospect, this is a more detailed and more actionable version of The Clean Coder. New coders will find this a worthy read and something they can begin applying in their everyday lives at work. Bonus points for showing what a software dev can do with the money they make.

Pragmatic Thinking and Learning by Andy Hunt

A nice meta book on how to get better at problem solving. It shows strategies as well as physical approaches to improving the quality of your work. More here

Netnography: Doing Ethnography Online by Robert V. Kozinets

It's nice to see that academia has begun to focus on communities popping up in cyberspace. This is more of a manual on how to perform this yourself and while targeted at anthropologists, it's written so that a layperson can pick up some ideas and tools on how to understand online communities.

The Cold War: A History by Martin Walker

Most history lessons that I've had in school stopped at WW2 at the latest. Quite a shame, because without knowing much about the post-1945 world, it's kind of hard to understand what's happening around you. The author does an exemplary job of describing the political, social, and economic aspects of what the hell was happening in the world between 1945 and 1991. Thanks to this, I was able to better understand why things today are as fucked up as they are.

Team Geek by Brian W. Fitzpatrick

A short read on how to better work with others as a software developer. If you don't have the time to read Soft Skills by John Sonmez or The Clean Coder, than this is what you're looking for.

Personal Kanban by Jim Benson

A short little book that could've possibly been made even shorted, but it does a great job of explaining on how to better organize yourself. I've found this is a really good approach to organize all of your side-project stuff such as gathering ideas, working on side projects, blog posts, etc. What makes this different from one of the millions of blog posts about Kanban is that the writing's much better and you won't waste time reading tens of "6 steps to improve your life" posts.

The Phoenix Project by Gene Kim

This book is based on The Goal in both form and message - it's a piece of fiction where the main protagonist is facing difficulties well known to anyone that's ever worked on a larger software project. Great intro to lean principles in the world of IT.

The Seduction of Place: The History and Future of Cities by Joseph Rykwert

The 20th century saw a huge migration of people from rural areas to cities. Today, about half of the world's population live in cities. Joseph Rykwert gives the reader a historical perspective on how cities have evolved into their current form. Great for anyone wanting to understand their immediate surroundings.

The Design of Everyday Things by Donald A. Norman

As a web developer, design is something I'm forced to work with whether I like it or not. Thanks to this book I've gotten better at noticing design in my own work as well as all around me. Ever found yourself not being able to use something? Pulling a door and not having it budge? Well, you're not stupid - the world is full of badly designed things - from websites to doors, to kettles, to tools. Knowing this, you can focus on consuming as well as producing items of higher quality.

Fiction

Spook Country by William Gibson

Cypulchre by Joseph McKinnon

Pattern Recognition by William Gibson

Quicksilver by Neal Stephenson

The Thin Red Line by James Jones

The Hitchhikers Guide to the Galaxy by Douglas Adams

Pyramids by Terry Pratchett

The Castle by Franz Kafka

Farenheit 451 by Ray Bradbury

Seveneves by Neal Stephenson

The Winter of our Discontent by John Steinbeck

Looking Backward by Edward Bellemy

The Martian by Andy Weir

Shooting and Elephant by George Orwell

Down and Out in Paris and London by George Orwell

The Physiology of the Employee by Honore de Balzac

Timequake by Kurt Vonnegut

The Maze Runner by James Dashner

Daemon by Daniel Suarez

RUR and War with Newts by Karel Capek

The King in Yellow by Robert W. Chambers

The Forever War by Joe Haldeman

A Good Man is Hard to Find by Flannery O'Connor

Meditations by Marcus Aurelius

Franny and Zoey by J. D. Salinger

Hi, I'm Matt.

This blog is an unordered set of thoughts extracted from the mind of a software developer.