Someone emailed me recently and asked me what he should learn if he wanted to become a web developer. I forwarded his request to a mailing list I'm on, and my good friend Craig Buchek wrote the following excellent reply.
There's a HECK of a lot to learn to be able to do web development effectively. Just to be ABLE to do it, you have to learn:
- HTML
- CSS
- PHP or some other server-side language
To do it EFFECTIVELY, you've got a lot more to learn:
- SQL
- JavaScript
- libraries and frameworks
- a bug tracking system
- Subversion or some other revision control system
- IDEs
- other tools
- Apache
- Linux command line
To do it WELL, there's even more:
- usability
- unobtrusive JavaScript
- separation of concerns (MVC, etc)
- testing
- customer relations
- HTTP protocol
- AJAX
I think that skipping PHP and the others and going straight to Rails is a good idea. Maybe. At least if he's talented. But he'll still have to learn a lot of things before he's any good at creating a site. (Don't forget that we found Rails easy to learn because we already knew a lot about web development.) He'll still have to understand HTML and CSS. The Agile Web Development with Rails books is excellent, but it takes a lot to get through. If you're the type who can read a manual to learn how to do something, then it's fine. But if you need to start out with a tutorial, then you'll need to start with a different book. If you do go this route, I'd recommend learning in this order:
- HTML
- CSS
- Apache (as little as possible to get two virtual hosts running)
- Rails
- Subversion
- Test-Driven Development
- Ruby
- SQL
If you want to make a living at it, I'd expect it to take at least a year of full-time (self-)education. Everyone learns differently, so it's hard to recommend learning materials. I'll offer some ideas though:
- books (my favorite; I look for conciseness)
- formal training classes
- (community) college classes
- local user groups (attend if topic is pertinent)
- online videos/screencasts
- podcasts
- web tutorials
- blogs (hard to get the basics though)
- personalized training
- mentoring
If he just wants to play around, I suppose the order is not as important. Learn things as they interest you. Eventually, you'll find you've learned a ton and enjoyed doing it.
Craig