Tim Berners-Lee Needs Revision

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.

Who are you to criticize Tim Berners-Lee!?

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”.

So what are you saying?

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:

  • We still don’t have a truly “great” model at the W3C (or anywhere else) as to how we can simultaneously be independently innovative and interoperble. We still don’t avoid the problems he describes in order to achieve standardization, in fact, looking at the record of the W3C, it is my estimation that this process and the models themselves might have gotten worse during that time (CSS 2.1 for example went in and out of recommendation status numerous times over the course of well over a decade). Certainly it seems that there has been a turning point more recently and progress has begun to be made again, but even today the discussions about the actual standard model of how to get from nothing to interoperability and standardization are regular discussion on the W3C (and now WHATWG) lists and in their meetings (the minutes of which are all published).
  • We still dont have the kinds of “great” ways Berners-Lee envisioned for authors to easily express both local and global semantics or to deal with these as well as we’d like to. While I would argue that we are much closer, we still aren’t there.
  • We will don’t have great ways to mix languages in the sense that it sounds to me like he is describing in the Evolution draft.

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.”

Where do we go from here?

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?

(Really) classy CSS

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.

Theory vs Reality

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.

Solutions

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;  }

Rationale…

Here’s a bit more on the theory behind this selector and how it is relevant to the above.

  1. The proposal certainly isn’t to throw away .class, merely to use it more “as envisioned” in terms described above. If, indeed, you recognized semantic meaning in your tree and maintain it as a class for reasons other than styling – that’s great. In our example above, however, it’s definitely possible that that is not the case. Clearly there is semantic meaning to the number, but whether a designer decides to attach some arbitrary styling to that or not shouldn’t require changes to the tree. This approach allow the appropriate technology to handle the appropriate concerns. From the perspective of a CSS author: You use the classes you have when they are there, and have the expressive power to style things that are purely visual when they are not. The alternative of scattering presentation logic throughout your php or jsp (or whatever) and your javascript to maintain a class in some of these cases is considerably less desirable.
  2. CSS has had attribute selectors for a long time which allow you to select attribute values that are contained with in, exactly equal to, start with or end with values expressed in your selector. There have long been conversations, even tentative plans to further expand attribute selectors to something with more “regExp” power, there have even been plans for a :content pseudo-class which would allow the same thing with textual content – but it’s all string based currently. Attribute selectors already support data-* attributes. Literally all that is added is the ability to write rules that consider something numerically rather than textually.
  3. CSS has rich support for algebraic expressions as they relate to structures (children, characters, etc) in the tree and will soon add a calc() function. Again, it makes sense if you think about it that CSS should have appropriate power to do what is required in order to achieve styling without mucking with the tree…

Continue reading