A couple of weeks ago, Johnny Wu put up a great blog post briefly detailing some online services designed to teach people how to program. I have looked into these services, and they are indeed very well tailored to teaching absolute beginners some basic concepts and syntax. They really are a fantastic jumping off point.
I am active in several online web design and development communities which cater in part to new users. One of the biggest questions I see on these communities is, “I just finished X language on Codeschool! I want to build a better Facebook! Where do I start?” Perhaps I’m exaggerating a little bit, but the overwhelming impression I have gotten is that these courses provide a great foundation in writing code, but lack the resources which teach you to apply your new knowledge.
I’ve written a short primer on getting started in web design and development (and even general programming of the true CS flavor). These are a few tips that I wish I had known a few years ago. I hope they’re useful!
Never Stop Building – even clones
It’s saddening that many would-be developers never make it past this point of basic competency, because they have no context for their knowledge. Sure, now I know ruby…. But what is ruby good for? All the blog posts in the world will not make you truly understand how to apply your knowledge. Only by applying it, failing, and applying it differently will show you how to use this valuable information gained from CodeAcademy/CodeSchool. You need to constantly be working in a language to achieve proficiency with it.
A big problem people run into is that they say, “I want to build a web app that lets users share photos!” and then they remember – Flickr, imgur, Facebook, and dozens of other services let you do just that. It doesn’t matter. Start building it. Write it in Clojure if you want. Guaranteed, by working on a project like that, you’ll get much better at the languages, and you’ll have insights into the problems associated with building that service. These are lessons which can be read about, but you won’t truly understand them until you experience them.
Keep building new things. The stupidest idea could turn into a really fulfilling project.
Get REALLY good at a couple things
This goes along with my previous point. If you keep building new things, you will eventually become proficient with the tools you use. It’s just a fact. However, if you use different tools every time, you will become familiar with lots of them, and achieve mastery with none. Of course, different tools are required for each project, but knowing a few of them inside and out will pay dividends in the end. Employers love to see that you know a technology inside and out. They love to see that you’re passionate about building things with it. If they’re lacking such a specialist, they might just hire you for your expertise! Just be careful that you don’t lock yourself into one way of doing things – because there are so many combinations of technologies out there.
Read. A lot. Even source code.
Practice is great. It really is. You can get very comfortable very quickly by coding a LOT. The problem is, you can get too comfortable. You can enter a state of existence where you look at your last project, see how you did it, and clone your efforts in the new project. This is bad, because it’s like saying that there’s no room for improvement. And of course, it can be very difficult to see flaws or bugs in your own implementation. This is where reading comes in.
Stackoverflow will tell you the best way to do something. Online dev communities will give you inspiration and show you new design patterns. If you’re using a framework, reading the source code can show you how to optimize your implementation. Never stop reading, or you might find yourself stuck in the same patterns.
There you have it. Three big tips to help you advance and keep advancing!
A couple more that I didn’t mention: Get a GitHub and learn Googlefu. Two big ones. See you soon!