NCGJNC2GMRJA
NCGJNC2GMRJA
In the movie A Beautiful Mind there is a scene in which a brilliant, but awkward young John Nash has an epiphany in a bar while attending Princeton University. In it, a bevy of young women walk into the bar and all eyes draw on a particular, very attractive blonde. His friends say something along the lines of “every man for himself” and “recall the lessons of Adam Smith, the father of modern economics, ‘In competition, individual ambition serves the common good.'” Nash grows silent, lost in thought and then states “Incomplete…Adam Smith needs revision…” and goes on to explain that in acting with only selfish interests, they achieve a negative result, but in considering the group as well as their own interests they yield the most positive result. In other words, Smith was close, but not quite right as he illustrated in a very simple model. In case you’ve never seen it, you can read the relevant script if you are interested.
As Smith has been called “The Father of Modern Economics,” Berners-Lee has been called “The Father of the Web”. In addition to formalizing the fundamentals that make the Web as we know it possible today, he is the founder of the recognized standards body of the Web, the W3C and in the late 1990’s he posted a series of interesting drafts laying out a future vision of the Web. Particularly interesting among them was one titled “The Evolution of a Specification — Commentary on Web architecture. For much of the following 14 years, the W3C focused and aligned largely along the vision he lays out. Berners-Lee’s insights were brilliant, but his vision ultimately incomplete. Tim Berners-Lee (and therefore the direction/vision of the W3C) needs revision.
Well, no one special really – and it’s not exactly a criticism of the ideas as much as a statement which should seem almost self-evident.
When writing, he frequently references what might or might not work “in the real world” (his words), explains why (pointing to historical lessons learned) and finally proposes some solutions (a grand vision): XML, schemas, XSL, RDF and a giant Semantic Web. For the most part, the W3C has recently shifted away from this focus and back toward something more like the Web we are mostly familliar with.
With over a decade of hindsight, we can leave aside a judgement of “good” or “bad” and state pretty simply that many of Berners-Lee’s ideas presented in this “new vision” just don’t seem to have panned out and been largely sellable as he might have hoped in “the (really) real world”.
Very simply, I guess I am saying two things. First, that many of the problems described by and observations made by Berners-Lee all the way back then are still as true today as they ever were:
Second, I am saying that perhaps some of the goals and ideas from almost a decade and a half ago could use review. As one extremely simple example: One that I think could use revision is the model of “partial understanding” as he describes it, because that general philosophy still affects some decisions. In his analogies, they often make perfect sense: If you get a bunch of data, you really only need to understand the bits you intend to use. Obviously. On the other hand, this principle is very widely applied throughout Web technologies and in Berners-Lee’s vision, he imagines that all HTML documents should be readable/largely hold up with a simple text-based browser using an anciently slow connection in some only semi-connected country. While this may have seemed logical in 1998, I know of no site that lives up to that level of compatibility. Indeed, “interoperability” between browsers and versions of browsers is something we consciously choose. A great number of websites would cease to make sense without the CSS that displays them and simply wouldn’t work without the JavaScript that drives them past the initial state. Given his own admitted lack of imagination for just how unexpectedly things will develop in the future, it seems to me unreasonable to expect that a site written to take advantage of those leaps today could usefully be viewed by a browser written in 1998, even with some kind of partial experience. It feels like we could do better by shaping that expectation a little more explicitly so that authors could simply say “sorry, you need to update” or even “here is a really simplistic version of some data for your sad, sad browser – maybe you should update.”
I will be dedicating some future posts to sharing some of my own thoughts, and how some of the projects that I am involved with (like HitchJs are shaped by them) but as I said: I’m really not anyone special, that’s not the point. Regardless of your specialness, I think we could use some new ideas and I propose an active conversatio…. Leave a comment… Write your own post(s)… Tweet your thoughts about it. Use the social media to get some active discussion going if you like the idea: What are your thoughts onhow to revise the vision/model for the evolution/architecture of the Interwebs, standards or even browsers since they are our window to the world as it were?
When CSS was conceived, the basic vision was that HTML should provide structure and semantics while CSS would providing styling via rules based on selectors describing (or selecting) what to style. In an ideal world, Web pages could be authored by one group of people independently of the visual needs and then another group (designers) could go and write CSS to style it up. The biggest problem in achieving this ideal was that HTML had such a small number of tags without any real obvious way to add enough semantics to actually accomplish this. Thus, two things were added very early on: The humble <div> and <span> tags in HTML and the .class in CSS – the general idea being that the authors of a tree of markup could (quite independently of style concerns) build generic structures and pepper their markup with semantics via classes and ids.
In practice, there have been a relatively few cases (like WordPress blogs, for example) where things are simple and standard enough this has worked out “pretty well” and a whole lot more where that is actually not the common experience. Generally speaking, markup is not created independently of design and changes to design often dictate changes to markup. Even the attaching and management of classes are changes to markup and if they happen purely to achieve design, well, that’s less than desirable. There have been lots of blogs and articles written over the years about the problems that this created and the creation of new terms like “classitis” and “divitis” to describe their negative impact.
Still, that was what could get done initially and it was a lot better than what we had prior to it. Considerably more important, however, is that this was never meant to be the end game – even by the people who created it. HTML drove forward, creating some new tags and work began on an XML dialect which promised all kinds of things, while CSS followed up almost immediate with CSS 2/2.1 and began CSS 3 (the first draft was published in August 1999, only 3 months after 2.1 went to REC status). But then, a lot of confusion happened and for a long time, things were pretty stagnant.
The solutions to this are pretty clear, and it’s arguable just by looking at the history of drafts and discussions that everyone knows what needs to be done about it: HTML authors need more semantic abilities (new tags help and so do things like data-* attributes), CSS needs new concepts (regions and generated content for example) and more powerful selectors. The good news is, things are moving again, though not as quickly as many of us would like…
My friend, and co-author of Hitch, Clint Hill has been posting some good articles about Hitch over on our blog about how Hitch helps with this last part by allowing authors of CSS to use an expanded set of selectors (Hitch provides a selector plugin model, just like jQuery) right in their CSS, affording them with more expressive powers.
I’ll let you read the article yourself, but the gist of of it is about a set of selectors for selecting elements based on the numerical qualities of your attributes. For example, the :-math-greaterthan(attr, number) filter allows you to write CSS like this:
/* Let's visually call out players who achieve this... */
.player:-math-greaterthan(data-score, 100000){ font-weight: bold; }
Here’s a bit more on the theory behind this selector and how it is relevant to the above.