So I know HTML. What to learn next?
December 10, 2006 7:23 PM   Subscribe

What web technology/language should I learn to make simple online apps and just generally enhance my bare-bones knowledge of HTML?

I know my HTML and CSS, and am pretty comfortable making simple websites and having them look nice (and coded by hand), but I'm pretty clueless when it comes to anything more complicated than that.

I've been able to wrestle my way through simple modifications of existing code (like a WordPress or MT installation, for example) but I otherwise know little to nothing about PHP or MySQL.

Then there's AJAX this, and Ruby that, and all that other "Web 2.0" jargon that I know nothing about apart from having general idea of what it can do.

I also have absolutely NO programming experience beyond

20 GOTO 10

So, with my limited knowledge, where should I begin, and what should I learn? I'm not too interested in anything too complex, but I think I'd have fun fooling around to create (relatively) simple things like Wordie or just beefing up my websites with a little more user interactivity.

Any good books, too?
posted by Robot Johnny to Computers & Internet (18 answers total) 25 users marked this as a favorite
Learn to Program

A free, readable guide to Ruby.

Try Ruby! In your Browser!

Try Ruby! In your Browser!

I'm actually in the same situation, so I'm looking forward to the responses, but I think PHP is the big one out of those three.
posted by theiconoclast31 at 7:34 PM on December 10, 2006 [1 favorite]

You can learn a lot by looking at other people's code. Python strives to be very readable. Django is a python web framework that I'm finding to be a pretty rewarding learning experience and there is a new book underway.
posted by Good Brain at 7:50 PM on December 10, 2006

Whatever the benefits or strengths of other languages and databases, you might as well learn PHP and MySQL, because that's what everyone else is using. Ruby on Rails is of course a cult, like Scientology, and you should stay away at all costs*.

The W3Schools website has some basic introductory tutorials for PHP and MySQL. And the Quickstart Guides from Peach Pit books have always been good for telling you how, without necessarily getting too deeply into the why.

* I was joking. It's not nearly as much fun as Scientology.
posted by AmbroseChapel at 7:56 PM on December 10, 2006

I'd learn Ruby. Its meant to be flexible to write, so you don't have to know the ONE way to do something. And its not perl, which means you can actually read what you write later. I've never liked PHP. Its always felt like a bunch of stuff hacked together. Plus, it seems to be tougher to move from PHP to a real programming language than from most (save BASIC, maybe). I would NOT recommend ASP.NET. Its very fast once you know how to program, but you can get very very stuck in it very easily if you don't.
posted by devilsbrigade at 8:31 PM on December 10, 2006

I'd say it depends on what you want to do and how you want to learn. JavaScript is easiest to play around with because you can do it on your local machine without needing to save changes to a server, but there's only so much you can do with just JavaScript. For AJAX, you'll need to know a server-side language, which you seem to have narrowed down to either Ruby or PHP, both good choices.

Ruby has a much smaller and more excited user community. It's easier to learn from excited teachers, but harder to learn from fewer teachers. PHP is very widespread and thus boring, so pretty much the opposite pros and cons as Ruby. Personally, I think the huge user base of PHP offsets other factors for a new programmer, but I use PHP all day, so I'm a little biased.

If you're doing this professionally, you might want to look at the job markets for PHP, JavaScript, and Ruby. It appears JavaScript is the largest market, but Ruby is growing fastest.
posted by scottreynen at 9:00 PM on December 10, 2006 [1 favorite]

I think you might need to understand a couple more things before you go jumping too deep. Things like how PHP, Ruby (& RoR), Django, etc, that everybody has been suggesting are server-side languages/apps (they run on the webserver), how JavaScript / DHTML are browser-side languages and techniques (they run in the browser), where Ajax fits into all that (in the middle, more or less ;-), and how/why the two groups are fundamentally different.

Once you understand that, then you can make a decision as to the sort of thing you want try doing / play with - which will influence which direction you lean to start with.
posted by Pinback at 9:38 PM on December 10, 2006

PHP would be the most useful thing.
posted by delmoi at 9:41 PM on December 10, 2006

php is the internet explorer of web programming languages.
ruby on rails is the firefox of web programming languages.
django is the safari of web programming languages.

php is the most popular, but also somewhat bloated. it is not nearly as elegant as ruby on rails, but its been around a lot longer, there are more people using it, more support in forums (not necessarily better), the syntax in my opinion is not as pretty, but it gets the job done, and is likely more in demand if you are ever interested in selling your new skill.

i use r.o.r. its good to get a quick start and probably good as a learning tool. its fairly elegant and it is a "domain specific language" and if you listen to dhh (david hennemier hansen, the guy who created it) you get a good feeling from how he designed it. that is to say... that its designed to be very straightforward what everything means and does. some of the things you can do in r.o.r. in one line of very simple, clear and easy to read code take many lines of obfuscated, complex code in other languages that deal with databases, for instance, validation, or searching for a record. ruby on rails makes those types of things very simple.

i don't know much about django except that its basically r.o.r's little brother. its not as mature because its been around slightly less time, not as popular, but it uses python as the base language so is probably nearly as elegant.
posted by farmersckn at 11:29 PM on December 10, 2006 [1 favorite]

take a look at php cake, its framework much like Ruby on Rails, but built for PHP.
posted by farmersckn at 11:30 PM on December 10, 2006

For minor extensions to existing sites, PHP potentially blows Ruby out of the water (and I like Ruby way more than I do PHP) -- finding a host is simpler, converting pages to PHP is as simple as renaming them (or some minor .htaccess hacking), and you can start with things that are no more complex than SSI and work up from there.

Once you get to the point where you're not just embedding small chunks of logic in HTML, frameworks like Rails and (ahem) better designed languages like Ruby have more going for them, and they'll be easier to get into once you have a bit of experience with the basics of programming.
posted by Freaky at 1:02 AM on December 11, 2006

I think if you're looking to add simple features to sites it probably makes sense to dabble in PHP (but please make sure you read up on basic security issues before putting anything live; too many PHP scripts are wide open to abuse).

You can then move on to more substantial projects using a PHP framework (Code Igniter is lightweight and easy to get into), or opt for a language change with Django or Rails.
posted by malevolent at 1:38 AM on December 11, 2006

Malevolent has good thoughts.

I was in exactly your shoes: I knew HTML and CSS cold, but was clueless about programming. I started working with Ruby on Rails (twice), but found that the book I was using (Agile Web Development with Rails) was hopelessly confusing, being written for people who were familiar with programming concepts. A friend suggested I try PHP, and clued me in to Code Igniter. Code Igniter seemed to make sense (I think the documentation was better, or perhaps the framework was more forgiving), and now I'm back to RoR (using the same book), trying to make that work. I'm still learning. Boy, am I still learning.

So you might try going with PHP and Code Igniter.

AmbroseChapel alluded to it, but you'll want to get some sort of database running on your computer. I think most people would recommend MySQL.
posted by Alt F4 at 6:50 AM on December 11, 2006

Former programmer here. I've looked at most of what's been mentioned in this thread over the past year and a half, and I also see the type of advice being given here (some of it is familiarity-bred or testimonial-driven, and some of it is as vaguely clueless as the spirit of the original question), and I have to add this to the mix:

1. In 20 years programming, one thing I know for sure is that, generally speaking, any language can do almost anything you want. Some languages make things simpler than others (and vice versa), but the language isn't even really important. Functional programming constructs, and maybe a little OOP, are what drive application development. When you're presented with a new language for a task, and you know what you want to write, the questions that usually come up are not "Well, how do I learn this new language" as much as they are like "what's the syntax for a DO loop here?" A smart reference guide is usually all that an experienced programmer needs to build an application in a new programming language.

More importantly...
2. It seems that you don't really care about languages, and that's good. What you should care about is application development. You aren't so much concerned with the "how" as you are with the "what". You want to know the types of things that you can build that other people might find valuable. And you really don't even have to come up with something new... you can either work with an existing project to add new functionality (which you can uniquely provide to your clients), or you can try to make the exact same thing that's on the marketplace already and just sell it with your own stamp on it. Yeah, the strategy part isn't really that hard!

That said, we're past the days where substantial projects and programs were feasible with a one-man staff. You need a programming team, you need a lot of organizational skills, you need knowledge of the process of programming an application (which is an entirely different, and equally important, concept apart from learning a programming language or learning how to code), you need knowledge of your customers, you need knowledge of your marketplace, you need to know how to sell, you need to make sure that the pencils are sharpened/power bill is paid/tax forms are prepared, etc. There is great opportunity for new work right now not just because of the large number of unfulfilled application needs out there, but also because so many people/teams who are working on this stuff are incredibly bad at one of the pieces of the application development part of the puzzle. If you develop the right approach, you can eat someone else's lunch quite easily.

I'll add that you'll learn very little about application development in a lot of educational institutions out there, from trade schools to universities. Everyone's obsessed with teaching how to code. That's the most likely path to having your entire profession outsourced to another country someday. You may wish to build on some of those other skills, too, but you'd learn more on-the-job than you ever would at a school.
posted by brianvan at 9:02 AM on December 11, 2006 [1 favorite]

Given this criterion -- enhance my bare-bones knowledge of HTML -- I'd say Javascript and DHTML first. (DHTML is one of those buzzwords that doesn't mean anything specific, but refers to a collection of techniques to achieve dynamic effects in a web page, usually by using Javascript to manipulate the DOM.)

In general, I consider Ruby a delight and PHP an abomination. But, as others have noted, PHP does offer several advantages -- probably the lowest barrier of entry for a novice programmer looking to make dynamic web apps, and broad support among hosts.
posted by Zed_Lopez at 10:17 AM on December 11, 2006

If you have a nice web server with lots of control (or the money to rent such a server), use either Ruby on Rails or Django. I'd choose Django, because I find Rails to be a little irritating, and Python to be a more awesome language than Python.

If you have anything less than full control over your server, Django and Ruby on Rails will be much more trouble then they are worth. If you even get an application screaching along with either, when traffic hits it, without all of the extra niceness, it'll crash.

So, on a shared server, use PHP. Start out either doing a tutorial for CakePHP, or installing a functional open-source PHP app that does something desirable and modify it to be better, and learn the language that way. And keep the manual cracked open at all times.

Oh, and if you aren't familiar with XHTML and CSS, learn them immediately. Use the w3schools tutorials for better HTML, and experiment with CSS in different browsers to get a handle on its payoffs and drawbacks.
posted by tmcw at 1:10 PM on December 11, 2006

All joking aside, I'm having a bit of a problem with the comparison of apples and oranges here, or rather, the comparison of apples and fruit salads.

PHP is a programming language.
Ruby is a programming language.

Ruby On Rails, however, is a cult framework combining the Ruby language, database access, prepackaged HTML and Javascript templates and for all I know a set of steak knives.

So if people are saying "you shouldn't learn PHP, you should learn Ruby On Rails", that just doesn't make sense.

There are frameworks for the PHP language as you can see from comments upthread, and presumably, they're comparable with the Rails package for the Ruby language.

But honestly, for learning how dynamic/database websites tick, I don't think any framework is a good place to start. That's like using Dreamweaver to do your HTML for you. You won't really know what you're doing.

I think you should slog it out in the trenches, figuring out the connection to your database, figuring out the right names and field types for the columns, figuring out how to extract the right data and figuring out how to display it on screen. Because the figuring out is the learning.

Once you've done that, then yes, get yourself a shiny all-singing all-dancing framework and sit there thinking "gee, this is easy, I don't have to do all that crap from before!" -- you'll be able to set up a new website in a tenth the time.

But if you put in the hard yards before, at least you'll appreciate all the stuff that, behind the scenes, the framework is doing for you.
posted by AmbroseChapel at 3:34 PM on December 11, 2006

What web technology/language should I learn to make simple online apps and just generally enhance my bare-bones knowledge of HTML?
I get the impression your approach is from a recreational Web programming perspective, in which case my recommendation would be to initially focus on Javascript and playing with browser-based interactivity. After this move on to PHP as it enjoys the broadest support, it is a language "made for the Web" and it isn't too big a jump really from Javascript (at least syntax-wise). Wear a helmet as you'll be bumping your head against hard surfaces often.

If on the other hand, you are considering this on a professional level, perhaps the first consideration would be to partner with someone already well versed in the many aspects of Web programming. There is *a lot* to learn, and very quickly your projects will be non-trivial. Then you'll have to worry about many more things: security, scalability, portability, maintenance, debugging, platforms, APIs, AJAX, Syndication, CMS's, etc.

Lets asume you remain determined to brave this new world. Consider then mastering an application framework on top of your language of choice. In general they'll make your life easier by providing a base library of ready-made solutions and shielding you from some/many pitfalls common to Web application programming (eg. SQL injections). Play with the many scripting languages, one of them will surely fit your way of thinking better than the others, and figuring this out souldn't take too much time.

Which framework? For PHP there's CakePHP and Code Igniter; for Python there's Django and TurboGears, for Ruby there's Rails and Nitro. Do frameworks have disadvantages? Well, they _are_ pre-packaged solutions, so they will get in the way once you start thinking of little customizations and out-of-the-box ideas that their programmers didn't think of initially; they're optimized for the development process, not for performance. This shouldn't be an issue unless your website suddenly hits the big time.

Of these languages my personal favorite is Ruby. However, when it comes to using shared-hosting providers, there really is nothing as well supported as PHP. That means deployment will be easiest and most inexpensive for it. Python also enjoys better hosting support than Ruby.

One other thing I can think of, is that if your goals include eventually selling your services as a programmer, and your only incentive is the economic angle, not "the love of programming", then maybe invest your time and money into something like Java or dot-Net, as they definitely have more demand, and on average pay more. Sure, a bunch of us will say that you were seduced by the dark side, then again, you'll be laughing all the way to the bank (while cursing your boring job).
posted by tremendo at 4:01 PM on December 11, 2006 [1 favorite]

Response by poster: Thanks everyone! And yes, tremendo, you've got it right -- I'm purely interested in this on a recreational/personal-improvement level. I have no intention of ever selling myself as a programmer, but I enjoy making websites, I have a few that are successful, and I'd like to up my game a little.

And FWIW, I host my sites on a dedicated machine, not a shared plan.

The general consensus seems to be that I should familiarize myself with PHP and Javascript, so perhaps I'll go check out a few books.
posted by Robot Johnny at 4:30 PM on December 11, 2006

« Older What to Wear?   |   Baloney Sandwich? Newer »
This thread is closed to new comments.