On April 2, the Puget Sound Programming Python (PuPPy) users group in Seattle brought together a historic panel of software engineers to discuss the craft of creating and maintaining programming languages. On hand were Guido van Rossum (creator of the Python programming language), James Gosling (the founder and lead designer of Java), Anders Hejlsberg (TypeScript lead architect), and Larry Wall (Perl creator), for a live-streamed conversation about “language design, the universe, and everything.”

Moderator Carol Willing, who is a member of the steering councils for both Python and Project Jupyter, referred to them as “four individuals who profoundly impacted our world,” and this was not hyperbole.

It was the first of what’s intended to be an annual benefit event to support CSforAll, a group founded in 2016 to promote “high-quality computer science” for students at every grade level, and to support “student pathways to college and career success.” It all took place in a hip Seattle facility known as the Collective, “an urban basecamp for the mind, body and soul,” as it describes itself.

Feed the Family

Once the preliminaries were out of the way, Gosling kicked the talk into high gear when he gave the audience a fond glimpse into the early history of Java, saying that instead of being a personal project, he was part of a larger team of about a dozen people.

Gosling: We were trying to understand a particular domain… We spent a lot of time talking to people who built software for embedded systems, trying to understand pain points… Out of this large pie of a project, my slice was to make things a little easier from a programming language point of view, and fix the pain points that came from the programming language part. It started out as kind of “Do a better C,” and it got out of control. The rest of the project really ended up just providing context.

The only thing out of that project that survived was Java. But it was directed at a set of pain points that happened to be about people who were living outside of data centers and people who were getting shredded by problems with networking and security and reliability. They had to build things that ran in hostile environments, like, in homes — which, any home with a child in it is a hostile environment for an electronic device.

Willing then joked, “Speaking of hostile environments — Perl.” (Before adding “I love you Larry.”) And soon Larry Wall was sharing his own remembrances of Perl’s early days — and how he’d approached the design of the language as a linguist rather than a computer scientist.

Wall: I almost actively ignored some of the computer science literature of the time, and said, “Well, what can we throw together in one pot that will work more like a natural language?” Instead of putting in a university campus and deciding where all the walkways are going, we’re just going to see where people want to walk — and then put shortcuts in all those places, and build it more as a network, not as a terribly orthogonal computer science-y or mathematical thing. That turned out to be in the right place at the right time for bootstrapping a lot of the web. And it also got used a lot for system administration.

Wall cited Perl’s original principles about “trying to provide APIs to everything — trying to be both a good text processing language, linguistically, but also a good glue language.”

But of course, the story of Perl has a dramatic inflection point. “In the year 2000, we took a step back, and basically said ‘We’re going to break everything that needs breaking.’ We kind of did the same thing as the Python 2 to 3 step, except instead of breaking a few things, we decided to break everything that needed breaking,” he said. Wall also reminded the audience that there was a happy ending. “Perl 6 did come out two years ago. It’s getting faster.” [The audience applauded.] Then Wall revealed that over that 15-year development cycle, they’d come up with a list of 60 design principles.

“We came up with some cute ones — like, ‘You think that’s cute today…'”

Power Tools for Power Geeks

Some of the liveliest exchanges grew out of a discussion about tools. Gosling enthusiastically agreed with Hejlsberg that type systems ultimately lead to better tools, such as IDEs with statement completion and refactoring. “I really, really, really believe in that point, in the power tools for power geeks thing. One of the things that drives me nuts is the ‘real men use vi’ movement. It’s really — I just want to punch people who are like…”

Willing: There will be no violence on stage.

Gosling: “I’m a real developer because I use vi.” And it’s like —

Hejlsberg: “I do it the hard way.”

Wall: I think IDEs make language developers lazy. [The audience reacts with some laughter, a few “oohs,” and some applause]

Willing: Wow. Would you like to expand on that, Larry?

Gosling: IDEs let me get a lot more done, a lot faster. I mean, I’m really not into proving my manhood. I’m into getting things done… [Scattered applause]

Willing: But I’m going to play the devil’s advocate…

van Rossum: Emacs.

Willing: The Jupyter notebooks. A lot of science people, data scientists, get a lot done in actually a pretty simplistic IDE with a dynamic language most of the time.

Gosling: (Teasingly) They could get a lot more done.

Willing: I don’t know…

But Hejlsberg, a TypeScript core developer, pulled the conversation back to the importance of a type system, and how they can lead to productivity-enhancing tools. Wall also gave a brief history of types in Perl — where initially, all types were treated internally as strings. But in the redesigned Perl 6, “we wanted to do object-oriented programming better than these languages” (gesturing to the other panelists).

Wall: And we wanted to do functional programming better than most functional programming languages. To do that, you have to have a fundamental, very sound type system, with a sound meta-object model underneath. And you really have to take seriously these slogans like “Everything is an object. Everything is a closure.” In Perl 6, even loop blocks are closures…

He also ultimately agreed that types were important for the culture of a language, saying the redesign to create Perl 6 involved finding (or creating) “the right peg” on which to hang each piece of information or meta-information.

There was also an interesting discussion about maintainability of code. Rossum began by saying “I found that TypeScript is incredibly useful, and so we’re adding a very similar idea to Python… I’ve learned a painful lesson, that for small programs dynamic typing is great. For large programs, you have to have a more disciplined approach. And it helps if the language actually gives you that discipline, rather than telling you, ‘Well, you can do whatever you want.’”

Wall agreed. “That was part of our scale-up idea for Perl 6, that the types would help with programming in the large, because we did notice those limitations of loose typing.”

Gosling also agreed. “About 20 years ago, I started working really heavily on refactoring engines, and being able to do large-scale refactorings on millions of lines of code at once. That really changes the way you think about maintaining code. Because the world is filled with libraries that have things like stupid variable names, stupid method names… But if you’ve got a good refactoring engine, you just type, meta-control-R, type in the new name. Hundreds and hundreds of files later, which takes about maybe 30 seconds, if it’s a lot of files — you’re done…!”

Hejlsberg: You’re describing what was the genesis of the TypeScript project, which was these enormous JavaScript code bases that we were seeing customers write, and in-house projects… It turned into write-only code, you know? You dared not touch it, once you’ve written it because it worked…

A “semantic” understanding made refactoring easier — but that required a type system, he added. “We’re now seeing people, with regularity, refactor hundreds of thousands of lines of JavaScript code, in minutes. And it just works afterward, and people are amazed that it’s possible.

Wall pointed out that good lexical scoping also helps with refactoring.

Was It Worth It?

For the last question, Willing asked something philosophical: what had these top language designers found most rewarding?

And Wall said, emphatically, “The people. By far.” The audience began applauding, and Rossum joined in.

Hejlsberg agreed, saying “that’s what keeps me coming back to work. Every day is like — the incredible excitement that the community shows you…”

Oh you know… just spending the evening with James Gosling, Larry Wall, Guido Van Rossum, and Anders Hejlberg!!! #CSforAll #PuPPy pic.twitter.com/bHriimAWil — Jason Fulghum (@jason_fulghum) April 3, 2019

Gosling: Oh yeah. Every — when somebody comes up to me in the street somewhere, and says, you know, “Thanks for giving me a career. Can I have a selfie…?”

Wall: “You gave me a livelihood. You fed my family.” That’s the best…

We’re not talking about a star relationship here, of each of us to those individuals. We’re talking about the second order, community 2.0 kind of effects.

It’s one thing to see them getting help from you. It’s another thing to see them helping each other… To see a community that is learning how to love — you know, kind of building a little bit of heaven on earth.

There’s just nothing like it.

Watch the complete conversation here.

WebReduce