List of Resources

Here's a list of resources that I've found helpful over the years. If you know of any books, websites, blogs, or other recommendations, I'd love to hear from you.


Programming Books

These are the real gems. All of these books will teach you general programming concepts that will be valuable for your entire career.

Code Complete

If you only read one book in your entire career as a programmer (and I really hope you read more), this is the one you should get. This is a huge book, and it covers every facet of software construction. I read it over a period of about six months during my first job, and I made daily improvements to my coding. I can't recommend this highly enough.

The Pragmatic Programmer

This book really explains the right attitude to have as a programmer. How to think about code and approach it. It's a much quicker read than the previous book, and if you haven't read anything on this list, this is the first one to pick up.

Pragmatic Thinking and Learning

Did you see The Social Network? Remember when the programmers would have their headphones on to work and people would say not to bother them? That’s describing a state of mind most programmers have experienced, most often called flow. It’s when you become so engrossed in your work you lose track of time and nothing can slow you down. This book is about how flow works, how we learn, and how to leverage our brains to get the most benefit.

Mastering Regular Expressions

You only really need to read the first two or three chapters to get the main benefit from this book. The early chapters explain what regular expressions are and how to use them. The later chapters go into how regex engines work and even how they are built and how to optimize your regexes.

Refactoring

The book on refactoring. The subtitle says it all; this book will teach you how to improve the design of existing, working code.

Debug It

We all get stuck trying to track down bugs, this book can help. I read it after I'd been programming for a couple years, so there were things that were familiar that were nice to see I had figured out for myself. There were also many techniques that I had never heard of, so all-in-all I recommend this regardless of your current skill in programming.

The Mythical Man-Month

I was amazed to find that we, as an industry, are still making the same mistakes we were making 50 years ago. Computers and software have changed dramatically, but people haven't. A challenging read, not immediately useful, but rewarding.

The Art of Unit Testing

If you know absolutely nothing about unit testing, this book will explain all the important concepts. This doesn't mean you can go off and write great tests. This book will only give you the concepts and background to understand why you should write tests, how to write tests, and the many choices you have with how to test your code.

Practical Object-Oriented Design in Ruby

I thought after getting a degree in Computer Science that I understood how to write object-oriented code. This book showed me I was wrong then taught me not only how to write object-oriented code, but also how to write cleaner less-coupled code. I can't recommend this book highly enough.


Languages

Bash/Zsh

You gotta start at the beginning. Learning how to use a terminal or command line interface to communicate with a computer is your first step to becoming a master programmer. Graphic user interfaces are better for some tasks, but if you use a computer on a daily basis, it's worth it to learn the command line.

The Linux Command Line

If you're starting from completely zero knowledge, this is the place to start your command line journey. This book explains all the ins and outs of using a command line in an easy manner that builds on previous information. I've been using the command line for years and I picked up a slew of new tidbits in the first few chapters alone.

Beginning portable shell scripting

This is how I learned to write shell scripts. It also will help you with your command line fu. Don't let the "beginning" in the title fool you, this is a book that will teach you most of what you need to know about shell scripting.

Advanced bash scripting guide

When I google for some help with shell scripting, this website is usually where I find the answer. It's part of the linux documentation project, and it's really well put together. I'd recommend reading the first 3 or 4 sections, and then using it as a reference for specific topics.

C

C is like the english of programming languages. It's not the best one out there, but __everybody__ uses it. If you don't know C, I wouldn't recommend it as a first language, but definitely as a second.

The C Programming Languge

The definitive tutorial and reference to C, written by the creators of the language. It's pretty sparse (some would say terse) so it's best to be read after you've got some programming knowledge under your belt.

Expert C Programming

As the title suggests, this book dives into the obscure corners of C, and teaches you all the nitty gritty details about how to write C code. At the same time, it's also a hilarious read and very well written.

cplusplus.com

This is the best resource for the standard C library. It's very easy to find what you're looking for, everything is laid out nicely, and there are even helpful examples to show you what the function looks like in context.

Ruby

Ruby is my language of choice because it makes sense, to me personally, and I really enjoy using it. It has a great feel, like a powerful tool that you don't worry about breaking things with.

Programming Ruby (The Pickaxe)

This is considered the definitive way to learn Ruby if you already know how to write code. Not only will it teach you Ruby, but also various good programming habits by sneaking them in with the language stuff.

The Ruby Programming Language

The other definitive book on Ruby, written by the creator of the language and the guy who wrote the JavaScript 'Rhino' book modeled after The C Programming Language, it aims to explain the hows and whys of Ruby in a clear and concise manner.

JavaScript

JavaScript is a bit of an odd duck. It looks like C or Java, but doesn't behave anything like either one of them. I wouldn't even really call it an imperative language, because of all the DOM manipulation, callbacks, and functional features. Douglas Crockford, senior JavaScript architect at Yahoo, has commented that JavaScript is really 'Lisp in C's clothing', a sentiment I highly agree with. There are many good advantages to functional programming, and JavaScript is probably the most mainstream functional language we'll have for a while.

JavaScript: The Good Parts

A short introduction to the language. It highlights of the good, the bad, and the ugly parts. It's short, so you can probably sit in a bookstore and blast through it in a couple of lunch breaks.

JavaScript: The Definitive Guide

A very long, thorough, reference and tutorial on every facet of JavaScript. This thing is gigantic, and I only really recommend it if you're working in JavaScript every day and need a big paperweight for all those TPS reports.


Blogs

These are blogs I've read consistently over the years and derived significant benefit from. Each one of these people has inspired me with several game-changing "whoa" moments that have changed the way I think.

Steve Yegge

Fantastically inspirational writings from a very funny and outspoken programmer. Steve spent the first five years of his career writing assembly, then spend several years at Amazon. He's now at Google, where he constantly brags about how awesome his job is and we should all come to work with him. He talks a lot about programming languages and hiring practices, and is brutally honest about things that bug him. Like C++.

Jeff Atwood

Jeff runs the website Coding Horror, based on a type of sidebar in Code Complete. He talks about all sorts of geeky things like programming, building a custom computer, why you should have a nice chair and nice headphones, and other general thoughts about building software and the technology industry in general.

Paul Graham

Paul graham started arguably the world's first online store creator web-application back in the late 90's. His company was later bought out by Yahoo and became Yahoo Stores. A very brilliant guy, he can put stuff together to see the big picture and come up with some really insightful ideas. His essays focuses primarily on startups, but if you're not into that, just skip it and read his other essays. I think of him as sort of like a professor, older and wiser, teaching anyone who's interested.

Sebastian Marshall

This guy is absolutely crazy in the best way possible. He steers by his own compass and doesn't let anything get in his way of what he thinks is the right way to do things. Lots of inspirational stuff that makes you think: "Why aren't I working harder?". I especially love how much he reads and studies history. It gives him a unique perspective where he can say things like "You should never do so-and-so because it failed for the romans, and then the mongols, and then the nazis".

Jason Shen

The name of this guy's blog is "The Art of Ass-Kicking", and that about says it all. Jason has a killer, do-anything attitude that's infectious. He talks a lot about what it takes to succeed, and how to push yourself to become better.