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.
These are the real gems. All of these books will teach you general programming concepts that will be valuable for your entire career.
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.
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.
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.
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.
The book on refactoring. The subtitle says it all; this book will teach you how to improve the design of existing, working code.
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.
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.
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.
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.
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.
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.
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.
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 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 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.
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.
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 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.
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.
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.
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.
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 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 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.
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".
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.