Bio Damian Conway is well known in the Perl community and has worked on Perl 6 for many years; he's a speaker and teacher, author of several technical books and Perl software modules, and runs an international IT training company, Thoughtstream, which provides programmer training from beginner to masterclass level in Europe, North America, and Australasia. His website is: http://damian.conway.org
Software is Changing the World. QCon empowers software development by facilitating the spread of knowledge and innovation in the developer community. A practitioner-driven conference, QCon is designed for technical team leads, architects, engineering directors, and project managers who influence innovation in their teams.
Sure. I guess what I am is a mouth for hire. I am someone who goes around and does keynotes, does education, teaching. From the very beginning I've been mostly an educator, but I also love to get up and entertain an audience and make them think a little bit differently. So, all of my work involves travelling around the world, coming to conferences, giving keynotes, writing tutorials and then of course, running a lot of classes for corporate clients in the various countries that I go to, as well.
João's full question: I first heard about you a few years ago in Portugal and it was really fun because a friend of mine said "there is a free talk, it's about Perl" and I didn't know anything about Perl, at least it's what I've been told, and I went completely unaware of what the content of the talk would be and it was just incredibly fun, it lasted well over two hours and I was completely surprised and my friends were completely surprised that it lasted so long and time just flew by. And I think that's a characteristic of your talks, so how can you achieve such high-quality presentations? I'm sure there is a lot of work to put there, but how can you think about those seemingly unrelated topics to the IT?
I really wish I knew where the ideas in my talks come from, I guess I just have one of those brains that's full of all kinds of trivia and pays attention to a lot of different areas of computing. When I was an academic back in the late '90s, my supervisors used to complain I would never stay with one topic for very long. If you're an academic you're supposed to find one thing you are good at and do it for the rest of your career and I would not do that, I would do six different things every year.
So, what I did was I found a way to turn that into a career. What I've been doing--what I always do--is I read very widely, I watch the different trends in IT and in other areas of science, and then somewhere in the back of my head, there is something that makes connections between those that no one else seems to see. And they are not always sane connections, but that apparently doesn't matter very much.
For me that's the secret to coming up with new and interesting ideas: it's simply to make connections that people haven't seen before, give them new ways of thinking about the world...and for me that's the exciting part. Then after that it's just a matter of a really large number of intense hours of work to get the presentation to the kind of standard that you see when I give a keynote.
For a living, I think it was probably when I was about 20 or 21. I had been talking from much earlier times than that, as soon as I went to secondary school I got involved with the local debating club there and discovered there was almost nothing I enjoyed more than being up in front of an audience and trying to convince them of something, or tell them something.
But when I was about 20, I was in the last year of my undergraduate degree and I started running tutorial classes for the university. It's a very common thing: you take senior students and have them teach the junior students. And I found that I was enjoying doing the teaching more than I was enjoying doing the learning...and that convinced me that's where I wanted to go. So I went on to Ph.D. so I could get into an academic career and from there I just moved out into trying to teach the whole world.
4. As you said, you are also a teacher for many years at college; what do you find so interesting in teaching others, because teaching is a bit different from the presentations you make; what do you find interesting about teaching?
For me, the joy of teaching is seeing the light dawn in someone else's eyes. It's seeing them go from that state where a particular topic you might be talking about was mysterious, scary, and difficult, and "I didn't quite get it"...to suddenly seeing their eyes open and seeing their brains start sparking and everything sort of clicking for them.
For me that's very precious (and unfortunately a very rare) thing to see. So the great thing for me about teaching is that every day when I am in a classroom I get to see that. I get to see someone's life get easier because of something that I've been able to explain to them in a way that finally made sense. And for me that is very, very satisfying: to know that people are going away from having worked with me somehow better than they were, somehow happier and more able to cope with the world.
I feel very privileged to be able to do that, to be allowed to do that and I am very grateful that apparently I have the skills that make it a feasible career.
João: Seeing your talk today, for me it was really interesting because you used Klingon to explain in plain English programming concepts, so that was really interesting to me and it's a real weird way to talk about it, but it's really nice and I think the message really gets across.
For me trying to find the weird way is often the best solution.
A lot of people get very stuck in their existing ruts, in the way they think about the world, in the way they think about programming, or their job or the task at hand or whatever it is. And part of my job, as I conceive it, is to take people like that and suddenly jolt them out of their everyday way of seeing the world. For me, the best way of doing that is to go somewhere so bizarre, so unexpected, and so unlikely that they've no choice but to be thrown out of their traditional ways of thinking about things.
And so, I am always on the lookout for unusual connections between things. For example, the fact that Klingon is effectively just Reverse Polish Notation and there is a one-to-one correspondence there between that and say the PostScript language. For me that helps illuminate both programming and the PostScript language and gets me thinking about programming not in the sort of the pedestrian way that's generally taught, but as a communicative act.
And for me that's very exciting to be able to do that, and the weirder you do that, the better. I mean I could've done the same thing with one of a variety of other languages in the real world that does that, but it's much more fun if I can talk about Klingon and actually talk Klingon while I am doing it.
That choice came about fairly early in my academic career. I had become a lecturer at Monash University in Australia and I was doing the kind of research that IT academics are supposed to be doing.
But the kinds of things that I wanted to do involved designing new constructs and new data structures for existing languages. Trying to find new ways of thinking about computation. Of course it's pretty much what I am still doing, but at the time in order to do that, you either had to write your own language from scratch, which seemed like far too much work for me, or else you had to work in a language that was flexible and malleable enough that you could change the language to be what you needed it to be.
Initially I tried to do that in C++ and there was some ability to do that, but I kept getting hamstrung by the fact that I had to work around the language, that the language kept blocking the kind of research that I wanted to do.
So, when I discovered Perl, I realized that here is a language that's not particularly strict about how it wants you to think about programming, or to write code, or to design new features. And here is a language that allows you to manipulate the language itself. Very few programming languages, for example, give you direct runtime access to the symbol table and as soon as you have that, you can start generating on-the-fly constructs and on-the-fly subroutines and things like that that can do quite amazing things.
So that to me was the initial attraction of Perl...and then we started getting things like source code filters and now you can create entirely new languages inside the Perl language. For the kind of research that I wanted to do and the kind of explorations of coding that I wanted to make, there was nothing else at the time--or indeed since--that really compared with the sheer flexibility that Perl has given me. And that's been what's kept me with Perl over the years.
6. At the end of the last century when Java came along there was a very strong push to prune the evolutionary tree of programming languages, it was Java write-once run-everywhere, but on the last few years there's been a renaissance of programming languages with Scala, Ruby, Clojure, a number of languages. Are you happy with this outcome?
Of course I am. I'm a Perl programmer: one of our mottos is "There's More Than One Way To Do It". We would be horrified if there was only Java to do things with. I think most people would be horrified if there was only Java to do things with. It's great for some things but there are plenty of things it isn't good for.
And this is the problem. I mean: the push for there to be one language is a push to uniformity, to consistency, to mass production as it were, and that works only in very limited environments. And it also creates vulnerabilities.
If there is only one language I can program in then there is only one way I can think about programming. And having one way of thinking about programming stifles all innovation and all development. So, I am very excited to see there are so many other languages that are coming out and developing.
I think a lot of those languages are coming out in reaction to the limitations of the "One True Language"(s) that were initially proposed. And you can say Ruby in a sense was a reaction to the limitations on Perl(it's funny to think of Perl having limitations, but it's true) and certainly Scala is very much that too.
I think it's particularly good to see the growth of languages that treat functional programming seriously. For a long time functional programming couldn't be treated seriously because there weren't usable, production-ready languages in which you could do it. And I'm very excited to see that changing. I am thrilled that 100 schools contend rather than there be One True Way of doing it.
Unless it happens to be the way that I would like; but that's just a human thing.
7. One thing that I've also noticed is that despite this renaissance, it seems that Perl does not receive as much attention as these new languages and some older languages like Erlang as we were talking earlier. Why do you think that happened?
I think there are a couple of aspects to that. I think one of them is that Perl is just the gray-haired guy on the block now. Perl's been around for a long time, it was the first of the real scripting languages. By some metrics it's still the most popular. If you look at just the embedded base of Perl code that's out there, it's everywhere. So people weren't really excited by Perl.
The other thing is that in the Perl community there was a really long period of time, about seven years, when there wasn't a lot of development in the actual language itself. We got to Perl 5.8 and we kind of cruised as a community for a long period of time. We had little tweaks to the language, but we didn't really have a lot of new features, nor respond well to the kinds of things people wanted to do. That was the period when all these other exciting languages were coming out whilst we were: "Ah, Perl, it's the same as it ever was". But we're now at Perl 5.20 (that's the one that's coming out this year) and there's been a lot of new stuff happening.
The other thing is in the Perl community we're not terrific at advertising. We're not really good at marketing ourselves particularly well. In a sense we don't really care about that; we care about getting the job done for people, helping people get their work done effectively. And we don't have large organizations behind us. Some of the new languages that have come out recently, languages like Dart and Go and so forth, have Google behind them and that's an enormous push just for them, but all of the big languages you're talking about have someone there supporting them like that. Perl hasn't really had that.
So, Perl has cruised along quietly, made improvements and developments, hasn't been as spectacular, but part of that has also been that these new languages are coming up in response to limitations of existing languages. Like we said before, Scala is a reaction to the limitations of Java (or whatever you want to say), and Perl hasn't had limitations like that. So, there hasn't been a need for "What's next after Perl?". It still just does the job.
I think that what it has to teach is that in order to get good and useful work done, you don't have to have a huge amount of hierarchy, a huge amount of structure in your development team. That it's possible to be fairly relaxed about the way that people contribute to a code base and yet still produce good, high quality code.
You do need to have leadership, but you don't have to necessarily drive the team in quite the same sort of way that they are often driven within IT.
That being said, open source has different goals and different criteria to most commercial development. For a start, they don't have the same hard deadlines and financially imposed deadlines that most commercial development has, so there is a certain room for it to be a bit more relaxed.
But I think the thing is (especially in recent open source development, especially with the rise of Git and GitHub) the opportunity to let lots of people contribute and then sift those contributions for the best ones. That's something that even commercial IT departments could make more use of.
João's full question: Relating open source or contrasting open source and the Agile methodologies that nowadays are completely mainstream. Most of the Agile methodologies propose that the team members should be collocated and that's really critical, but with open source and companies like GitHub that are remotely located they are completely successful, so what do you think about this need to be collocated and the importance that is given to it?
I think that's a reflection of those differences of that we were in fact just talking about: the idea that if I'm in a commercial environment, then I have certain goals and certain targets that I've got to hit. In order to hit those I've got to insure that the communication between members of my team who are going to achieve that for me is continuous and direct and is immediate. I can't wait for a 24 or 48 hour turnaround to an email to have someone else respond to my concern or give me a decision on what should be done at this point.
So, I think that recommendation of colocation really reflects the essential need to be on a timeline that often isn't there for open source systems. Although I would say that a lot of open source development now is done also with real time communication. You're finding it's done on chat channels or something like that, rather than asynchronously over email. I certainly know a lot of the Perl 5 and Perl 6 development is done exactly in that way: that people are interacting all the time live.
But that does require a certain amount of discipline that you might not be able to rely on in the typical dev team and for that reason colocation is often a very good thing there. You can keep an eye on people, you can keep them focused and on track and moving in the right direction, and you can keep everyone aware of what's going on in the whole development process.
João's full question: Moving on to a completely different topic, I think we are really living a revolution nowadays with the rise of the internet and mobile computing, and so I have a couple of questions in this space. So, on an inward look to software development, it's really fascinating to see how many organizations have risen from zero to global in such a short time and most or all of the time using technologies and methodologies that are not really or that are frowned upon in the corporate world. So, what can we learn from these internet giants?
I think we can learn several things. First we can learn that there are rules, but they are not the rules everyone thought they were. That there are more ways to succeed than just with the traditional business model. And that the people who really do seem to succeed are the people who find and exploit a completely new channel for doing business and who exploit the very curve that they are riding.
So, you talked about the idea of the incredible increase in the pace of change over our lifetimes (that's probably the most accurate description of it). It's the people who can look at these new technologies that are coming up, and see and anticipate the unexpected consequences of them that can really do that.
Of course, Google is the paradigm example there. In the early days of the internet, when we didn't know whether it was going to be very large, and we didn't know how useful it was going to be, and it seemed to be mainly an academic exercise, the Google guys were able to look at it and were able to say "Well, that's what it's like when there are a couple of thousand websites, but what's it going to be like when there are hundreds of millions of websites? When that exponential growth that we see in almost all aspects of IT comes to the sheer adoption rate of the world wide web?"
And they were able to say: "The fundamental problem here is going to be how do I find anything in the mass of everything that is there to be found."
And so, what they did that was so brilliant was first they found an incredibly good way of measuring relevance to a particular query. But secondly, and a little more subtly, that then they found an incredibly good way of funding the giving away of that service for free.
And that I think is one of the lessons that we have to take away from the rise of the giants, that what the public considers to be your main business is not necessarily your main business. It's kind of the nectar of the flower. But the flower's main job is not the nectar, the flower's main job is pollen.
So, I think the businesses who really succeed well are the businesses that can give away something that people want, thereby building up market share, building up awareness, building up dominance...but still somehow find a way to make either those people or someone else pay the very real costs of doing that.
In that respect they are acting as a kind of transform: they transform one income source into a resource for everyone else. And I think that's been the lesson for many. You can look anywhere, you can look at Angry Birds, it's the same sort of thing: What am I giving away and where am I earning the money for that.
The sad truth is we are going to end up extinct. It's happened to every species throughout geological history, so it's going to happen to us somehow.
But before that happens to us, I think that what's going to be interesting is: for the first time in recorded history, I think we are going to have to learn how to share the planet. Up to now, we haven't really had to share the planet. Once we achieved dominance on the planet, we could pretty much do whatever we wanted to do and then the other creatures that we live with, generally to their detriment, just have to put up with that.
But the kind of increases that we are seeing in raw computational power, just on a single chip, let alone in clusters and networked systems of chips, is eventually going to mean that the computational power that's available to our systems is going to exceed that that's available to our brain.
And we see this already. I am probably twice as smart when I have access to Google as when I don't. I now have this huge exo-brain. I don't have to keep huge amounts of knowledge in my head, it's all out there. So in a sense we are going to see increasingly a kind of dilution of what it means to be an individual human being.
The amount of communication the average human being does nowadays must be vastly higher; you see people tweeting 24-hours a day. I read the numbers of what school kids are doing and it's an insane number, that's communication that would have never have happened in previous times and they are drawing on sources of information that are vastly exceeding anything that any one person could hold in their head.
And that changes who we are as people. And what we are capable of. And what we are interested in. And what's important to us.
So, as that increases and as the computational ability of the exo-brain reaches and surpasses our own, we are going to offload more and more of who we are, and what it means to be a human being, into that system.
And then we are going to get this blurring. Is it humanity anymore? Or is it AI? Or is it some collaboration of the two?
And for the first time I think, if there are going to be independent AIs that don't have any kind of wetware component to them, then we are going to be dealing with creatures that are more powerful than we are, that control our systems, control our technologies, control effectively our environment.
And that is going to be an interesting time for humans. How do we cope with having to deal with what is effectively an alien intelligence? One that we have given birth to, but which will have different goals, and different priorities, and different interests, and different abilities to our own.
If we're lucky, that will be good for us as a society and as a species. We need to be aware that we don't have the right to do anything we like, that we have to take into account the other denizens of our planet. And if there was finally someone who could kick us into line, maybe that wouldn't be such a bad thing.
João: Thank you very much, Damian, for your time.
A great pleasure, thank you.