Saturday, November 20, 2010

Websites....

I consider myself a pretty competent programmer. I can pick up a new language / programming environment in a day and hammer out a cool prototype within three or four days. So when I had an idea for a website, I jumped right in.

Let me start of at the end... the website works! It's in private beta right now and I hope to release it to all in a month.

But it's been a long hard slog; far more work than I imagined. The last website I built was circa 2001. It was really advanced for its time: simple javascript and flash animations! Now, in this Web 2.0 world, "simple" anything won't cut it. It's not just that javascript has changed and flash has been dropped. Today, the list of technologies to choose from to build a site is staggering.

But even if you don't want to learn everything, say you just want to learn enough to put something decent together; well you're still in for a steep learning curve. Here's the list of mandatory technologies I've had to either know or learn to jump into the Web 2.0 world:
  • Advanced Javascript - learning object oriented programming the javascript way is definitely something new. It isn't bad, there's a lot to like about javascript, just different.
  • HTML - Remember the days when tags like "center" and "table" were your friend? Forget it, you're just using div and span now.
  • CSS - I hate CSS. It isn't a programming language at all. It's fine for colors and sizes. But once you use it to do layout, your headaches will begin. It's an art more than a science and nothing feels deterministic:
    Do you use the "top" or "margin-top" attribute? Who knows, try both.
    Why do we have both inline and inline-block? Because we can.
    Unfortunately, CSS is the only thing out there that does what you want. You just have to swallow it.
  • python - Admittedly, I was already pretty well versed in python (i luv python). If you don't want python, you're going to have to learn PHP or one of the other web-programming languages.
And those are just the languages you'll need to learn. The fun really begins when you include all the libraries:
  • jQuery - Very cool, I must admit. But for the uninitiated, it's totally different from anything you've done before.
  • jQuery Plugins - There's a jQuery plugin for everything. Great. Unfortunately, its a new API you have to learn to do anything.
  • Django - The web-backend. Cool technology but pretty massive and you have to learn quite a bit of it to do anything. Oh, did I mention that to use Django you have to learn its own special html-markup language too? It can easily take a day of tutorials to get familiar with the system. I've been working with it for a month now and I've only started becoming comfortable.
  • Google App Engine - It isn't necessary to learn google app engine. But they're a ridiculously cheap web-hosting solution... actually, for most cases it's totally free. But they do things so totally different, that there is a nice learning curve. To start with, there is no file system. Enjoy.
And perhaps I forgot the biggest pain: compatibility between different browsers. Just when you think you put the final touches on your beautiful site, you check it out on a different browser and it looks like crap. I'm not a Microsoft-hater, but this experience has definitely left a sour taste in my mouth for IE and I haven't even tried the mobile browsers.

Moral of the story is that making a website is pretty complicated involving nearly a dozen technologies. But websites are the future (ahem, present) and it feels pretty gratifying being able to put a real-life site online.

No comments: