>> READ: Hacker News is a reasonable starting point these days.
In my experience, almost the opposite order is best. I find reading Hacker News very enjoyable, but by far not the best use of time early on. An hour spent programming is 10-100x more valuable than an hour spent reading Hacker News, until you have enough experience to put the information in context. I would suggest:
Read Techcrunch? Why? So you can daydream more lucidly about $40m exits?
From my journey so far, I think the foundation is understanding HTML and CSS and the DOM and basic Javascript interactions. It can take a few months for that stuff to sink in, but then you barely need to think about it going forward, it doesn't clog your thought-process. From there you could do a fair bit of actual coding, leveraging frameworks like jQuery and the various layout and template resources. You will get the hang of cross-browser stuff as you go. The next level is Ajax and server-side stuff, which IMO involves getting past a lot of over-coupling inherent in the technology, so that, again, will take a while to sink in. I suppose understanding databases would be a good idea but could perhaps be put off for a while.
Also I think it really helps to have someone you can meet regularly and quiz about development. It beats endlessly googling for an answer that makes sense from your perspective.
At first glance, this looks like a nice list. I really have nothing bad to say about anything on it.
It's a list of 12 items without much guidance about how important each one is and how much time to spend on each. To put things in perspective, I think that BUILD should be > 90% of your time.
I'd like to share my personal experience with OP's list. Please understand that this is not advice, just one programmer's experience of what works for me. Perhaps I'll try some of OP's recommendations, but I'm not sure...
READ Hacker News
An hour or two every day for 4 years. Thousands of comments made. Hundreds of bookmarks saved. Oddly, not sure how important all of this has been contributing to my work. It's been very important contributing to my sanity. I'm alone most of the time except for my cats and you guys.
READ Stack Overflow
Never been there.
READ a bunch of other stuff
I just follow links from Hacker News front page. Lots a great stuff out there. Still, not really sure how much benefit has been to my own work.
ATTEND local meetups
I have. I don't anymore. Met some nice people. Didn't help my work at all.
ATTEND OpenTech 2011
Never heard of it.
FIND an itch to scratch
Have built about a half dozen things for myself. Not really much use for others, but a great way to practice with new technology.
RESEARCH cloud
Good idea, but my experience limited to Amazon.
RESEARCH HTML5
Good idea, but haven't done much.
JOIN Twitter, Delicious
Never did. Probably never will. Unless I see some good reason. (I haven't.)
PLAY
Critical! I play with stuff every day.
BUILD
90% of what I do. Oddly, I look at very little other code, but I do try to reverse engineer a lot with what I'm already playing with.
POLISH
I do nothing mentioned by OP. I just refactor, scale, and fine tune as I see fit.
I'd like to add one more thing to the list:
FIND A CUSTOMER
You'd be surprised at how fast you get good when you have to.
Totally agree. Reading HN, blogs/etc is fine, but the net result is: more time reading == less time doing [whatever].
Play + Build should absolutely be 90% of the activity of a would-be developer. Most of the rest of the list could go away. Research is fine, but really only if you're going to _use_ it.
I do find local meetups beneficial, _particularly_ if you can work yourself up to do a presentation on something. Presenting on a topic is a great way to make yourself learn it better.
++FIND A CUSTOMER: Maybe the best advice ever. Has the additional benefit that unless you completely mess up, you get paid. And if you do mess up so badly that you don't get paid, hopefully you learn something about how not to repeat that.
I have to add (since this is a list for people learning): learn git or mercurial. If you know one, you can pick up the other. I don't really think this is optional.
I agree, but just wanted to point out that reading Hacker News and building something doesn't have to be mutually exclusive. I built Hacker Newsletter (http://www.hackernewsletter.com) so I could do both.
Far too many variables to gauge how long it takes a person to become a competent, I see no point in entertaining a figure and it's a useless indicator of a goal that can't be measured.
This is the first thing i thought as well. Build should be #1. The reading you do should directly support your building (finding help on HN or SO that help you solve the specific problem/bug at hand)
I've fallen into this trap as of late... definitely need to shut up and tinker...
There are so many wavering viewpoints and opinions on topics like Rails vs Django, what to use when, does your framework hinder acquisition possibilities, etc, that you can easily wander off path; Above all else: Play, build, learn.
This is why sometimes web developers are considered 2th class developers, we waste so much time reading blogs and news, that we don't practice what we love.
I don't see half of web dev blogs for languages such as C/C++, Java, C#, etc..etc.. I know the web is like a living organism, creating new things to learn everyday, but still.
But what about algorithms ? Design patterns ? Code optimization ? This are boring concepts I know, but they are amazingly useful if you want to be taken serious on this area.
I love when I meet web developers who know what a C pointer and what memory allocation means. They don't have to, but that just shows that they know what's behind the curtains when they code in PHP, Python, whatever...and I will trust their code more than a guy who knows dozens of frameworks and tools, but don't understand the concepts behind those.
I just think that there's so much things going on that's it's either: or you get highly skilled at something or the jack-of-all trades.
So instead of the list the author gave I would suggest:
- Download open source code, and read it, understand it and try to come up with better solutions for small code fragments and share with the community or the author. You have no idea how fast you will learn and will look great your CV.
- Comeback to IRC, irc.freenode.com has amazing dedicated developers channels where you can share ideas and get help.
- Dedicate only 1h per day to read a book or a tutorial, and write down stuff you think you need to understand. Come back the next day, read what your wrote last night and continue.
I signed up for a Twitter account (which I've since deactivated) when I attended a jQuery conference in Boston a few years ago. The live tweets that went around were not only hilarious, but also relevant to the discussions. In addition, I started following some developers and discovered some great links via tweets (for instance, Paul Irish tweeted his coding standards a while back, which I think is a great read for any developer and their team. http://na.isobar.com/standards/)
Do I think Twitter is a requirement for being a web developer? Definitely not. I agree with you (and voted you up.) But, I do believe, if you follow the right people, it will help you become a better one.
My only reason for deactivating it was because of Hacker News (and other aggregate sites) - A lot of the great content on Twitter ends up (or begins) on sites like HN.
Way too "culture" heavy. The only thing important on the list is BUILD, which is 2nd to last and does not include example projects to start building their momentum. If you only have 12 months to become a web developer, I hope all that time is spent building as many different projects as possible and not reading Hacker News.
Also I don't think it's smart to immediately steer them toward MVC framework such as Django or Rails. If you give them web.py or Sinatra off the bat you'll expose them to the fundamentals much quicker and significantly accelerate their learning process. Especially in regards to databases.
Then I would throw asynchronous web development at them. Have them write a simple app on top of an event loop with something like Node.JS or one of the python options (gevent,fapws3,tornado,etc.)
Having said the above, there are more books for Django and Rails if thats their preferred learning format. If there is a time crunch, I would recommend "Django 1.0 Website Development" by Ayman Hourieh. It walks through building a complete social bookmarking app and includes chapters on jQuery and AJAX, instead of focusing exclusively on Django. Which will give them a bit of breadth.
JavaScript wasn't emphasized very much. It's taking the spotlight and really understanding the language is becoming a strong requirement for modern web development. Even better it's universal and will apply to any web job you ever tackle. It should be a paramount focus IMO.
I feel the web-specific stuff like frameworks, AJAX, etc., is a greater stumbling block, as many people are already familiar with general kind of programming through school/previous jobs.
I agree with absolutely every point on that list, and I definitely wish I had read something like that when I was starting out.
The only thing I would add: Be curious. Eliminate as many magical black boxes from your day-to-day work as you can. To some extent, yes, you should be playing around and experimenting. But some of my most rewarding self-taught lessons are from diving into areas that I took for granted (how a web server works, jQuery and Django's core, protocols, etc) and exploring until I felt like I had a good grasp on what was happening. Those monstrosity config files for things like Apache and PHP? Delete them. Now watch them fail. Learn what the default are, the bare minimum that you need to get it up and running, and expand on it. Find the areas you're uncomfortable with, and beat the living hell out of them.
I think this is a well balanced plan and would produce a rounded web developer, I've been doing php development part time since last September, but previous to that I was hacking on whatever idea I could come up with.
As the article implies, read some books, but once u get bored with literature, open up an IDE(or vim) and code any idea that springs to mind.
Doesn't really have to be useful( advantage if it is ), just something that you want.
Great article, some great resources which could take someone months to find on their own.
I agree with all, but "Build" and "Play" are the crux of the whole thing. All the rest of the list are best utilized by buttressing one's expanding coding skills. I'm about 6 months in to my dedicated, hardcore effort to turn myself into a programmer (with a focus on the web). Nothing happened for me that was worth mentioning until I started making things. THEN I started participating in HN, reading books and researching more vigorously. Because I had context.
Funny reading this post because the title pretty much describes what I'm doing, taking some time off to hone my programming chops and I originally came from a finance background. Looking back, if I had to suggest my own list to someone who's serious about learning:
2. Start off by building a web app using the LAMP stack (Linux, Apache, MySQL, PHP), and HTML/CSS, and set up your own server on Slicehost or the like. Also learn Javascript and jQuery.
3. Choose a good text editor and familiarize yourself with it, it's a long-term investment.
4. Focus on getting good with one or two languages, and keep building stuff and learning from others.
You can't be a web developer unless you can code. I think a good exercise would be copying a website. When I say copy I mean the whole thing front end and back end. Start with something easy like twitter. The whole front end is pretty much done for you. This is not super simple but I don't think you can become a developer in 12 months with no code experience anyway.
This is a great starting list, would it be possible to even go a step further and put starting times for each of them. Of course many of the steps continue to go on long after they start... does a developer ever stop reading HN? But many of the later items like play/build are a bit later than day 1 for someone looking to dive into this.
I find it surprising that irc hasn't been mentioned in the comments and the post, since ordering my first Rails books I have found the support and advice I have received in irc terrific.
12 months is barely enough to scratch the surface. I look at my code from 10 years ago, and it's absolute crap.
Modern web development is not just knowing one language, it's a bunch of technologies, and many of them seem deceptively simple, while they aren't. Just off the top of my head of what I use as a web developer:
1) HTML (and DOM) and XML
2) CSS
3) Javascript (+jQuery +JSON)
1,2,3 include
a) the knowledge of different versions
b) browser compatibility issues
c) how to write it properly and efficiently
4) Different image formats, proper compression. CDNs.
5) Unix shell + apache configuration + deployment
6) Database + SQL
7) Memcached (or alternatives)
8) Various tools like firebug, profilers, http sniffers, etc
I couldn't agree more. But I think 8 belongs near the top. I am currently helping re-condition experienced mainframe developers into web developers, and I can't stress enough the importance of tools. Understanding the browser, HTTP request and response, cookies, web security, and the OSI model is crucial.
optional Read "Teach Yourself Programming in Ten Years"(http://norvig.com/21-days.html)
1) Learn basic HMTL/CSS
2) Learn Python or Ruby fundamentals (http://learnpythonthehardway.org/index or http://mislav.uniqpath.com/poignant-guide/)
3) Learn Django or Rails
4) Learn jQuery
5) Build a few Django (or Rails) projects
6) Find someone to pay you to build things
7) Use Stack Overflow to help you solve customer problems
8) Spend time you are not busy with customers reading Hacker News, attending local meetings, learning whatever catches your interest.