Why Web Literacy?

January 21st, 2013

Last week, Mark Surman (director of the Mozilla Foundation) posted an article titled, “I need help explaining ‘why?’” In it, he roughed out a five liner to explain why Mozilla cares so much about web literacy:

  1. Our goal: help 100Ms more people become makers who understand and tap the full power of the web.
  2. Why? The web has fueled massive creativity, productivity and wealth. We want this to continue.
  3. When the web was young: people looked under the hood, figured out how it worked and made things.
  4. This ‘just figure it out and make it’ is harder to come by today. The hood is harder to open. Learning as you go is not so easy.
  5. Mozilla want to turn this upside down. We want to make it easy easy to open again, to learn how things work and to tap the full power of the web.

I’ve been trying ever since to find a quotation from one of the civil rights leaders of the 1950s (I thought it was Septima Clarke), who said, “We’re not going to change the world by teaching these people how to read—we’re going to change it by teaching them how to write.”  What I found instead was something from Matthew Crawford’s thought-provoking (and sometimes infuriating) Shop Class as Soulcraft:

We in the West have arranged our institutions to prevent the concentration of political power… But we have failed utterly to prevent the concentration of economic power, or take account of how such concentration damages the conditions under which full human flourishing becomes possible… Too often, the defenders of free markets forget that what we really want is free men.

Crawford believes that removing the experience of working with things from everyday life hasn’t just deskilled us; it has demoralized us. Modern knowledge workers are just as alienated from their labor as any other assembly line worker; the gradual substitution of process for judgment is only “progress” if pride in one’s work and connection with one’s peers is left out of the equation.

He is most definitely not playing the “dignity of manual labor” horn blown by the Arts & Crafters or back-to-the-land dreamers: he is coolly scathing when discussing their cuddly inanity. But he makes a convincing case that skilled trades are not only better paid and steadier occupations these days than most so-called “knowledge work”, they also demand more intellectually, and more personally rewarding.

That, for me, is what we’re really fighting for. Making “hands-on” part of everyday life once again will, I hope, help children (and grownups) learn perseverance, curiosity, conscientiousness, optimism, and self-control. It’s also my answer to the big question Mark asks at the end of his post:

[H]ow do we deal with the YouTube/Facebook factor? I.e. people are already ‘making stuff’ on social media. What are we talking about that is different? What does ‘the full power of the web’ really offer?

If you give a five-year-old a LEGO Avengers set that can only be put together in one “right” way, you’re teaching her that someone else gets to decide what she should do with her imagination. If you give her a box full of parts, you’re doing this:

You see that smile? My daughter’s never going to that proud of “personalizing” her home page using one of a dozen canned themes that someone else put together. And you see the title over the box, on the right? It says “Universal Building Sets”. That’s our web, and that’s what we’re fighting for.

Equity, Learning

The Last Policeman

January 9th, 2013
Comments Off

I finished Ben H. Winters’ The Last Policeman; it’s one of those “wish I had written it” books. A few passages here and there don’t quite ring true, but then you hit things like this:

I was twelve years old and Nico was only six when we moved from the house on Rockland to the farmhouse on Little Pond Road, halfway to Penacook. Nathanael Palace, my grandfather, only recently retired from forty years in banking, had a wide range of interests: model trains, shooting, building stone walls. Already by prepubescence a bookish and private person, I was uninterested to varying degrees in all these activities but was forced by Grandfather to take part. Nico, a lonesome and anxious child, was avidly interested in all of them and rigorously ignored. He once got a set of World War II-era model airplanes, and we sat in the basement, the three of us, and Grandfather harangued me for an hour, refusing to let me quit until I’d successfully attached both wings to the body, while mechanically-minded Nico sat in the corner, clutching a handful of tiny gunmetal gray airplane parts, waiting for her turn: at first excited, then restlessly, and finally in tears.

Very much looking forward to the next two in the planned trilogy.

Books

Citation, Please

January 7th, 2013

Another day, another flood of defensive, ill-informed commentary on the Internet about women in technology. (I’m thinking particularly of some of the responses to Frances Berriman’s post about Matt Andrews’ pointing out that all 22 speakers at the upcoming Edge conference are male, but there’s lots more floating around.) So: the claim that “most women just don’t like tech” was analyzed ten years ago in Margolis and Fisher’s landmark Unlocking the Clubhouse. The authors (both then at Carnegie-Mellon) found that the “boy’s club” atmosphere of tech does discourage women (and others) from taking part. When it was addressed, female enrolment and graduation grew from approximately 12-15% to over 35% in just a few years. It’s brief (less than 200 pages), readable, and most importantly, it’s based on data rather than anecdote. If the people who keep saying “problem? what problem?” have better data to back up their claims—or any data at all—could they please cite it?

Equity

Five Things

January 4th, 2013

Inspired (as always) by Geeky Mom, here are:

Five things I’m thankful for this week:

  1. Tobogganing with my daughter (I got to go four times, and I got to be the toboggan on a couple of runs).
  2. A warm house afterward.
  3. And warm food.
  4. Stark Tower Defense.
  5. Public libraries.

Five things I want to do

  1. Catch up with Software Carpentry email.
  2. Take my Australian visitors out for dinner (this will be a lot easier than #1).
  3. Write my daughter a “science fairies” story. (If I had more time, it’d be a story about a robot fairy princess pirate dinosaur ninja from outer space who plays guitar, but I gotta be realistic here…)
  4. Put together a five-minute talk explaining why a tool to merge PowerPoint slide decks is a key enabler of a better-than-MOOCs future for education.
  5. Finish reading The Last Policeman.

Five interesting things I found this week:

  1. Invisible Animals
  2. How to Cut a Pizza
  3. The Cambist and Lord Iron
  4. Data Sharing and Management Snafu in Three Short Acts
  5. America’s Real Criminal Element: Lead

Uncategorized

What Will Programming Look Like in 2020?

December 29th, 2012

Over on Lambda the Ultimate, Sean McDirmid has asked:

What will programming look like in 2020? Keep in mind that programming in 2012 mostly resembles programming in 2004, so could we even expect any significant changes 8 years from now in the programmer experience? Consider the entire programming stack of language, environment, process, libraries, search technology, and so on.

Most of the respondents believe things will look pretty much like they do today, while a few brave souls hope that more sophisticated type systems, AI-in-the-IDE, power-sensitive computing, and other things that are no longer science fiction will have gained ground. Personally, I think they’re all looking where the light is better. I think there will be big changes over the next seven years, though they won’t actually have moved into the mainstream by 2020: if we’re lucky, they’ll be where transactional memory is today (and if we’re unlucky, they’ll be marooned on the fringe with Prolog and literate programming).

Change #1: we’ll start treating programming language design as a usability problem, and use empirical techniques from HCI to decide how the “normal” bits of languages ought to be presented. Yes, truly novel language features have to be built a few times before it makes sense to do any comparative studies, but 90% or more of any programming language is stuff that’s been built many times before, so we actually can do A/B testing to see whether one way of presenting iteration is easier for people to master and debug than another. For my money, the PLATEAU conference series will be the place to be in 2020, just as MSR and CHASE are where the cool kids in software engineering hang out today. And no, this doesn’t have to be heavyweight or labor-intensive: I did a couple of field tests back in 2000 that took less than an hour each—personally, I’d like to see every enhancement to every programming language tried out this way as part of the proposal and review process.

Change #2: we’ll (finally) separate models from views in programs. Yes, I know, I’ve been predicting this since 2004, but I really do think someone will build a proper CAD system for software in the next two or three years. If you’re new to the concept, the idea is that we should separate the storage and presentation of programs, just as we separate the storage of the plan for a building (as a set of geometric “things” connected by constraints) from its presentation (as shaded isometric drawings, parts lists, wiring diagrams, and so on). Once we free ourselves from the legacy limitations of ASCII as both storage and presentation, we’ll be able to build intentional programming systems, which will, I believe, lead to an explosion in creative problem-solving the likes of which we haven’t seen since the first REPLs and spreadsheets appeared.

Both of these ideas are currently outside the mainstream of programming language research, i.e., they aren’t currently discussed on LtU with any frequency :-) . That leads to an interesting follow-on question: if we look back eight years to Ehud Lamm’s re-launch post, how many of the things discussed then have moved from discussion to implementation to adoption, and how many of the things that have done so were missing from those long-ago discussions?

Extensible Programming

Why I Didn’t Like “The Dark Knight Rises”

December 26th, 2012

Looking back on 2012, The Dark Knight Rises was probably my least favorite film. The visuals were OK, I guess, but Christian Bale somehow managed to make the Batman both wooden and whiny. All that was just disappointing; what made the movie positively unlikeable was its politics:

There’s a storm coming, Mr. Wayne. You and your friends better batten down the hatches, because when it hits, you’re all gonna wonder how you ever thought you could live so large and leave so little for the rest of us.
— Selina Kyle

And what did Hollywood tell us would actually happen if someone was uppity enough to challenge the 1%? Why, chaos, of course: drunken, violent, chaos.  The truth—the fact that when disaster strikes, people spontaneously come together to help each other—isn’t as dramatic, or as politically useful, but more importantly, that’s the choice those with power want us to believe we have to make: the status quo, or anarchy.

The fact is, most super-heroes are fundamentally cowards: they’re happy to fight evil when it’s clearly, obviously evil, but when it dresses itself up as order, they lose their nerve. (Snap quiz: how many super-heroes have ever gone after the people who kept saying “Smoking doesn’t cause cancer” 20 years after their own research showed them it did?) Orwell wrote about this kind of failure of nerve eighty years ago:

[Dickens'] radicalism is of the vaguest kind, and yet one always knows that it is there. That is the difference between being a moralist and a politician. He has no constructive suggestions, not even a clear grasp of the nature of the society he is attacking, only an emotional perception that something is wrong, all he can finally say is, “Behave decently”…
— George Orwell

Here’s the story I’d like to tell instead. I’d like to tell people about a world where Kal-El was raised by the Joads, rather than by the Kents. I’d like to tell people about a world where Bruce Wayne faced up to the fact that the biggest crimes are committed in quiet murmurs, and went after the psychopaths in nice suits rather than the ones in funny costumes. Most of all, I’d like that to be our world.

Best wishes to you all for 2013—may you end the year proud of how you used it.

Uncategorized

Internet Humor from my Mum

December 19th, 2012

Would You Like Your Programming Language to Have a Million Users?

December 14th, 2012

Would you like your new programming language to have a million users in a couple of years? You would? Cool—here’s how to do it. Instead of asking yourself, “How will people write loops?” or, “Is this statically or dynamically typed?”, ask yourself, “What can I do in the language to make packaging and installation a zillion times easier?” Because that’s the biggest headache most people have these days: getting a thousand and one bits of code to install on their machine and play nicely once they’re there.

This is why I find Julia uninteresting, and why I think we’d be further ahead if the effort that was put into Python 3 had been put into rationalizing the standard library and sorting out P&I. I don’t know a single person who switched to Python because of the improvements in 3.*, but I know a lot who would trade their eyeteeth for a P&I system that just plain worked. Similarly, I don’t see a single feature in Julia that’s expressly designed to make P&I easier, which means I don’t see any reason to get excited about it. I’d be interested in pointers to languages and systems that do a significantly better job…

Uncategorized

ElmCity Reaches Toronto

December 8th, 2012
Comments Off

For the past few years, Jon Udell has been working on a project called ElmCity. Its ostensible aim is to do for calendars what the RSS ecosystem has done for news: allow everyone to be an author, but also make it easy to aggregate, filter, and share information from a wide variety of sources. Its deeper aim, though, is to teach people by example that this is what the web is for—that it’s a way to re-mix information to meet your needs, when and how you want.

After several false starts, ElmCity now has an aggregated calendar for the city of Toronto that combines data in real time from a bunch of sources. If you want your own events to show up, you don’t send Jon entries for its database, because it doesn’t have one. Instead, you give him the URL for your event feed, so that whenever you add something new, it’ll show up automatically. That’s how to think like the web, and if we’re going to teach kids anything about computing in grade school, that ought to be part of it.

Note: if you’d like to help ElmCity grow, please contact Jon: he’s always looking for new curators.

Announcements, Government 2.0

Two Solitudes Illustrated

December 6th, 2012

Jorge Aranda and I submitted a short opinion piece to Communications of the ACM in February 2012 that discussed some of the reasons people in industry and academia don’t talk to each other as much as they should. Ten months later, it has ironically turned into an illustration of one of the reasons: it was six months before we received any feedback at all, and we’ve now waited four months for any further word. In that time, Jorge has left academia and I’ve taken a job with Mozilla, so we have decided to withdraw the manuscript and publish it here. We hope you find it interesting, and we would welcome comments.


Two Solitudes

Greg Wilson and Jorge Aranda

In 2001, one of us (GW) started supervising senior undergraduate projects in computer science at the University of Toronto. His main reason for doing it was because it was fun, but he was also frustrated by how little the junior programmers we were hiring straight out of school knew about actually building software. They could talk big-O ’til they went blue in the face, but many had never seen version control, had forgotten what little they had ever learned about using Make, and thought testing was something you only did when it was in the grading scheme.

This isn’t a new complaint, of course. People in all fields have long complained that universities don’t prepare students for the real world, while professors have always countered that their job is to teach timeless fundamentals. What surprised him, though, was how little interest the two sides seemed to have in getting to know each other, at least in software engineering. While researchers and practitioners may mix and mingle in other specialties, every software engineering conference seemed to be strongly biased to one side or the other.

For example, less than 20% of the people who attend the International Conference on Software Engineering come from industry, and most of those work in labs like Microsoft Research. Conversely, only a handful of grad students and one or two adventurous faculty attend big industrial conferences like the annual Agile get-together.

One consequence of this is that researchers and practitioners spend a lot of time talking past one another. Wilson ran into this headlong six years ago when he was asked to teach an undergraduate course on software architecture. A quick search on Amazon turned up plenty of books on the subject with words like “Practical” and “Essential” in their titles. What didn’t turn up was descriptions of the actual architectures of actual systems. Every book talked about how to describe architectures, how important it was to have a good one, and so on. When it came time to actually show readers a few, though, all they offered were a couple of pages on pipe-and-filter, client-server, MVC, and possibly some kind of peer-to-peer system. And even then, most didn’t discuss actual systems: the boxes in their box-and-arrow diagrams had labels like “component 1″ and “component 2″.

The more he thought about this, the stranger it seemed. We wouldn’t think much of a university program in architecture whose graduates had never studied any real buildings in detail. We also wouldn’t be surprised if those graduates were as bad at designing buildings as most freshly-minted computer scientists are at designing software.

In this case, the problem suggested its own solution. In May 2006, Wilson emailed every famous programmer he could find an address for and invited them to contribute a chapter to a book on software design. More specifically, he asked them to describe the most beautiful piece of code they’d ever seen or written, and explain what made it beautiful in their eyes.

The result, published a year later as Beautiful Code, was well received by practitioners, but uptake in academia was close to zero. As he was trying to figure out why not, he was asked to teach another undergraduate course, this time on software engineering. Once again, he discovered that there was a lot less in most textbooks than met the eye. For example, the books all described UML in great (some might say “excruciating”) detail, but in his eighteen years as a professional programmer, Wilson had only ever worked with one programmer who actually used it voluntarily (a Russian mathematician who wouldn’t tie his own shoes without first brushing up on knot theory). Conversely, making things installable is as big a part of developing real applications as allocating methods to classes, but most books didn’t discuss it at all, and those that did seemed to think it was a question of keeping a configuration database up to date.

But practitioners were (and are) guilty of equally great sins. At industry-oriented gatherings, it seems that a strong opinion, a loud voice, and a couple of pints of beer constitute “proof” of almost any claim. Take test-driven development, for example. If you ask its advocates for evidence, they’ll tell you why it has to be true; if you press them, you’ll be given anecdotes, and if you press harder, people will be either puzzled or hostile.

Most working programmers simply don’t know that scientists have been doing empirical studies of TDD, and of software development in general, for almost forty years. It’s as if family doctors didn’t know that the medical research community existed, much less what they had discovered. Once again, the first step toward bridging this gulf seemed to be to get each group to tell the other what they knew.

On the one side this led to The Architecture of Open Source Applications, in which the people behind a double dozen open source projects walk readers through the high-level design of their applications, and explain why things are the way they are and how well they’ve worked. Some of the programs they discuss, like Bash and Sendmail, are as old as the Internet, while others are as fresh as this morning’s top questions on Stack Overflow. And while some are gems of clean design, others are, in the words of one contributor, like third-world cities, with clean, well-kept neighborhoods lying next to run-down slums that no one seems willing to clean up.

On the other side is Making Software, in which leading software engineering researchers present and discuss key discoveries. The topics range from the impact of test-driven development on productivity (probably small, if there is one at all) to whether machine learning techniques can predict fault rates in software modules (yes, with the right training). One favorite is the discovery that geographic distance between members of a development team is only a weak predictor of how many errors there are in their software; a much better predictor is how far apart they are in the company org chart.

After Making Software came out, we, along with Daniela Damian, Marian Petre, and Margaret-Anne Storey, decided to explore how practitioners perceived software development research. We interviewed several high-profile practitioners (CEOs, senior architects, managers, developers, and entrepreneurs) and asked them what they thought of their academic counterparts, and what questions they thought researchers should focus on.

Their answers were scathing, but not surprising. They saw software engineering research as dated, dogmatic, focused on pointless questions, and biased toward either big projects or toy problems. In the words of one senior architect we interviewed:

[I'm afraid] that industrial software engineers will think that I’m now doing academic software engineering and then not listen to me. (…) If I start talking to them and claim that I’m doing software engineering research, after they stop laughing, they’re gonna stop listening to me. Because it’s been so long since anything actually relevant to what practitioners do has come out of that environment, or at least the percentage of things that are useful that come out of that environment is so small.

This kind of criticism is understandable. After all, plenty of practitioners remember having wasted countless hours warming the bench at college while a professor droned about the vital importance of this process or that notation with minimal experience and maximum conviction. And yet, as demonstrated by Making Software, and by the increasing number of savvy papers appearing each year, research is shifting in ways that practitioners would welcome if they hadn’t been conditioned by past irrelevance to dismiss everything coming out of academia.

In 2011, we presented the results from our interviews in a panel at the International Conference on Software Engineering (ICSE). Our panelists were people with one foot on each side of the divide: Lionel Briand from the Simula Research Lab; Toshiba’s Tatsuhiro Nishioka; Google’s John Penix; Wolfram Schulte, from Microsoft Research; Peri Tarr, from the IBM T.J. Watson Center; and David Weiss, from Iowa State University. The bad news was that the panelists confirmed the near-complete disconnect between software research and practice. The good news was that judging by comments from them and from the audience, plenty of people would like to fix that.

But achieving that will be hard, because the root problem isn’t entirely one of perceptions. There actually are differences between research and practice, three of which stand out. First, the incentive structure for researchers does not reward patient cultivation of long-lasting partnerships with practitioners. Second, researchers and practitioners have different understandings of what counts as evidence. Practitioners, being trained with an engineering mindset, expect generalized and quantitative results. They want to know what by percentage productivity will improve if they adopt a new practice, but this is a level of precision that no honest scientist can offer them today. And third, most research findings offer only piecemeal improvements; it simply isn’t worth a practitioner’s time to fight the inertia in their organizations for gains which are both small and uncertain.

In Canada, the phrase “two solitudes” refers to the lack of communication—and the lack of interest in communicating—between Anglophones and Francophones. Over the past three years, we have learned that it’s also a good description of the gulf between software engineering researchers and practitioners. They’re like two branches of an extended family that send each other Christmas cards, and occasionally show up for each other’s weddings or funerals, but aren’t in day-to-day or even year-to-year contact.

It doesn’t have to be like this, of course. Many researchers (particularly younger ones) would love to talk to practitioners about what problems really matter. At the same time, practitioners could save themselves a lot of heartache by finding out what we actually do know about how to develop software, and by learning how to tell something that has been proven from something that has merely been asserted.


Greg Wilson has been a programmer, teacher, and author. He can be found online at http://software-carpentry.org, http://aosabook.org, and http://neverworkintheory.org. He received his PhD in Computer Science from the University of Edinburgh in 1993.

Jorge Aranda is a software developer. He received his PhD in Computer Science from the University of Toronto in 2010, and until recently conducted research on coordination in software teams.

If you enjoyed this post, you may also enjoy the presentation Greg gave at MSR Vision 2020.

Research