Warning
This book is new. If you'd like to go through it, then join the Learn Code Forum to get help while you attempt it. I'm also looking for feedback on the difficulty of the projects. If you don't like public forums, then email help@learncodethehardway.org to talk privately.
Introduction
Process, Creativity, and Quality. Burn these three words into your mind while you read this book. Process. Creativity. Quality. This book may be full of exercises that teach important topics every programmer should know, but the real knowledge you'll gain from the book is these three words. My goal in writing this book on programming is to teach you what I've known to be the three most important constants in software. Without process you'll flounder around wondering how to get started and have problems maintaining progress on long projects. Without creativity you'll be unable to solve the problems you'll encounter every day as a programmer. Without quality you'll have no idea if anything you're doing is any good.
Teaching you these three concepts is easy. I could simply write three blog posts and say, "There ya go, now you know what those three words mean." That isn't going to make you a better programmer and definitely not a person who can work on their own as a developer for the next 10 or 20 years. Simply knowing about process doesn't mean you can actually apply it in real practice. Reading a blog post about creativity doesn't help you find out how you are creative with code. To really understand these complex topics you'll want to internalize them, and the best way to do that is to apply them to simple projects.
As you work through the exercises in the book I will tell you which of the three you'll be working on. This is a change from my other books where I try to be sneaky and have you learn concepts without your realization. I'm going to be explicit this time because it's important that you keep the concept firmly in your mind so you can practice it throughout the exercise. You will then evaluate how well your attempt at applying the practice worked and what you can do to improve the next time. A key component of this book is the ability to reflect on your own capabilities objectively and improve yourself. You do this best by being focused on one technique or practice at a time while accomplishing some other goal.
In addition to process, creativity, and quality you'll also learn what I consider five important topics a modern programmer needs to function. These may change in the future, but they've been essential for decades now, so unless there's a drastic shift in technology they'll still apply. Even something like SQL in Part VI is still relevant because it teaches you how to structure data so that it doesn't logically fall apart later. Your secondary educational goals are:
- Getting Started -- You learn this by doing Quick Hacks to learn how to start a project.
- Data Structures -- I don't teach every single data structure, but I get you started down the path to learning them more completely.
- Algorithms -- Data Structures are fairly pointless without a way to process them.
- Parsing Text -- The foundation of computer science is parsing, and knowing how to do that helps you learn programming languages as they become popular.
- Data Modeling -- I will use SQL to teach you the basics of modeling stored data in a logical way.
- Unix Tools -- Command line tools are used throughout the book as projects for you to copy, and you then also learn advanced Unix command line tools.
At each part of the book you'll focus on one or two of the three practices at a time until finally, in Part VII, you'll apply them all as you build a simple website. The final projects aren't sexy. You won't learn how to create your next startup, but they are nice little projects that will help you apply what you know while learning Django.
It's All Personal
Many other books are designed to teach you these three concepts in the context of a team. When these books teach you about process it's all about how you work with another person on a project to maintain code. When they teach creativity it's all about how you go to meetings with your team to ask customers questions. Sadly most of these "professional" books don't really teach quality. This is all fine, but there's two problems with these team style books for most beginners:
- You don't have a team, so you can't practice what they're teaching. The team oriented books are designed for junior programmers who already have jobs and need to work on the team they just joined. Until that happens to you, any team oriented book is fairly useless to you.
- What's the point of learning how to work on a team if your own personal process, creativity, and quality is a total mess? Despite what the fans of "team players" say, the vast majority of programming tasks are done solo, and your evaluation of your skills is usually done solo. If you work on a team, but your code is always low quality and you constantly have to ask team members for help, you get a low review from your boss. For all their talk of how awesome teams are, they never blame the team when a junior programmer can't work alone. They blame the junior programmer.
This book is not about being a good worker drone at Mega Enterprise, LLC. This book is about helping you improve your personal skills so that when you get a job you can work alone. If you improve your personal process then it makes sense that you'll be a stronger contributor on a team. It also means you can start and develop your own ideas, which is where the vast majority of projects start.