Book List

This list will grow over time - these are the recommended-to-me books I have read or bought..

For myself, it was an itch for a problem to solve, and career frustration. At 35 I was in a new career, 55k in debt and doing side work to make ends meet. Making suspension bushings with hockey pucks was another reminder "I need more money". OCD/ADHD helps me a lot too. Learn to aim the OCD ray and it can do wonders.

I will list them in order of "impact on my career"

Note - I think it is vital to understand "how you learn" - as in "what does it take for my brain to retain this sometimes boring stuff?" One thing is important: you need to write code to learn code. Find that itch, and start on it. Start small, and iterate.

Note II - I believe in reading the original texts, from the ones that implemented it.

Speaking UNIX, Part 9: Regular expressions

The first one is not a book at all, but a tutorial that unlocked regular expressions. This unlocked Perl which unlocked C. Everyone that asks me about learning Perl or Regex's gets this document as an answer from me.

The Unix Programming Environment - Kernighan, Pike, 1984

Late night reader for programming, and finally clear explanations of the rules of the shell, from the guys that wrote it.

Learning Perl (Schwartz et al)

Again, explaining Perl in a way I could understand - starting with the basics. Now that I had struggled in Speaking Unix with Perl and wanted to do more, I was ready. Got this book, a old cheap laptop loaded with Debian, and worked through (most of) this book.

The C Pogramming Language (Kernighan, Ritchie)

The bible on the C langauge, and which literally everything around us is built upon. Shortly in, I realized "I don't need to learn how Awk/Perl/Sed/TCP Dump interface works, just learn C. These tools are implemented in C (via algorithms). If I understand the bricks, I can understand the building.". Recently I was reading about getline and one of the options is the newline delimiter. The newline delimiter is default to "\n", but can optionally be set to some other string. I used this a lot in Perl $/ for text processing, and Awk with RS. Since Perl and Awk are implemented in C, I now know where this feature comes from. So by learning C, it becomes more of "How do I access this in (Perl/Ruby/Python/Java/C++/PHP/Javascript). Wikipedia has a list of C based programming languages.

The Mythical Man Month (Brooks)

This helped me understand a lot of the psychology and social issues that programmers face. We can read about the rockstars and think "I am not like them" and be despired. Brooks does talk about how some folks are 10x more productive than others, however those 1x were still employees (=needed)! So aspiring to be "backup-to-the-rockstar" is a fine goal.

The Design of the Unix Operating System (Bach)

I am still reading though this one. The frustration and not knowing "why" or "how" was affecting me. Then I read somewhere that one of Linus's favorite books is "Design of the Unix Operating System". Bought it, reading through it - a tough read but well worth it.

The Art of Unix Programming

This has been a good read after writing a lot of code - and thus can relate more to what the author is saying about clarity, simplicity, etc.

Bell Systems Technical Journals

These are the first papers and discussion that talked about this new thing called Unix. Did you know that early versions of Unix had only two proceses?? And it took 10 years to get multi-process and other foundational features implemented. I translated this to "of course I will be overwhelmed when studying a system that smart folks have agonized over for 40 years". So Unix has its's roots in the 60's and was born in '71 or so. These are more entertaining to read after struggling a bit with Unix and knowing how the story ends.

Published on in