This post originally appeared on the Underdog.io blog.
I feel strongly about the current “learn to code” movement for a number of reasons:
- I’ve worked as a recruiter for 5+ years (most recently at betaworks and before that at Aviary). I hire a lot of engineers, so I meet and interview a lot of people, including some who’ve recently graduated from code schools.
- I also work with (almost exclusively) engineers.
- I know several people who’ve gone to code school in an attempt to become full time developers, with mixed results.
- I’ve taught myself the basics of programming over the years so I can build projects and websites as I think of them. None of them are making me any money or have a ton of users, but they’re all things I wanted to exist. You can check out Standing Clock, Derry Connection, Don’t Eat My Brain, or Maya’s Bloody Blog for a sample.
- I recently cofounded and staffed a brand new startup (everyone on the team but me is a full time programmer).
I used to be the only non-professional developer I knew who was doing this for fun. So when everyone around me started learning to code, I was really excited. I have gotten so much out of the technical knowledge I’ve gained over the years, and I love the empowerment of being able to build something on my own.
I totally agree that coding is a new type of literacy and encourage everyone I know to learn at least the basics. Even for those who don’t want to be full time programmers, there are very few jobs that can’t benefit from some basic technical knowledge on top of other skills.
But the question I always get asked is: how do people graduating from immersive code schools (or coding bootcamps, as they’re sometimes called) compare to people with CS degrees or people who’ve learned on their own?
This is a complicated question to answer, because I would never ever consider someone who’s just started programming a few months ago to be anywhere near as proficient or qualified as someone who’s graduated from a four-year college with a computer science degree.
But as several people pointed out in this recent reddit thread, we’re not necessarily talking about computer scientists here. We’re talking about “hackers” or “junior developers” — beginners who can cobble something together well enough that it works.
So yes, I believe that a good code school can be a potentially good place to get started with basic programming techniques for certain people with certain goals. (Note all the qualifiers in that sentence.)
I think a few months of intensive programming study, whether you’re doing it in a class or on your own, should be plenty to enable you to build a website and deploy it. But I do not think that anyone with just this experience would be qualified immediately for a job as a developer.
Code school can be a good way to pick up basic programming as a hobby, or as a very early start to a career, but so is reading a few books or diving in on your own and learning by doing. And code schools, generally ranging from $8k – $18k, are much more expensive.
Code school as a movement right now is being marketed incorrectly in two ways:
- As the way, not a way, to learn to code.
- As a full education, instead of a basic introduction.
I hesitate to recommend code schools to beginners, both because of their price, and because more and more people seem to be going for the wrong reasons (i.e., they think it’s a fast track to a high salary). If you’re looking for a shortcut, there are many careers other than programming that would be a better option.
You can’t fake programming expertise. You can’t speed up the equivalent of 10 years of practice. And it’ll be tough to succeed at it if you don’t feel passionate about it — you’re likely to join the ranks of people who quit months in when you spend a week troubleshooting and realize your code didn’t work because of a missing semicolon.
In fact, the whole concept of learning to code – where there is an endpoint, where you can say “I have now learned to code – feels off to me. None of the developers I know ever set out to “learn to code.” They wanted to build something, and they figured it out what they needed along the way. And they chose to keep doing this for a living because they enjoy the challenge, and they enjoy creating things.
I’d argue that unless you’re solidly in this camp, you should probably think hard before committing to a career in software development.
But, ok: let’s say you do genuinely enjoy a good challenge, and you love making things. You’ll probably be a great developer! Where should you start?
Step One: Don’t spend any money (yet).
If you’re starting from zero, spend your nights and weekends for a month or two exploring free resources to learn the basics. My top recommendation based on my own experience would probably be Harvard’s CS50 class, but if you’re looking for a little less of an initial commitment, you can try Codecademy, GA Dash, One Month, or countless other online tutorials. Any of these will give you a very basic understanding of what programming is, which should be enough to get you going.
If you can get to the end of one or more of these resources, and if by the end you’re thinking to yourself, “Boy this is awesome, I can’t wait to figure out how to build X!” then you should keep going.
What you’ve achieved so far is just the beginning; step two will start to show you what real world programming is actually like — that is, taking an abstract problem and painstakingly figuring out how to solve it.
Step Two: Build something.
Hopefully you have some ideas about things you want to make. Another option is to recreate something that already exists. But even if there’s nothing in particular you want to build, you are probably a person who should have a website.
And now, instead of using WordPress or Tumblr or Wix, you can build yours from scratch. It doesn’t have to look nice; all kinds of personal websites are just text on a plain background, or you can grab an existing template from online. (Here’s the website of a friend of mine, which has arguably no design but a ton of personality.)
Sit down and draw out what your website should look like. What’s the content on there? Do you want there to be a cool animation when people load the page? What do you want to link out to? How can you represent your personality so people get who you are and what you’re doing?
Now, figure out how to build it. Don’t compromise. If it’s hard to figure out how to vertically center something on the page, spend the time to figure it out anyway. Everything is possible, and lucky for you, you have Google!
Once it’s done, you’ll need to deploy it somewhere. If you’re not sure how to do that, read a book, or find a developer to ask. Don’t take any shortcuts. Notice that building a website requires much more than just a few lines of html and css.
Note: remember that there is more to programming than web development. If you can’t get excited about building a website, what about making a little hardware hack with a Raspberry Pi, or building a simple iOS app? (I’ll reiterate here: if you’re not particularly excited about building anything, why do you want to learn to code?)
The point is just to finish something. If you’re able to get your project up and running, and you’re proud enough of it to show it to people, proceed to the next step.
Step Three: Is this a hobby or something more?
Even though this step requires no code, it’s the single most important part of your journey. Take a break and take a long hard look at your results and ask yourself how you’re feeling. Do you feel accomplished or frustrated? Are you dying to move on and build the next thing? Are you already thinking of ways to optimize the thing you’ve built? Do you wish you could do this full-time, or do you find yourself relieved that it’s over and you can go back to watching Netflix in your free time?
I’ll be perfectly honest with you here. At this point, if you are not sure if you like programming, I don’t think you should go any further. It’s like any other major decision in life: when you know, you know.
The developers I know do it for a living because they can’t imagine doing anything else. Be honest with yourself. If you don’t like it, it’s okay. If you’re not sure, I’d recommend repeating step two: build another side project and see where you end up.
If you get to the point where you are like “hell yes, this is what’s been missing from my life, I feel so alive when I’m programming,” go on to step four.
Step Four: Keep learning. Keep building.
The most important thing you can do as you embark on your career as a programmer is to focus on learning. It’s about the journey, not the destination (or the salary).
Here’s a secret tip for you: developers are always learning. By definition, building software means that you are constantly solving new problems. There are great developers, but there is no best developer. And any developer who stops learning finds him-or-herself very quickly falling behind.
So your job as a brand new developer is to learn. There are lots of ways to do this:
- Build more things. Focus on the product you want to build and figure out exactly what you need to do to finish it; don’t choose an arbitrary platform or framework because you think it’s the most hot right now.
- Read books. (I loved the no-bullshit style of Learn Python the Hard Way.)
- Follow tutorials. (I got so much out of this Django tutorial.)
- Get a mentor (at work or just in general).
- Talk to other developers and ask them what they’d recommend.
- Take some CS classes at a local college.
- Go to a code school.
If you learn best in a structured, classroom environment, and you have the money to spend (again, usually $8k – $18k), code school could be a good way to pick up some of the basic skills you’ll need. But know that it’s just one of many options, it won’t magically turn you into an experienced developer, and I wouldn’t suggest paying to learn how to code unless you already know that you have at least a baseline interest in programming, and you’ve figured out what you want to get out of it.
This way of thinking seems to be consistent with other people’s experiences, but this is a topic I’m really interested in and I’d always love to hear more perspectives. Feel free to hit me up on twitter at @mayafish or email me at [email protected].
I hope this is a helpful overview for those of you thinking about learning to code (or somewhere on the beginner spectrum already). Here’s some further reading: