Name: Anonymous 2010-07-14 15:16
I've never liked the "rote memorization" method of "learning" to program. I can't stand some of my college courses for this horseshit.
It's all about thinking up a project. Drawing it out. Writing the logic behind it in your own words, a narrative if you can. Then, the fun part comes. Implement it. Debug it. Deploy it. Learn as you go, but don't stay isolated. Those tutorials are mostly very contrived anyway, so why sit through boring "feature examples" when you could look at actual projects and how they're structured? The open-source community is honestly one of the best resources out there for someone attempting to learn a new language. If you use an open-source tool and find it intuitive, stable or any other desirable quality then go download the source and have a peek. It can be daunting figuring out a project's structure as they get larger, but at the webapp level I know first hand it's not that difficult if it's written right.
Though, from a programmer stand-point, I find the stateless environment (a website is stateless, a person moves from page to page but you don't know exactly what state they're in) a bit more difficult to program for effectively. I know there's a huge webapp craze that's still, surprisingly, strong but I just don't see it that model scaling up appropriately and still being managable.
Anyway, if you can read HTML (don't write it though, write in XHTML) then you're in a perfect position to transistion to Javascript and basic CSS!
Javascript is very similar to a real-life programming language, but after using it on some Palm Pre apps I really can see it's limitations. The good news for you though is that it was meant exactly for websites! The syntax is rather loose, and there is no need to even know object oriented programming. It's main power comes from it's ability to alter the DOM (Document Object Model). That HTML you're reading is, as I'm sure you've noticed, a very heirarchial structure. AJAX is a very cool usage of Javascript that allows you to request another page (or website) and parse it's data. You can even inject this data into any other element inside your document. It's called Asynchronous Javascript for two reasons. One, because the website stays the way it is until your script modifies it in someway. Two, because you are making HTTP requests that don't block the user from doing something else. (Usually what you're requesting is XML or JSON documents, which is a great way to send data from the server to the client. More things to learn!)
CSS is awesome because of it's ease of skinning a website. It's full name is Cascading Style Sheets because it literally defines styles for various elements through a simple grammar designed to pick them out from the DOM. This could be any tag in your website. Not only does this separate how the document is structure from how it's presented, but also if you're smart about how you name and structure your elements you can easily interchange different looks for the same website. Sophisticated CMSs (Content Management Systems) like Joomla use this technique to allow users to have completely different looking websites with the same logic and data behind them.
This is what Web 2.0 (or whatever the hell) is all about. But this is only the client-side half of the equation!
PHP is a pretty easy language to grasp. It's not my favorite, but whatever I'm not a web programmer anyway; I prefer desktop apps so I'm biased. It's rather similar to Javascript (or the other way around, I'm not sure) and it's got a bit of several other popular languages thrown in. However, I cannot stand spending hours on obscure bugs caused by PHP itself. I'm not impressed with it's Linux and Windows cross compatiblity because it leads to lots of hacks and garbage.
To be honest, you don't have to be an expert to get something out. Get some experience! That's the key if you plan to freelance in the future because unfortunately school doesn't give much, if any, practical skills at all.
It's all about thinking up a project. Drawing it out. Writing the logic behind it in your own words, a narrative if you can. Then, the fun part comes. Implement it. Debug it. Deploy it. Learn as you go, but don't stay isolated. Those tutorials are mostly very contrived anyway, so why sit through boring "feature examples" when you could look at actual projects and how they're structured? The open-source community is honestly one of the best resources out there for someone attempting to learn a new language. If you use an open-source tool and find it intuitive, stable or any other desirable quality then go download the source and have a peek. It can be daunting figuring out a project's structure as they get larger, but at the webapp level I know first hand it's not that difficult if it's written right.
Though, from a programmer stand-point, I find the stateless environment (a website is stateless, a person moves from page to page but you don't know exactly what state they're in) a bit more difficult to program for effectively. I know there's a huge webapp craze that's still, surprisingly, strong but I just don't see it that model scaling up appropriately and still being managable.
Anyway, if you can read HTML (don't write it though, write in XHTML) then you're in a perfect position to transistion to Javascript and basic CSS!
Javascript is very similar to a real-life programming language, but after using it on some Palm Pre apps I really can see it's limitations. The good news for you though is that it was meant exactly for websites! The syntax is rather loose, and there is no need to even know object oriented programming. It's main power comes from it's ability to alter the DOM (Document Object Model). That HTML you're reading is, as I'm sure you've noticed, a very heirarchial structure. AJAX is a very cool usage of Javascript that allows you to request another page (or website) and parse it's data. You can even inject this data into any other element inside your document. It's called Asynchronous Javascript for two reasons. One, because the website stays the way it is until your script modifies it in someway. Two, because you are making HTTP requests that don't block the user from doing something else. (Usually what you're requesting is XML or JSON documents, which is a great way to send data from the server to the client. More things to learn!)
CSS is awesome because of it's ease of skinning a website. It's full name is Cascading Style Sheets because it literally defines styles for various elements through a simple grammar designed to pick them out from the DOM. This could be any tag in your website. Not only does this separate how the document is structure from how it's presented, but also if you're smart about how you name and structure your elements you can easily interchange different looks for the same website. Sophisticated CMSs (Content Management Systems) like Joomla use this technique to allow users to have completely different looking websites with the same logic and data behind them.
This is what Web 2.0 (or whatever the hell) is all about. But this is only the client-side half of the equation!
PHP is a pretty easy language to grasp. It's not my favorite, but whatever I'm not a web programmer anyway; I prefer desktop apps so I'm biased. It's rather similar to Javascript (or the other way around, I'm not sure) and it's got a bit of several other popular languages thrown in. However, I cannot stand spending hours on obscure bugs caused by PHP itself. I'm not impressed with it's Linux and Windows cross compatiblity because it leads to lots of hacks and garbage.
To be honest, you don't have to be an expert to get something out. Get some experience! That's the key if you plan to freelance in the future because unfortunately school doesn't give much, if any, practical skills at all.