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