How to construct a web developer in twelve months
jpstacey.info
jpstacey.info
>> 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: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.
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.
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.
- Practice and practice
Are there any channels in particular that you would recommend? :)
If you spend to much time on reading and research on the beginning without actually getting your feet wet you might get overwhelmed.
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.
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.
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.
In fact, I'd remove all other points: the only way to become a good coder is to code, plain and simple.
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.
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.
1. Be obsessed with Github + Hacker News and always consult @yegg's archive for guidance - http://gabrielweinberg.com/startupswiki/Ask_YC_Archive
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.
That's just for web stuff though. For being a solid developer, Joel Spolsky recommends throwing these four books in there too to build a good CS foundation: http://stackoverflow.com/questions/414779/what-should-a-self...
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.
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.
This has just become my most favorite part of all HN comments.
Sign up for Lynda.com.
Find a subject for instance jQuery or PHP or JavaScript
Just watch it don't do anything to get a feel of the bigger picture.
Then Watch it again start doing some of the things and start to experiment.
That at least helped me learn to code although I am still very much a rookie.
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