I’ve been searching for a pithy phrase to capture an idea, and the title of this piece takes my best shot. For ages, we’ve imagined that non-programmers can, on some level, learn to adapt the software that they use. Many did, most dramatically by engaging with Excel’s programming features, but most did not. And though I’m an admirer of Yahoo Pipes, I don’t think that a visual skin on top of a procedural programming model will appeal broadly to folks who otherwise aren’t inclined toward procedural programming.
Now arguably, the reason that most people aren’t so inclined is that we’ve failed to teach computational thinking1. Jeannette Wing’s manifesto on this topic invites us to imagine how the intellectual tools of programming — including abstraction, naming, composition, refactoring, heuristic reasoning, and separation of concerns — add up to “a universally applicable attitude and skill set that everyone, not just computer scientists, would be eager to learn and use.”
I’m sure Jeannette Wing is right, I hope she will persuade educators, and I’m delighted to discover that Microsoft Research is sponsoring the Center for Computational Thinking at Carnegie Mellon to explore this topic. Meanwhile, I wonder if we’re seeing the emergence, in the wild, of a very basic form of computational thinking that may prove to be intuitive and broadly accessible.
As I mentioned in my talk at Berkeley earlier this week, the elmcity.info project invites people to use tags not only to describe things, but also to compose and coordinate simple services. So for example, by posting a geotagged photo of a restaurant menu to Flickr, with the right set of tags, you’re both helping to create a directory service and enhancing that directory with Flickr’s image services and Yahoo’s mapping services. By posting a video clip of a candidate’s appearance to YouTube, along with the tag nhprimary, you’re helping to build a database of clips. By posting an event to Eventful along with the tag podcorps, you’re making a request for service — that is, you’re inviting one of the PodCorps.org stringers to help you record and publish a podcast of your event.
One of the trends in programming is the transition to a more declarative style. Where possible, you specify what you want to retrieve from the database, rather than how to retrieve it. Where possible, you specify which transactional or security behaviors your service should have, rather than how to implement those behaviors.
Among other things, tagging may become to ordinary folks what attributes are becoming to programmers: a language that doesn’t just describe things, but also invokes and coordinates behaviors.
1
Thanks to Patrick Phelan for pointing me to Jeanette Wing’s work.
Posting with a ‘socially broadcasted’ tag reminds me of RidiculouslyEastGroupForming where you trackbacked to a URI if you blogposted on a certain topic. But Much Simpler. Technorati will even search on your blog for tags, so a tag photo:keene on your blog could be used to set up a virtual flickr, in theory. Its worth asking how the social broadcasting of what tags to use can be done in a community..
Hi Jon,
Great article and link.
For me, “programming” is just a synonym for “talking to a computer”.
As for humans, to talk to computers, we use “languages”.
All the history of “programming languages” is a run to near the gap between Machine’s Language and Human’s languages, from Assembler to Python or Javascript.
In the end, someone will invent a language that can approach nearer from natural language, maybe by encoding properly all the natural languages constructs (Proper Nouns, Common Nouns, Verbs, Prepositions, Declarations, Questions…).
With this language, a human won’t need a translator (=programmer) to tell the machine what things are or have and how to do things.
One day…
I’m not sure if this is relevant, but I see a curious relationship between tagging and logic programming. Tags are akin to facts (extensional information) and derivative resources are analogous to clauses (intensional information, establishing relationships between sets of facts) and/or queries.
tags are broken. Because they provide such a narrow bandwidth, they’re not as useful as they need to be. If I see a tag like “podcorps”, and I don’t already know what it means, then there’s no way for me to find out. Some sites allow spaces, some don’t. Some allow mixed case, some don’t. That makes it very hard to merge tags from different sites, or create any kind of clear picture based on large numbers of tags. What you want is to attach a URL of some sort in place of a simple keyword. The URL doesn’t point to a document, it points to an idea. For example, instead of tagging something with “podcorps” you should be able to tag it with “http://podcorps.org”. For example, I want to tag something with “http://en.wikipedia.org/wiki/Monster_truck”, not a mixture of “monster-truck”, “MonsterTruck”, “monster truck”, “monster, truck” (as two tags) etc, etc.
“If I see a tag like “podcorps”, and I don’t already know what it means, then there’s no way for me to find out.”
In this case, the tag is an agreed-upon protocol that’s used intentionally to coordinate a request for service. I expect to see lots of ad-hoc protocols arising that coordinate this way.
It’s very easy for the service consumer to request service, and the service provider to respond to that request. Really, it’s just a half-turn of the crank from the now-familiar practice of announcing, at the beginning of a conference, that the tag for the conference is, say, mix07. Agreeing on that tag makes it possible for a whole bunch of producers (of blogs, photos, etc.) to coordinate with a whole bunch of consumers (aggregators, etc.).
We’ve seen fights over everything from territorial claims to trademark issues play out in the DNS namespace. Why do we think that as tagging grows more popular it will remain collegial? Even while it does, how much can it scale? What happens when there is a namespace collision among announced tags? Will ada07 belong to a meeting of dentists, dietitians, or programmers? In their current incarnation, I think it is difficult to manage tags because you have to know the meaning of a tag a priori (as Chris mentioned). If I’m organizing a conference, there doesn’t seem to be a canonical way to identify whether the tag “ada07” is going to be used for another purpose.
Tagging can easily become the underbrush of the trees that make up the forest. Can’t see the forest for the trees….Uh what trees? Can’t see the trees for the underbrush. George, which tag did you put the GPS under?
As to “Computational Thinking”.. isn’t that a bit like putting the cart before the horse? I mean, what came first, the human or the computer? The idea of teaching “computational thinking” is to educate people to think like how a computer is programmed. Programmed by another – therefore to think like another or how another wants you to think, not to forget that in some places there are software patents where you might then be expectd to not infringe or pay a licensing fee to ….think???) Instead of being the creator you become the created.. And “Computational Thinking” doesn’t seem to require what is typically expected in learning… the verification of understanding feedback loop.
Microsoft is not known for educating the end user, but rather dumbing down the user base and supporting anti-trust against the consumer. Is there evidence of change enough?
So we get to be in a forest of thick underbrush and gotta be careful of traps all over the place in how we think?
Maybe thats a bit extream, but I believe there is a fundamental failure in all this. A failure to recognize and teach the fundamentals of abstraction creation and use. Just as math requires teaching the numbering symbols and what they mean along with basic addition, so is there fundamentals to teach regarding Abstraction and Automation of. And in so doing provide the fundamental computer based functionality that anyone can enable their own feedback loop of verification of computational matter.
Generally its an established understanding that to honestly learn computing concepts you have to apply them through computers (a feedback learning verification loop).
I know a little about Tagging, how it can be done in different ways and at different levels.
See foot notes at http://threeseas.net/abstraction_physics.html regarding the “Open Source as Prior Art” project.
i agree to this. we all should promote computational thinking to all levels of society, this is the only way old generations can pass-on the legacy of their hard works. if new generations are already afraid to do the math, i’m for sure that all their hardworks will become meaningless after all.