Up close with computer programmer Robert 'r0ml' Lefkowitz
4th Jan 2014 | 09:00
The renaissance man
Robert Lefkowitz, who is nearly always referred to as 'r0ml', is an old skool hacker, programmer and thinker who switched from studying nuclear physics to computer programming in the 1970s.
He met up with our sister magazine Linux Format for a wide-ranging conversation.
Linux Format: Do you think computers and programming languages should be easier to understand?
Robert Lefkowitz: So Charlemagne was concerned, in 789, he has this capitulary called The Adminitio Generalis, in which he reasons that monks learn how to read, so that they can read the word of God, so that they can follow God's law more effectively. If that's the case, why wouldn't you want every boy to learn to read? In fact, in this capitulary he says we will establish schools to teach every boy to read, freeman and serf. That, as near as I know, is the first aspiration to universal literacy.
The other one is what the Scandinavians did a couple of hundred years later, if the emperor in those times puts out a capitulary, how is everyone in the empire going to follow it effectively - at least one person in every village has to know how to read it so that everybody will have roughly the same interpretation. So it's a way of creating cohesion for the empire.
But the difficulty was that the technology was so bad that it was very difficult to read and required a lot of effort and training. My personal favourite is one of the things Alcuin (of York) shortly after invents is spaces between words.
LXF: Why weren't we taught this in school!
RL: It's one of those things that everyone takes for granted, "Obviously you're going to have spaces between words." But especially in Latin, there are a lot of phrases and a lot of mistranslations because if you look at the sequence of letters, you could break it in any one of two places and get two different things - and which one is correct?
That's why they illuminated manuscripts because reading was so complicated. You needed pictorial hints so you knew what it was about.
LXF: They added images before spaces?
RL: And every scriptorium, since these things were hand-done, they each had their own hand, so there was no standard font. So, York comes down and he comes up with this standard font that's called the Carolingian minuscule to which all modern fonts trace their ancestry. He invents things like standard height ascenders, standard height descenders lengths, and then you add spaces between words and all of a sudden you have this ability to see the whole words as shapes. There's a whole number of innovations around making it possible for people to read that Alcuin kicked off.
The next fifty years or so is called the Carolingian renaissance. This mini renaissance happens before the big famous renaissance later. I argue we're at that cusp where we're starting to say. 'Oh, we should teach everybody how to code,' but it's so complicated and difficult, and there's a thing like spaces between words which in retrospect will be so obvious; that makes it so much easier that we haven't thought of yet - we need an Alcuin of York.
LXF: We're waiting for the spaces between words… it's not Python then?
RL: (laughs) Well, I gave this talk out of PyCon, in fact, where I said a big revolution is to make spaces significant. So the Python audience can certainly relate to the concept that maybe that's the thing. But it was more than just the spaces between words. So maybe Python is that thing, but it's one of those things that's difficult to know except in perhaps a 100 years later when we look back…
LXF: It's the concepts, conditional statements, the effort of constructing a solution to a problem that stays with you. This is what non-programmers are missing. It's the demystification of the process that means a lot of people go through the world thinking computers are magic. How do we tackle that?
RL: I certainly think it's a more conceptual kind of education. I had set out about a year ago to write a book on this topic. And I had this thesis around what we've just been talking about - around Charlemagne, and this kind of cusp when you make it easy enough, universal literacy, and how universal literacy for computers is sort of analogous to universal phonetic literacy and what should we do to move that forward.
But doing my research, my thinking evolved. I came across some other interesting stuff that I read which made my thinking evolve to the point where I don't believe my thesis holds water!
LXF: What about the book!
RL: There's still going to be a book! But I'll delay the schedule now because what I have to do is think about it some more and come up with a new thesis that I think holds water better, and that would be more effective. Fundamentally, the idea that literacy, from Charlemagne, and sort of subsequent revolutions of it throughout history, there were two main drivers for literacy and education, and literacy and education was all around reading.
The reason it was all around reading was for these two societal myths; the first one was the Christian myth: in order to know the word of God you had to read the word of God. To read was to become better. You read in order to become good, and that was kind of the societal driving force. If it's going to make people better then obviously everyone should listen.
And then the second myth, for us in colonial America, but also throughout the world, in order to have an effective democratic society, or any society, you need an informed citizenry. We felt we needed this because they needed to vote. In the non-democratic societies you needed to have an informed citizenry because they needed to know which laws to obey without getting in trouble. But in order to have an informed citizenry they needed to know how to read, and therefore, you have to teach them all how to read. Ta da! Because it will make them better citizens.
Reading, is in Deborah Brandt's [professor emerita of English at the University of Wisconsin-Madison] words, 'for good' not 'a good'. Writing, however, was 'a good'. You wrote, and it was a product, and then you could sell it. You didn't improve yourself by writing…
That's the myth. And if you look at computing science in the 1980s, Donald Knuth's Literate Programming, they call talk about 'Yes, you have to write programs that can be readable so that other people can read them'. It's all informed by the underlying cultural sensibility that says 'Oh yes, reading is a good thing'. What I'm saying is something different.
The second piece of the puzzle is the thesis that I'm developing now. In the beginning nobody reads and writes because we haven't invented that stuff, or it exists but it's only for bookkeeping. It doesn't have any societal impact because its all scribes in the royal treasury. Then, and we'll take this from Plato, Socrates believed writing was a bad idea. Plato agrees with Socrates but he writes down The Republic to explain why it's a bad idea.
LXF: We're covering a lot of ground here… from the 1980s to 400BC.
RL: (much laughter) Then from Aristotle, Plato, on, you have few readers but it's a societal thing, and few writers. A smaller number of people read, a smaller number of people write. This holds true roughly until Gutenberg - the printing press.
They call that manuscript culture. In manuscript culture you don't have the notions of copyright, originality, plagiarism, because there's so few readers that it doesn't matter. The idea is that you couldn't possibly come up with a text all on your own anyway, because that's such a complicated thing, and you're pretty much pulling together from other texts and recombining stuff that's already there and you don't have to do attributions - none of that stuff, none of it exists.
LXF: These texts would be amended as they were copied?
RL: Either on purpose, or accidentally, yes, both. Sometimes there would be transcription errors - and there's some fascinating stuff when you read up about it. Sometimes it was anthologising, you'd be saying 'this is a good thing', and this one and you'd put them together. Sometimes you'd bother to mention the original source was and sometimes you wouldn't - what difference did it make?
LXF: When no one could Google the source…
RL: Right. So you have this notion of intertextuality. That means texts come from other texts. You can't really create a text from scratch. So you have that manuscript ethos and since there are really no readers, there's no commercial interest in writing or reading.
Then you have the printing press and now you have a mass readership. This is what turns writing in 'a good' and reading into 'for good'. You still have a small number of writers because you have machinery in order to do the distribution, access and expense.
But there is also now commercial gain. If you write something you can make money, and if somebody else 'steals it', that's where you have the notions of copyright, plagiarism, authorship - even the idea of authorship. Like who's the author of this scroll, you wouldn't even write your name down, because why would anybody else care? You didn't care, they didn't care, nobody cares.
LXF: The writer isn't even thinking about it.
RL: …So now what I'm suggesting is that there's a fourth age. The fourth age is Dave Winer, right, blogging happens, texting happens, Twitter happens. We're all writing more. Most people today write more than Dickens did in his lifetime. Not as good as Dickens, but more than Dickens! It's the volume.
People say you can't make the comparison, because people write mostly lolcats and crap stuff and Dickens was awesome. But if the volume increases one thousand fold. If the average quality drops 50%. You've still got way more high quality than you used to. The level rises. We had this big ratio of readers to writers and now it's reverting back to its [dramatic pause for effect] medieval ratio.
It was few and few but now it's many and many. When that ratio goes back, what should happen? And this is where I haven't thought this through, but in some ways it's going to revert to the medieval sensibility, and maybe that's why you see the weakening of the ideas of copyright, and it's not just happening with software, it's happening with music and journalism. You have this sort of disruption, not just in the business, but in whole societal/ethical framework around what's right and what's wrong. And that's being challenged.
But the second thing that happened, and this is the one that's specific to code, which I think changes it so that's it's not just a reprise of the medieval era with the bar moved up, and that is - and I got that from Project Euler.
Project Euler was a spin-off of a math learning site, it got very popular, and it got about 450 problems which are all math problems, because it started out to be math education, but they were the sort where you could only sort them with a computer. So the first problem is very simple - what's the sum of all of the numbers less than a million that are easily divisible by 3 and 5? You could do it with paper and pencil, but you write a computer program to do this, and the idea is that they get progressively harder.
The thing that triggered this for me is that a FAQ on the website says: "Oh, I've figured out a really great solution in my favourite programming language to this problem, can I post it on the internet?" The response is, "You've answered your own question."
You know that feeling you get that you're so proud of yourself because of a great solution you've figured out - don't steal that from everybody else. Don't post your code. Here what we have - and granted it's a very specific and narrow case, but I'm thinking from Aristotle on so I've got a thousand years forward to play with here, this is a case where somebody is saying, "To publish your source code would be wrong. Ethically wrong."
Combining this with what we were talking about literacy, it's the writing in this case. When you go to Project Euler, you don't learn by reading, because you could - that's the old style of education, I'll just read up on these algorithms and that will make me a better person: no, no, no, no. The way you're going to figure these out is you're going to sit down and you're going to try to write solutions, because the thing that the computer does, the difference in terms of literacy, is that if you write something, how do you know if it's crappy or not? You have to get somebody to read to get any kind of feedback.
When you write a programme, the computer will give you feedback. That might not be in a legible style for other humans but we're getting that medieval holdover stuff going on here. It will tell you the algorithm is more efficient or less efficient than that other thing you tried, and it will tell you whether you're getting the right answer or the wrong answer. So there's some set of feedback that you get by writing it and by writing it again only differently.
Just you, just by writing, you become good at that. In this case, writing is 'a good'. Then you see the same thing popping up for Twitter, and Facebook, the cultural push is to say 'You should post, the writing is the good.' Those drivers that said everybody had to learn how to read, and then we start to teach programming, and then when you think about it, how do you teach programming?
By teaching people to write a program and they don't teach them to read other people's programs. Is that because of the ethical sensibilities around that, or the practical sensibilities around that? If there were a canon of code, would it be useful for people to read it, and I think not. The cognitive dissonance for me was if I follow this thing through logically, what programming education would look like, open source would be bad in that world.
LXF: But this is only at a formative stage!
RL: But it was sufficient cognitive dissonance for me to say that I have to think about this some more. The question that kicked this off, and I'm sorry for such a long answer, is this notion of what does programming education look like going forward? I think it's more writing driven than reading driven, so it differs from other literacy education.
LXF: Writing the code should happen at the very beginning?
RL: That's the long-term thinking. Short term, my thinking had been, and I haven't re-evaluated this, had been we shouldn't start with writing because, following a thought experiment - take somebody that you know that doesn't know anything about computers, adults or kids, and give them a program that has already been written in the favourite programming language of your choice, Python, Java, Smalltalk.
RL: Or even Perl, it doesn't matter. Give them a program that is already written. Can they actually run it? Or pass it parameters if it needs parameters? And be able to tell if they need it or not and then be able to figure out how to get the output? Could they actually take an already written program and use it, read it? And I think the answer to that is mostly 'no'. This may be the spaces between words part, which is the 'why is it so hard to just figure out what to do with a program once it's written?'
And maybe we should start there. If you're teaching people to write code, even after it's been written they don't know what to do with it, isn't that the cart before the horse? Maybe the first steps ought to be, and this is where open source is a good, 'Go to this website, search for the thing you want to do because somebody's done something that mostly does that, and install it and run it'.
You want to do a program that has a blog, you could just go to blogger.com and get an account, but if you want to think like a programmer, you have to go get the code that does that, install it and run it. The programmer would actually write the code, install it and run it, but let's just skip the writing part and see if we can do the rest of it, and which is the harder part? And what does a citizen need to know who's not going to be a professional programmer?
LXF: It should be about equipping ordinary people with the tools to demystify what tools are doing. Does it need this great arc, which is a great thing if you're into computers and you want to learn.
RL: That's exactly right. I agree with you 100%. The demystification so that people understand roughly how an automobile works, so they know it's not going to fly. This idea of just being able to take already written code and see how quick it runs; how it gets used. Something in that space, and writing code is going to be part of that. I don't know if it's necessarily the first part of that, and we always seem to start there.
LXF: That is all we've got, and it's how the people who are teaching were taught.
RL: A large part of what's driving, and this is a holdover I think from the previous age … when you see people teaching people programming, it's always couched in the terms of you needing to teach people to do this in order to be economically competitive. Nobody says you need to read in order to be economically competitive. You learn to read to be a better functioning citizen.
If you approach it from the, "I'm not going to grow up to be a programmer. I want to be a journalist. I want to be a ballet dancer." I wanted to start the book, something along the lines of, because my wife and kids are very much into the arts. I met my wife when she was teaching the circus arts, tightrope walking and so forth.
And so, for her job does she need to know how to read? The answer is no. Why should we teach these people how to read? Because you have to know how to read to be able to function in society, right? But it's got nothing to do with their jobs.
We don't teach people to read because it will make them more competitive in their jobs, if it's about demystifying computers so that the common man can live in a world that's heavily influenced by automata, they need to understand how it works but they're not going to use it for their jobs. They're going to use it for their daily lives, and how do they do that? I don't know.