Friday, June 27, 2008

Web Designer...?

For a living, I'm a "Web Developer"; I've done this work full-time, part-time, and freelance -- I've taught courses about it, I read about it, and I depend on it to eat and keep a roof over my head. But unfortunately, web sites are created on, transmitted by, and viewed with computers and that puts them squarely in the middle of "I-don't-know-what-that-is-but-you-have-pixie-dust-so-here's-money-make-it-work" land. Even more unfortunately, right next door to this mythical place is the thriving metropolis of "that's-not-what-I-wanted-dammit".

The point here is that most people who might hire me don't really know what I do. I suspect part of this problem stems from the beginning of the web, where a website was a few HTML files hastily cobbled together with some animated GIFs of the company logo spinning. Back in those days, one person could build a company website and as long as something on it spun or blinked or scrolled it was bright and shiny and everyone was happy.

Now, however, a website is (or should be) a crucial part of a business's brand; it has a central role to play in attracting customers, providing information, stream-lining support, and supporting customer retention. It is not enough to have a spinning logo (in fact, they are now -- and always were -- a terrible thing). The website must be visually appealing, functional, and modern. Increasingly it must be multi-lingual and multi-cultural ("localized", that is); it must work well on a portable devices, take advantage of cutting-edge technology, and still degrade gracefully for "vintage" browsers. It must remember users, adapt to their needs, and provide robust communication to and from the company it represents.

A modern website is a huge and hair beast for all but the most trivially simple organizations.

It is not a one person job anymore.

And yet, many places still try to fill all the roles of modern web development with one (or perhaps two) people. There are many titles for this super-human role: "web designer", "web developer", "web programmer", "web master", "web guru", even "web ninja". But rarely does the title convey anything meaningful about the scope of the position; consider, for example, the following list of requirements taken from an actual job posting:
  • Standards based XHTML / CSS / JavaScript coding
  • Strong knowledge of OOP and Database development
  • Strong Flash skills are highly advantageous
  • Excellent Photoshop and / or Illustrator skills a plus
  • Strong conceptual skills
  • A solid grasp of usability and strategic thinking
  • Experience with ASP.NET a plus
  • Understanding of website usability
  • Understanding of information architecture
In future posts, I'd like to describe in detail some of different roles in modern web site design and development, and hopefully it will become increasingly clear that this is not one job, but several. For the moment, however, I'm going to break these requirements down into rough and broad categories -- categories which generally don't (and often shouldn't) overlap very much:

Standards based XHTML / CSS / JavaScript coding

There's already a bit of diversification here, though you might not catch it if you aren't familiar with these technologies.

XHTML is the "markup language" used to write the files that comprise a website -- it is not a "programming language" in the same way as Java, Python or C and putting XHTML to use to create documents for the web bears little to no resemblance to programming a piece of software. One does not "program" in XHTML, though most computer programmers would find it trivial to understand the basics of the language.

CSS is an entirely different language that provides a method by which visual styles can be applied to XHTML documents (or a variety of other types of documents for that matter) based on rules that bind various properties to particular elements of the document. Syntactically, there is no similarty between XHTML and CSS at all. That being said, it is almost always the case that a person skilled in XHTML will be skilled in CSS, since CSS is a crucial element of the presentation of content on the web. Once again, one does not "program" in CSS.

JavaScript is a third, entirely different language which has nothing materially in common with XHTML or CSS. It also has no functional overlap with XHTML or CSS -- that is to say, JavaScript is a general progamming language, not a descriptive markup language or style specification language. It is true that JavaScript is usually applied in the context of the web to create dynamic and / or interactive elements of a web site, but it is not restricted to that environment by design, and JavaScript has been used as an embedded language in applications other than web browsers.

It is JavaScript in particular that stands out here: there are concepts of computer science and programming which apply to JavaScript that have no analogues in XHTML or CSS. It is a substantial leap in knowledge and experience to move from XHTML & CSS to well-written JavaScript; many (or most) people working with the web make this leap, but that doesn't mean the differences between the technologies can be ignored. There is no reason what-so-ever to believe that someone skilled in XHTML and / or CSS will be equally skilled in JavaScript, or vice versa.

Strong knowledge of OOP and Database development

This requirement includes two largely unrelated elements of technology: OOP ("object oriented programming") and database development.

OOP is a paradigm and methodology used to segregate and encapsulate elements of information and functionality within a piece of software. Generally, OOP depends on some level of programming-language-based support (for example, the C programming language lacks inherent OOP features, whereas C++ includes them), but it is possible to apply aspects of OOP in many languages which do not provide strong, intentional support for it.

Database development is the design and construction of a database intended to hold certain types of related information. In some sense, the idea of separating pieces of data into coherent elements bears a similarity to the concepts underlying OOP, but the way in which a "coherent element" is defined -- i.e. the manner in which the data should be structured, divided, and stored -- is based on a different set of principals when dealing with database development.

Strong Flash skills are highly advantageous

Flash itself is a mixed bag -- it's real primary purpose is to provide animated, artistic content. Secondarily, it offers it's own scripting language (ActionScript) to provide interactivity. Perhaps unfortunately, it is often the case that artists are forced to learn ActionScript to complete their toolbox of Flash development skills (or worse yet, that programmers attempt to gain some kind of artistic competence so they can actually draw the animated bits), but in the overall analysis Flash is generally treated as an artist's skill, not a programmers. The application of Flash, and the design and development of content in Flash, only enter the realm of programming when interactivity becomes an issue, and even then there is often little resemblance between scripting a Flash movie and developing an application.

Excellent Photoshop and / or Illustrator skills a plus

If Flash was a debateably artistic requriement, this is crystal clear. Photoshop and Illustrator are both tools for artists and designers -- not programmers or developers. It's useful for a developer who is about to create a web site using XHTML and CSS to understand Photoshop well enough to take layout images and divide them into pieces suitable for the web, but this is a far cry from having "excellent skills".

Strong conceptual skills

This, too, seems like an artistic requirement -- though it may be an entirely different kind of art. Perhaps this refers to the conceptual development of layouts and color schemes? Or does it refer to conceptualizing features and functionality? New products or applications? Marketing plans?

A solid grasp of usability and strategic thinking and Understanding of website usability

It's unclear if "usability" and "strategic thinking" are meant to be related, and if so, it's unclear how they're related, but these are not the domains of programmers or artists in general. "Usability" is field unto itself, and merits careful consideration and thoughtful definition. Usability for whom? Disabled persons? People on mobile phones? Old ladies using Internet Explorer 4 at the library for two hours on Tuesday afternoons? Six-year-olds? Non-English speakers? These are all very different kinds of usability, and most of them are outside the experience of, say, a 25-year-old college graduate in computer science.

"Strategic thinking" seems like a marketing requirement, but once again it is not clearly defined. Strategies concerning what? Future developments in how the web works? How to market to those old ladies in the library? The best way to present a graph of data to a six-year-old?

Experience with ASP.NET a plus

ASP.NET is a server-side language used to dynamically generate the XHTML that comprises pages on a website. This is a different language from JavaScript, XHTML, and CSS -- and although it has some syntactic similarities with JavaScript, it generally serves a very different purpose in the arena of web development.

Understanding of information architecture

"Information architecture" is another domain of its own, relating to the understanding of the structure, storage, and retrieval of information in meaningful and useful ways. No doubt, this has some parallels with database development, but it would be unreasonable to think that a database developer would have a solid grasp of the application of information architecture to those graphs for the six-year-olds -- none-the-less, the field does have applications there. Information architecture might also influence the overall design of a web site, but you would not necessasarily expect a layout artists to be well versed in the nuances of how information is best presented to users.

So, let's summarize. Based on the requirements listed for this job, the successfull applicant will be expected to:
  1. Build a complete database for a web site
  2. Design (or re-design, perhaps) an artistic, modern layout for the site
  3. Create and / or update interactive, animated Flash movies for the site
  4. Convert the designs into hand-coded XHTML and CSS
  5. Implement non-Flash-based interactive elements of the site with JavaScript
  6. Code and deploy a (potentially ASP.NET, object-oriented) server-side application which interacts with the database (previously developed) and generates correct XHTML, CSS, and JavaScript based on various pieces of data and the layouts previously designed
  7. Ensure that the entire site is accessible to a wide variety of (unspecified) target audiences on a broad spectrum of (also unspecified) devices
  8. Ensure that information is collected, stored, organized, retrieved, and displayed in a way that is as effective as possible for the entire range of (unspecified) target audiences and devices
There's no doubt for me that if a single person is tasked across such a broad array of disciplines, the quality of work under one or all of them will suffer. And yet, this "jack of all trades" job is a common approach for many organizations looking to create (or improve) their presence on the web.

Tuesday, May 6, 2008

Sitting under the Bloody Great Leaf

There isn't any reason to recognize this, but my intention here is to blog about web development... I know that "Bloody Great Leaf" doesn't make that very clear. Since this is sort of an introductory posting, I'll take just a moment to explain the blog's title.

Ikea (the best furniture store in the world) sells these fantastic giant nylon leaves. I have one in my home office:





And I just couldn't shake this image of someone wandering in with a British accent commenting about how I had this "bloody great leaf" stuck to my wall; in the end, it doesn't seem any less reasonable than most other blog titles.