I've been fortunate enough to spend some of the past couple of days with a comic-writer who studies the academic experience, and who might well have a greater aggregate impact on science than almost anyone else I've ever met.
This week has been the SICSA graduate student conference, giving SICSA's PhD students to share their ideas in front of a friendly audience. As well as the science, one of the goals of the event was to improve the student experience in social ways, letting them find new collaborators and share their experiences and worries. And what better way facilitate this than by inviting the writer of PhD Comics, one off the most popular internet comic strips, to come and talk?
The man behind PhD Comics is Jorge Cham, whom I have to say is one of the nicest guys you could want to hang out with.
Jorge has a PhD himself, of course. His research topic was robotics, specifically small, fast robots mimicking cockroach locomotion to move over uneven surfaces. These sorts of systems have huge potential applications, from space missions and environmental rovers to accident-victim location and disaster recovery. However, his main passion even during his PhD was cartooning, reflecting on and responding to the graduate student experience. It started as a print comic in a Stanford newspaper and predictably did well in a place where the student density is so high.
But it was only when he put it onto the internet that it really took off. Like many things on the internet, there's a law-of-large-numbers effect that can come unexpectedly into play. The number of graduate students in any particular place is usually small, but integrated over the world you have a respectable audience -- and PhD Comics now sustains around half a million hits per day.
The goal of PhD Comics is to act as an encouragement to graduate students. For anyone who's been through it -- as I have -- it's overall an extremely rewarding, liberating intellectual, social and life experience; it's also a lonely, frustrating, depressing, isolating and self-critical one. It takes an effort of will to believe that you're making a contribution, making discoveries that others will find interesting and worthwhile. Even those with unbounded self-confidence -- which most certainly does not include me, not now and certainly not then -- will find themselves questioning their motivations and capabilities over the course of their PhD.
Often the most sobering part of the whole experience is the realisation of how smart other people are. Most graduate students come from being top or near-top of their undergraduaate class. They then land in an environment where everyone was top of their class: the average suddenly lurches upwards, which can be disorienting. Not only that, but graduate students generally mix, on fairly equal terms, with postdocs and staff who have enormously more experience and who may in some cases be quite famous within the limited bounds of their fields, putting further strain on self-confidence.
I have a quite visceral memory of going to my first graduate-level presentation on a topic (type theory) that I thought I understood well -- as indeed I did, at an undergraduate level. Three slides into the talk, I realised that I knew absolutely nothing about type theory as it actually is, its important concepts, challenges and uses. It was quite wrenching to realise the extent of my own ignorance. Conversely, though, when I now talk about my own work I'm conscious of the gap that exists between people with a reasonable (in every sense) knowledge of a field and those with an expert knowledge, and try to pitch the material accordingly.
Which brings us back to PHD Comics. Every individual graduate student will feel overwhelmed at some point, and may not be able to reach out locally to find support. But they can reach out to the shared experience that is the comic and its archive and see how others feel about the same situations and challenges that they face -- and do so in a way that's far more entertaining than talking to a counsellor. I suspect this is an incredibly valuable service, and one that I'd've welcomed when doing my own PhD.
Does this help with the process of doing science? The completion rates for PhDs is high --over 99% for Scottish computer science, for example -- but the time taken, and stress endured, in that process varies widely. Anything that helps mitigate the strain, helping students cement their self-confidence and deal with the challenges, is very much to be welcomed.
This got me thinking. Robotics is an important field, and it's impossible to say what we lost in terms of research and innovation when Jorge followed his passion. But it's almost certain that he's influenced more scientific activity, more widely, as a cartoonist than he ever would have done as a researcher or an academic. Not everyone can be a researcher, but even fewer can provide insight and entertainment as cartoonists, and even fewer can spot and take the opportunity to become the voice of graduate students worldwide.
Following this logic a little further, I suspect that bringing Jorge over to SICSA may have been the single most effective "soft spend" in the whole programme to date. We don't have a problem with completion, but we do, like all universities, have issues with confidence and motivation, and anything we can do to improve those is money well spent. I wish I could think of a way to confirm that value empirically, but I can't: but that's not going to stop me recommending Jorge as a speaker to anyone wanting to improve their research environment.
Over the weekend there was a fascinating exchange of viewpoints in the Wall Street Journal taking opposing sides of the argument as to what effect the internet is having on us: is it making us smarter and better-informed, or more shallow and un-disciplined compared to our book-reading days? Perhaps more importantly. is there anything we can do to leverage the internet to promote smartness more effectively?
Clay Shirky's article takes the positivist approach, arguing that amid the spam and the videos of people tripping over chairs are the beginnings of a new media culture that's attuned to writing for a non-linear, multimedia experience. Opposed to this is Nicholas Carr's view that the internet is opposed to the "stillness" that books encourage, and that the mental discipline that attends reading is of value in itself.
This is a critical (indeed, perhaps the critical) cultural argument over the "content revolution" that we're currently in the middle of. As a computer scientist with a deep interest in writing and literature, I find it fascinating that computers are at the forefront of a societal change, just as they're at the forefront of scientific change. I think we can both critique the points made by both authors, and also use them to move on from what risks being a sterile discussion to consider what computers have to offer in terms of literature and writing.
It's perhaps unsurprising that overall I take Shirky's position: the internet is mind-expanding, and the mind-blowing volume of mediocrity created in the process doesn't alter that. It's undoubtedly true that there is an amazing amount of trivial and/or self-serving junk on the web (probably including most of what I write), as well as material that's offensive and/or dangerous. The same is true for print.
Carr's argument seems to me to centre around a critique of hyperlinking rather than of the web per se, and it's hard to argue with the suggestion that rapidly clicking from page to page isn't conducive to deep study or critical understanding. It's also clearly true that this sort of frenetic behaviour is at least facilitated, if not encouraged, by pages with lots of links such as those found on Wikipedia and many news sites. There's a tendency to encounter something one doesn't know and immediately look it up -- because doing so is so easy -- only to do the same thing with this second page, and so on. On the other hand, few things are less rewarding than keeping reading material for which one doesn't have the background, whose arguments will never make sense and whose content will never cohere as a result. Hyperlinking makes such context readily available, alongside a potentially destabilising of loss of focus.
It's important to realise that such distraction isn't inevitable, though. When reading Carr's article I was reminded of a comment by Esther Dyson (in another context) to the effect that the internet is simply an amplifier that accentuates what one would do anyway. Deep thinkers can use hyperlinking to find additional information, simplify and their learning and generally enrich their thinking; conversely, shallow thinkers can skim more material with less depth. I think there's an unmistakable whiff of cultural elitism in the notion that book-reading is self-evidently profound and web-page-reading necessarily superficial.
It's tempting to suggest that books better reflect and support a shared cultural experience, a value system that's broadly shared and considered, while the internet fosters fragmentation, ill-considered and narrowly-shared sub-cultures. I suspect this suggestion of broadly true, but not in a naive cause-and-effect way: books cost money to print and distribute, which tends to throttle the diversity of expression they represent. In other words, there's a shared cultural space because that's all people were offered. Both the British government and the Catholic church maintained a list of censored and banned books that effectively limited the space of public discourse through books. Both systems survived until recently: the Index Liborum Prohibitorum was only abolished in 1966 (and hung around for longer than that in Ireland), and the British government domestically banned Spycatcher in the 1980s.
What may be more significant than hyperlinking, though, is closed hyperlinking and closed platforms in general. This is a danger that several writers have alluded to in analysing the iPad. The notion of curated computing -- where users live in a closed garden whose contents are entirely pre-approved (and sometimes post-retracted, too) -- seems to me to be more conducive to shallow thinking. Whatever else the open internet provides, it provides an informational and discursive space that's largely unconstrained, at least in the democratic world. One can only read deeply when there is deep material to read, and when one can find the background, context and dissenting material against which to check one's reading. To use Dyson's analogy again, it'd be easy to amplify the tendency of people to look for material that agrees with their pre-existing opinions (confirmational bias) and so shape the public discussion. There might be broad cultural agreement that Mein Kampf and its recent derivatives should be excluded in the interests of public safety, but that's a powerful decision to give to someone -- especially when digital technology gives them the power to enforce it, both into the future and retroactively.
(As an historical aside, in the early days of the web a technology called content selection was developed, intended to label pages with a machine-readable tag of their content to enable parental control amongst other things. There was even a standard developed, PICS, to attach labels to pages. The question then arose as to who should issue the labels. If memory serves me correctly, a consortium of southern-US Christian churches lobbied W3C to be nominated as the sole label-provider. It's fair to say this would have changed the internet forever....)
But much of this discussion focuses on the relationship between the current internet and books. I suspect it's much more interesting to consider what post-book media will look like, and then to ask what might make such media more conducive to "smart study". There are shallow and simple changes one might make. Allowing hyperlinks that bring up definitions of terms in-line or in pop-ups (as allowed by HyTime, incidentally, a far older hypertext model than the web), would reduce de-contextualisation and attention fragmentation. I find tools like Read It Later to be invaluable, allowing me quickly to mark pages for later reading rather than having to rely on memory and the inevitable cognitive load, especially on mobile devices. Annotating pages client-side would be another addition, on the page rather than at a separate site. More broadly, multimedia and linking invite a whole new style of book. The iPad has seen several "concept" projects for radically hyperlinked multimedia works, and projects like Sophie are also looking at the readability of hypermedia. Unsurprisingly a lot of the best work is going on within the Squeak community, which has been looking at these issues for years: it has a rich history in computer science, albeit somewhat outwith the mainstream.
I doubt the internet can ever make someone smarter, any more than it can make someone careful. What it can do is facilitate new ways of thinking about how to collect, present, organise and interact with information in a dynamic and semantically directed fashion. This is definitely an agenda worth following, and its great to see discussions on new media taking place in the general wide-circulation press and newspapers
Many languages have an underlying virtual machine (VM) to provide a more portable and convenient substrate for compilation or interpretation. For language research it's useful to be able to generate custom VMs and other language tools for different languages. Which raises the question: what's the appropriate language for writing experimental languages?
What I have in mind is slightly more than just VMs, and more a platform for experimenting with language design for novel environments such as sensor-driven systems. As well as a runtime, this requires the ability to parse, to represent and evaluate type and semantic rules, and to provide a general framework for computation that can then be exposed into a target language as constructs, types and so forth. What's the right language in which to do all this?
This isn't a simple question. It's well-accepted that the correct choice of language is vital to the success of a coding project. One could work purely at the language level, exploring constructs and type systems without any real constraint of the real world (such as being runnable on a sensor mote). This has to some extent been traditional in programming language research, justified by the Moore's law increases in performance of the target machines. It isn't justifiable for sensor networks, though, where we won't see the same phenomenon. If we want to prototype realistic language tools in the same framework, we need at least a run-time VM that was appropriate for these target devices; alternatively we could ignore this, focus on the language, and prototype only when we're happy with the structures, using a different framework. My gut ffeeling is that the former is preferable, if it's possible, for reasons of conceptual clarity, impact and simplicity. But even without making this decision we can consider the features of different candidate language-writing languages:
CThe most obvious approach is to use C, which is run-time-efficient and runs on any potential platform. For advanced language research, though, it's less attractive because of its poor symbolic data handling. That makes it harder to write type-checking sub-systems and the like, which are essentially symbolic mathematics.
I've wondered about Forth before. At one level it combines the same drawbacks as C -- poor symbolic and dynamic data handling -- with the additional drawback of being unfamiliar to almost everyone.
Forth does have some redeeming features, though. Firstly, threaded interpretation means that additional layers of abstraction are largely cost-free: they run at the same speed as the language itself. Moreover there's a sense in which threaded interpretation blurs the distinction between host language and meta-language: you don't write Forth applications, you extend it towards the problem, so the meta-language becomes the VM and language tool. This is something that needs some further exploration.
Scheme's advantages are its simplicity, regularity, and pretty much unrivalled flexibility in handling symbolic data. There's a long tradition of Scheme-based language tooling, and so a lot of experience and libraries to make use of. It's also easy to write purely functional code, which can aid re-use.
Scheme is dynamically typed, which can be great when exploring approaches like partial evaluation (specialising an interpreter against a particular piece of code to get a compiled program, for example).
In some ways, Haskell is the obvious language for a new language project. The strong typing, type classing and modules mean one can generate a typed meta-language. There are lots of libraries and plenty of activity in the research community. Moreover Haskell is in many ways the "mathematician's choice" of language, since one can often map mathematical concepts almost directly into code. Given thaat typing and semantics are just mathematical operations over symbols, this is a significant attraction.
Where Haskell falls over, of course, is its runtime overheads -- mostly these days in terms of memory rather than performance. It essentially mandates a choice of target platform to be fairly meaty, which closes-off some opportunities. There are some "staged" Haskell strategies that might work around this, and one could potentially stage the code to another runtime virtual machine. Or play games like implement a Forth VM inside Haskell for experimentation, and then emit code for a different Forth implementation for runtime.
Java remains the language du jour for most new projects. It has decent dynamic data handling, poor symbolic data handling, fairly large run-time overheads and a well-stocked library for re-use. (Actually I used Java for Vanilla, an earlier project in a similar area.) Despite the attractions, Java feels wrong. It doesn't provide a good solution to any of the constraints, and would be awkward as a platform for manipulating rules-based descriptions.
Smalltalk -- and especially Squeak -- isn't a popular choice within language research, but does have a portable virtual machine, VM generation, and other nice features and libraries. The structure is also attractive, being modern and object-oriented. It's also a good platform for building interactive systems, so one could do simulation, visual programming and the like within the same framework -- something that'd be much harder with other choices. There are also some obvious connectionns between Smalltalk and pervasive systems, where one is talking about the interactions of objects in the real world.
Where does that leave us? Nowhere, in a sense, other than with a list of characteristics of different candidate languages for language research. It's unfortunate there isn't a clear winner; alternatively, it's positive that there's a choice depending on the final direction. The worry has to be that a project like this is a moving target that moves away from the areas of strength for any choice made.
I've spent this week at the Pervasive 2010 conference on pervasive computing, along with the Programming Methods for Mobile and Pervasive Systems workshop I co-arranged with Dominic Duggan. Both events have been fascinating.
The PMMPS workshop is something we've wanted to run for a while, bringing together the programming language and pervasive/mobile communities to see where languages ought to go. We received a diverse set of submissions: keynotes from Roy Campbell and Aaron Quigley, talks covering topics including debugging, software processes, temporal aspects (me), context collectionvisual programming ang a lot more. Some threads emerge quite strongly, but I think they'll have to wait for a later post after I've collected my thoughts a bit more.
The main conference included many papers so good that it seems a shame to single any out. The following are simply those that spoke most strongly to me:
Panorama and Cascadia. The University of Washington presented work on a "complex" events system, combining lower-level raw events. Simple sensor events are noisy and often limited in their coverage. Cascadiais an event service that allows complex events to be defined over the raw event stream, using Bayesian particle filters to interpolate missing events or those from uncovered areas: so it's possible in principle to inferentially "sense" someone's location even in places without explicit sensor coverage, using a model of the space being observed. This is something that could be generalised to other model-based sensor streams. The Panorama tool allows end-users to specify complex events by manipulating thresholds, which seems little unsatisfactory: there's no principled way to determine the thresholds, and it still begs the question of how to program with the uncertain event stream. Still, I have to say this is the first complex event system I've seen that I actually believe could work.
Eyecatcher. How do you stop people hiding from a camera, or playing-up to it? Work from Ochanomizu University in Japan places a small display on top of the camera, which can be used to present images to catch the subject's attention and to suggest poses or actions. (Another version barks like a dog, to attract your pet's attention.)I have to say this research is very Japanese, a very unusual but perceptive view of the world and the problems appropriate for research.
Emotion modeling. Jennifer Healey from Intel described how to monitor and infer emotions from physiological data. The main problem is that there is no common language for describing emotions -- "anxious" is good for some and bad for others -- so getting ground truth is hard even given extensive logging.
Indoor location tracking for non-experts. More University of Washington work, this time looking at an indoor location system simple enough to be used by non-experts such as rehabilitation therapists. They used powerline positioning, injecting different frequencies into a home's power network and detecting the radiated signal using what are essentially AM radios. Interestingly one of the most important factors was the aesthetics of the sensors: people don't want ugly boxes in their home.
Transfer learning. Tim van Kasteren of the University of Amsterdam has generated one of the most useful smart-home data sets, used across the community (including by several of my students). He reported experiences with transfering machine-learned classifiers from one sensor network to another, by mapping the data into a new, synthetic feature space. He also used the known distribution of features from the first network to condition the learning algorithhm in the second, to improve convergence.
Common Sense. Work from UC Berkeley on a platform for participative sensing: CommonSense. The idea is to place environmental sensors onto commodity mobile devices, and give them to street cleaners and others "out and about" in a community. The great thing about this is that is gives information on pollution and the like to the communities themselves, directly, rather than mediated through a (possibly indifferent or otherwise) State agency.
Energy-aware data traffic management. I should add the disclaimer that is work by my colleague, Mirco Musolesi of the University of St Andrews. Sensor nodes need to be careful about the energy they use to transmit data back to their base station. This work compares a range of strategies that trade-off the accuracy of returned data with the amount of traffic exchanged and so the impact on the nodoe's battery. This is //really// important for environmental sensing, and makes me think about further modifying the models to account for what's being sensed to trade-off information content as well.
Tutorials AJ Brush did a wonderful tutorial on how to do user surveys. This is something we've done ourselves, and it was great to see the issues nailed-down -- along with war stories of how to plan and conduct a survey for greatest validity and impact. Equally, John Krumm did a fantastic overview of signal processing, particle filters, hidden Markov models and the like that make the maths far more accessible than it normally is. Adrian Friday heroically took the graveyard slot with experiences and ideas about system support for pervasive systems.
This is the first large conference I've attended for a while, for various reasons, and it's been a great week both scientifically and socially. The organisers at the University of Helsinki deserve an enormous vote of thanks for their efforts. Pervasive next year will be in San Francisco, an I'll definitely be there -- hopefully with a paper to present :-)
I was talking to one of my students earlier, and lent him a book to read over summer. It was only after he'd left that I realised that -- for me at any rate -- the book I'd given him is probably the most seminal work in the whole of computer science, and certainly the book that's most influenced my career and research interests.
So what's the book? Structure and interpretation of computer programs by Hal Abelson and Jerry Sussman (MIT Press. 1984. ISBN 0-262-01077-1), also known as SICP. The book's still in print, but -- even better -- is available online in its entirety.
OK, everyone has their favourite book: why's this one so special to me? The first reason is the time I first encountered it: in Newcastle upon Tyne in the second year of my first degree. I was still finding my way in computer science, and this book was a recommended text after you'd finished the first programming courses. It's the book that introduced me to programming as it could be (rather than programming as it was, in Pascal at the time). What I mean by that is that SICP starts out by introducing the elements of programming -- values, names, binding, control and so on -- and then runs with them to explore a quite dazzling breadth of issues including:
- lambda-abstraction and higher-order computation
- complex data structures, including structures with embedded computational content
- modularity and mutability
- lazy evaluation
- interpreter and compiler construction
- storage management, garbage collection and virtual memory
- machine code
- domain-specific languages
The second reason is the way in which Hal and Jerry view everything as an exercise in language design:
We have also obtained a glimpse of another crucial idea about languages and program design. This is the approach of stratified design, the notion that a complex system should be structured as a sequence of levels that are described using a sequence of languages. Each level is constructed by combining parts that are regarded as primitive at that level, and the parts constructed at each level are used as primitives at the next level. The language used at each level of a stratified design has primitives, means of combination, and means of abstraction appropriate to that level of detail.
Layered abstraction of course is second nature to all computer scientists. What's novel in this view is that each level should be programmable: that the layers are all about computation and transformation, and not simply about hiding information. We don't see that in the mainstream of programming languages, because layering doesn't extend the language at all: Java is Java from top to bottom, with class and libraries but no new control structures. If a particular domain has concepts that would benefit from dedicated language constructs, that's just tough. Conversely (and this is something that very much interests me) if there are constructs it'd be desirable not to have in some domain, they can't be removed. (Within the language, anyway: Java-ME dumps some capabilities in the interests of running on small devices, but that's not something you can do without re-writing the compiler.)
The third influential feature is the clear-sighted view of what computer science is actually about:
The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology -- the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of "what is." Computation provides a framework for dealing precisely with notions of "how to."
I've taken a view before about computers being the new microscopes, opening-up new science on their own as well as facilitating existing approaches. The "how to" aspect of computer science re-appears everywhere in this: in describing the behaviours of sensor networks that can adapt while continuing the reflect the phenomena they've been deployed to sense; in the interpretation of large-scale data mined and mashed-up across the web; in capturing scientific methods and processes for automation; and so forth. The richness of these domains mitigates against packaged software and encourages integration through programming languages like R, so that the interfaces and structures remain "soft" and open to experimentation.
When I looked at my copy, the date I'd written on the inside was September 1988. So a book I bought nearly 22 years ago is still relevant. In fact, I'd go further and say that it's the only computer science book of that age that I'd happily and usefully read again without it being just for historical interest: the content has barely aged at all. That's not all that unusual for mathematics books, but it's almost unheard of in computer science, where the ideas move so quickly and where much of what's written about is ephemeral rather than foundational. It goes to show how well SICP nailed the core concepts. In this sense, it's certainly one of the very few books on computer science that it's worth reading twice (or more). SICP is to computer science what Feynman's Lectures on Physics are to physics: an accessible distillation of the essence of the subject that's stood the test of time.