What should I learn in order to do web development?
October 15, 2008 3:09 AM   Subscribe

What should I learn in order to do web development?

I would like to create some feature-rich websites with some Web 2.0 aspects to them. I'm trying to figure out what I need to learn.

At present, I know XHTML, CSS, and javascript. There is so much else out there - php, perl, xml, ajax, ruby, sql, c#, java applets, and on and on and on.

This has been asked before, but not recently, and I know how fast the web changes.
posted by giggleknickers to Computers & Internet (16 answers total) 53 users marked this as a favorite
PHP is definitely a good starting point. I would try building a simple blog application, which should teach you authentication, database access, templating and should provide a good starting point.

Once you understand the basics of web development, I would suggest learning a framework. I use symfony at work, which is uses PHP. If you feel comfortable learning a new language, try Ruby on Rails. Don't try learning the framework before you feel comfortable with the basics.

Ajax is one of the underlying technologies used in web 2.0 sites. It will be a lot easier to understand once you are comfortable with basic web development. A lot of the previously mentioned frameworks include helpers to help with ajax work.
posted by timmow at 4:15 AM on October 15, 2008

I'd second timmow that PHP is a good starting point and building your own blog application is cool, but if you're coming at things from a more designer-y background and building your own sounds daunting, I would suggest installing your own copy of Wordpress and customizing the hell out of it. That's how I initially learned PHP and it gives you something else to put on your resume.

It can be daunting to see these massive applications, but Wordpress has a relatively gentle learning curve in my experience, and it gets you started immediately on Something That Works rather than investing weeks or months into an app of your own. Also, as they say in France, if you can dodge a wrench...if you can customize Wordpress, you can learn to customize other blog software relatively quickly. Having proof of being able to handle other people's code and Do Things with it is good.
posted by burnfirewalls at 4:45 AM on October 15, 2008

You'd need to learn a scripting language—PHP, Perl, Python, or Ruby. Which one is up to you. PHP is very widely used, and was developed for webdev in the first place, but there are lots of smart people using the other ones. Python is basically the house language at Google, and Ruby has some interesting characteristics.

You'd need to learn at least a little about MySQL.

After that, you might want to learn one of the webdev frameworks. These take over a lot of the low-level gruntwork involved in accessing the database, building the HTML, etc, and more or less force you into certain programming practices for your own good. For Ruby, it's the widely-known Ruby on Rails; for Python it's Django. There are a few for PHP.

You probably don't need to mess with java.

If you decide to go with PHP, you might want to get the book Web Application Development with PHP & MySQL (from O'Reilly, with a platypus on the cover). It doesn't get into any frameworks, and it doesn't go into a lot of depth regarding either PHP or MySQL, but it will get you started.
posted by adamrice at 7:33 AM on October 15, 2008

PHP is widely used, sure, but it's a mess and a lot of the code you'll find out there is badly done and will lead you down the path of Bad Practices.

I've never personally used it, but if I were starting from scratch, I'd probably go for Ruby right now. The language is cleaner, you can get up and running more quickly, and it's a bit more strongly typed than PHP/Javascript (you don't need to declare a variable as its type, but once you assign a value it retains that type). Ruby's main problem right now, scalability, isn't something you'll run into for a while.
posted by mkultra at 7:48 AM on October 15, 2008

BTW, Ruby is based on Python, which is a mature, sophisticated language that you can do a lot of non-web stuff with. It's a natural transition.

PHP is a dead-end. If you start with PHP and then want to learn something like Java/C#/C++, you're basically going to start from scratch.
posted by mkultra at 7:50 AM on October 15, 2008

For sure start with PHP. I have been looking for work lately & found there is TONS of work at the moment for web dev (S.F. Bay Area). Experience w PHP comes up very, very often (alongside HTML/CSS/JavaScript).

Another that I have been finding people interested in (tho not necessarily initially requested) is ActionsScript3/Flex3.
posted by Pasa la bola chetu at 8:03 AM on October 15, 2008 [1 favorite]

I don't think Ruby is based on Python in any way - they are similar languages though.

Following on from some of the above comments, I think Ruby is a wonderful language to learn - from my experience though it is harder to find Jobs using Ruby. So it depends on your eventual goal.
posted by timmow at 8:41 AM on October 15, 2008

Best answer: There's a lot of conflicting information here. This is because we all have different experiences with different languages based on when we last looked into them.

PHP is the language of choice at my web company. We use PHP 5, specifically, because it allows us to develop object-oriented code.

Now, building things with OO code allows for flexibility, scalability and much more modularized code. It's also completely unnecessary if you're just looking to do this as a hobby, and to build a few small database-driven websites.

Mkultra is right that PHP can lead you down a road of bad practices. This is because it's forgiving enough that even not great code (and in some cases, pretty damn bad code) works just fine. There are books specifically on "best practices" for PHP, which is to say that every language has a few thousand ways to do things; some ways are just perceived as better than others (or are *actually* better, for objective reasons).

That said, PHP is great for newbies because it's loosely typed and because you can get something up and running in no time. It's also not at all a dead end. PHP 5 is very similar to Java in its handling of Object-Oriented practices, and it's dead powerful, too, so you wouldn't "need" to switch to Java if you didn't want to.

Start with a few good PHP tutorials. WebMonkey used to have good ones, ages ago, before they closed and then reopened. No idea what they do now. You'll also need to build out a database and to learn a few practices behind databases, too. PHP is most commonly paired with MySQL.

AJAX comes later; it's a way of using JavaScript to talk to PHP (or any other language) scripts on the server without a page reload. It lets you send something off for processing and returns XML or text-based results back to your page, which you can then use JavaScript to display. There are lots of toolkits that neatly package up AJAX so that you don't have to write insane code to take care of them. Look up Prototype and script.aculo.us and YUI (by Yahoo) and such when you get to that.

You do need to be exceptionally good at HTML, though. This is because whatever language you choose, you're going to be *generating* HTML with it. And most IDEs (development environments; tools that you code in) do NOT allow you to build WYSIWYG HTML such that your data elements look all drag-and-drop based, so knowing your way around DIVs and HTML tables such that you can write a script that outputs to them in a loop and know roughly how that'll look in your head is important. (Some IDEs try to give you some WYSIWYG capabilities, but... it's... well, less than ideal and you should be good enough at HTML to visualize it anyway.)

Feel free to MeMail me directly, and seriously consider looking into PHP. There are TONS of resources, the language is free and well documented and very powerful and if you're interested in learning things the "right way", you don't need to worry about the fact that it technically lets you do things the wrong way some of the time.
posted by disillusioned at 9:06 AM on October 15, 2008 [9 favorites]

i am not going to add much in the way of new news here. PHP is the way to go. Pick up a program called Wordpress and learn how to manipulate that to make it do what you want. Wordpress is a great way of making web2.0 stuff on the cheap.

If you really want to study, take some courses on Interface Design, and Information Architecture. Lean how to build a great website by using what you know about your audience.

Learning to read HTML and CSS like a musician reads music is a really good step. MASTER the front end code, copy and paste the rest :)

Good luck!
posted by joelf at 11:33 AM on October 15, 2008

Best answer: It depends.

My biased rundown of what you've listed:

PHP: advantages: in common use for small sites, relatively newbie-friendly. Disadvantages: can encourage poor programming practices (e.g. mixing code and html -- it has this in common with ASP and JSP), infrequently used in large-scale projects, sometimes looked down on (rightly or not) by "real" programmers. Much existing code is of very poor quality. (This is less a ding on the current version of the language, which honestly is reasonably robust, than on its origins.)

Perl: advantages: excellent for quick-and-dirty, rapid development by a single coder. Doesn't lock you into a particular idiom, because there's more than one way to do anything. Very large set of already-written code (CPAN) to borrow from. Disadvantages: code can resemble line noise, can be difficult to understand other people's code because there's more than one way to do anything. Not generally recommended for large teams. (Some people find perl incomprehensible, others find it very newbie-friendly; I've no idea why the difference.)

Ruby: Advantages: new hotness. Ruby on Rails makes it easy to quickly put together a website following a very specific (MVC) architecture. Disadvantages: If you don't want to use that very specific architecture, you're on your own. Newish language, so not a lot of existing code to crib from, and not a lot of jobs available. Reputedly doesn't scale well. (This last is, I understand, a controversial statement.)

C#: advantages: part of the Microsoft ecosystem. Disadvantages: part of the Microsoft ecosystem. Otherwise similar to serverside java in its pros and cons:

Java on the serverside: advantages: good for working with very large teams of developers. Can safely accommodate a lower caliber of developer, as long as whoever's managing the oo architecture is capable. (This is not to say that all java developers are untalented! Just that you can get away with it if you have to.) Disadvantages: slow to develop, can be slow to run, not newbie-friendly at all. Somewhat old-school.

Java on the clientside (applets): advantages: lets you make things that work sort of like flash applets without using flash. Disadvantages: slower, uglier, and crashier than flash applets. (There is a slight chance that my opinion on this may be biased.)

XML and SQL: data formats, not programming languages. Each has advantages in some situations, disadvantages in others; both are easy to learn, difficult to master. You should have at least a basic understanding of both, to know which is appropriate to use in a given situation. (If you use more than trivial XML, it's worth looking into XSLT as well; XSL really lets you take advantage of the best XML has to offer.)

Ajax: not a programming language. A catchall phrase for a variety of javascript techniques, usually including making additional serverside requests within the context of a single web page. In general, saying "I know ajax" is secret code for "my javascript skills are up to date".

Javascript: if you aren't familiar with prototype.js, jQuery, YUI, or one of the other current standardized code libraries, your skills here are out of date. jQuery seems to be the one picking up the most buzz lately, though I've had good luck with prototype.js; I'm personally not a fan of YUI (I think it tries to be too all-encompassing) but it has many supporters as well.
posted by ook at 11:51 AM on October 15, 2008 [4 favorites]

Look at this holistically, not based on individual technologies. While many of the individual platforms, toolkits, and frameworks described above are great (and my bias is that I've helped lots of folks build careers doing development around Movable Type, since I work with that team), the more important thing than any technology is to have a firm grasp of understanding web development methodologies.

Once you're able to identify people's business goals and translate those into technical requirements, you get out of that competition on Elance with some random international developer who's going to be able to underbid you on little gigs. Instead, you can focus on helping refine a web strategy into specific technical goals, and then pick whatever technologies are at hand to implement those.

All programming languages are great -- I'm sitting next to a web dev team that is probably at this minute doing development work in Perl, PHP, Ruby, Python and Javascript. But more importantly, they're working on ambitious projects that are fun and satisfying, regardless of which programming language they're created in.

So, I'd recommend learning about The Elements of User Experience Get intimately familiar with how the process of defining requirements, planning interaction and information architecture, creating a design, and deploying a final result all fit together. Look for other resources about maintaining and scaling web sites, to see what problems people encounter once their site has succeeded.

Invest in trying to create small, targeted projects on your own that encompass these disciplines using a variety of solutions. Do one in a .NET language, one in PHP, one in Ruby on Rails. Try to duplicate the experience of a great site while creating your own javascript from scratch. You do not have to be the best coder in any of these platforms, but if you get a feel for their relative strengths and weaknesses, you can set yourself up to evaluate them fairly against one another.

In short, plan for a career, not for a project. Be at least "Hello, World" familiar with *all* of the technologies you've listed. If you content yourself with being able to throw a site up on some generic install of WordPress, you're going to end up competing with thousands of people in a race to the bottom for who's willing to do undifferentiated work at the lowest cost possible.

Conversely, if you understand the principles that underpin this, then you can make smart use of frameworks, whether those are Rails or Catalyst or Zend or jQuery or anything else, to automate much of the gee-whiz parts of creating a really rich, functional site. And you can get others to help you with the technology. But if you choose a language before you choose a goal, you won't be the one in control of where you end up.
posted by anildash at 12:48 PM on October 15, 2008

My understanding of Ruby on Rails is that the market for RoR developers is pretty hot. According to my professor, despite the economic downturn, people are still looking for Rails developers. So it's a good thing to learn. The documentation and tutorials available, unfortunately, are mostly tuned for Rails 1.2, and the newest version, Rails 2.1, is significantly different. Still, RoR is a good thing to try out and learn. If not Rails, then Ruby itself is a great language.

ook: Reputedly doesn't scale well. (This last is, I understand, a controversial statement.)

Can Rails Scale?
posted by curagea at 12:52 PM on October 15, 2008

"Javascript: if you aren't familiar with prototype.js, jQuery, YUI, or one of the other current standardized code libraries, your skills here are out of date"

posted by nihlton at 10:00 AM on October 16, 2008

nihiton makes a very compelling argument... but I'm going to have to disagree with him. I might not be able to structure my answer as eloquently as he was, but I'll give it a shot.

If you are using Javascript to manipulate HTML pages in a cross-browser way without using the aforementioned libraries, you are not being as efficient with your time as you should be. These libraries make cross-browser scripting a joy, and much easier than the old innerHTML crap.

Not using the libraries in new development is akin to someone continuing to use C, rather than C++ or C#. Sure, you can accomplish all of the things, and you might be able to squeeze out a bit more performance, but it takes 2-10 times as long to program. Now, I think that scripters should still be able to do things without those frameworks, but one of the first questions we ask interviewees is "describe a difference between prototype and jQuery.

Now, do you NEED to know this for web development? no... but if you're just starting out and want the easiest and most browser-compliant way of doing things, you should use jQuery (or prototype or YUI, but since MS and Google both back jQuery, it's most likely you'll run across it)
posted by hatsix at 11:37 AM on October 16, 2008

Heh -- awesome rebuttal, nihiton.

Wacky. I expected people to argue with a lot of my points, but that one seemed completely uncontroversial...

Note that I did not say "if you're not blindly dumping these libraries into every site you build, you're doing it wrong." I said you should be familiar with them to consider your skills current.

Looking at your site, it's evident that you are -- to the point where you're actually using bits and pieces of prototype -- which makes your statement all the more surprising.
posted by ook at 1:22 PM on October 16, 2008

Whatever you decide to choose pick a framework. Generally, frameworks push you to do things properly. Coding willy nilly is a disaster for both you and anyone who has to touch your code after you.

I like Rails myself but there are other choices - for PHP - cake or code ignitor - for Python there is Django. Even if you don't want to use the MVC style you can still look at their code and see how they wrote it which is a great way to learn best practices.
posted by srboisvert at 2:52 PM on October 16, 2008

« Older FairUse in iTunesU   |   Who said it's funner to interpret people so you... Newer »
This thread is closed to new comments.