Over the course of my college career, I have been simultaneously fascinated by the concepts presented in class and disappointed by the lack of the practical lessons. This may or may not have been a bad thing, as it piqued my curiosity and led me to search elsewhere to supplement my college education.
I still owe a certain friend in college, now a college graduate working his way into infosec, a huge favor. I still remember the day we were sitting in the library, ‘studying’, when he told me to command Google to do a barrel roll. It was amusing enough in its own right, but I was even more interested how he had stumbled upon this little gem. It was then I was introduced to Hacker News.
This opened a new world for me. Suddenly a treasure trove of links to random tech-y sites, describing the wonders of things with fantastic names, like django, ruby on rails, github, git, coffescript, dependency injection, heroku, clojure, csrf…. Suddenly, there was a raging river that I would try to draw a little stream of knowledge from to claim for my own. My bookmark folders ballooned out of control, and my attention may have waned some during class and study sessions, but finally I had a semi-curated ‘library’ to read from. And this was only the beginning, as through HN I found other sources, respected experts, and wonderfully informative blogs. I sometimes think that the most important thing I have gained from all this is a better big-picture perspective of my education.
Now, to get to the point of this post. Through this process of continual exploration and discovery, I found a few books kept popping up over and over in various, seemingly unrelated places. I started to keep a mental list of the books that came most recommended, ones that I really should read, when I got the time of course. I soon realized that a mental list was insufficient, and started several lists to keep track of these books. These text files, bookmark folders and amazon wish lists have now coalesced into this list, which will be updated as I check books off and add more. I make no guarantee as to the regularity or quality of the updates. Keep in mind that unless otherwise indicated, these are books that I want to read but have not, so I cannot vouch for the quality until I have read them. Even when I have read them, I mostly defer to the opinions of the respected experts I mentioned above. The following are in no particular order, although probably with a bias towards when I encountered them. Without further ado, here is my reading list:
The Pragmatic Programmer Dave Thomas & Andy Hunt This was the first technical book I read that wasn’t focused on learning a programming language. It took me a while to get through it the first time, but was it ever worth it. This book if chock full of practical tips, advice and best practices. I believe that this is where DRY originated. DRY (Don’t Repeat Yourself) is the idea that anywhere or anytime knowledge is duplicated, you are creating a breeding ground for bugs, mistakes and misunderstanding. Consider the next time someone is maintaining or updating your code, be it you or someone else. Are you positive that this person will find/remember and update every place that a certain piece of knowledge is stored? It is better to keep each particular piece of knowledge defined in one and only one place. Knowledge duplication is A Bad Thing. Seeing as DRY is an almost universally recognized principle, apparently I’m not the only one who has been influenced by this book.
Clean Code Robert Martin, ET AL I very highly recommend this book to anyone doing software development. Clean Code is an awesome overview/introduction/reference for anyone interested in improving their quality of work (which, of course, you are). TDD, code organization, refactoring techniques, commenting, naming and simplicity are just some of the topics covered. I really got a lot out of this book, especially regarding code readability. I think all devs should be at least slightly familiar with Uncle Bob and the ‘boy scout rule’. Also provides a lot of good to-read-next titles.
Refactoring Martin Fowler (in progress) Called by some the ‘bible’ on refactoring and improving code
Design Patterns “the Gang of Four” (pending) Pretty much a classic, I would like to read this so that I have a good idea of what each of the design patterns really are, rather than the brief overview that I currently possess.
Godel, Escher, Bach Douglas Hofstadter (pending) Not sure why I want to try and read this book, but I think it would be very intersting. Comes highly recommended by Steve Yegge
Mastering Regular Expressions Jeffrey Friedl Supposed to be great overview book on Regular expressions, I am currently partially through this book. I really need to finish this book. I know enough about regex to appreciate how great they can be, but not enough to confidently write complex regexs on the fly. Item #9 on Effective Emacs…
Growing Object-Oriented Software, Guided by Tests Steve Freeman, Nat Pryce (pending) This looks to be a good comprehensive guide to TDD, i have found (trusted) references to it scattered about the interwebs. I would really like to strengthen my understanding of TDD and this could be a really good place to start. This or the next item on my list:
Test Driven Development: By Example Kent Beck (pending) Another intro to TDD. Written by Kent Beck, therefore reputable. Beck was one of the early pioneers of TDD, and is one of the two intital authors of the JUnit testing framework (the other is Erich Gamma).
(last updated 10/21)