Интервью /

Interview with Ricardo Signes (January 2015)

How and when did you learn to program?

When I was very young, my family had a TI-99/4A, which was a contemporary of the Commodore 64. I was probably four or five, and I taught myself enough BASIC to write guess the number games or little templates that would ask for your name and birthday and then tell you how old you were. I was just learning to write anyway, and what I got out of this was that a computer was a special kind of writing device, where whatever you wrote could just happen. I still sort of think of them that way.

I was an on-again off-again programmer until I left college. It was just something I did for fun or to solve little problems. I hacked on BBS servers in Pascal and C, and wrote little tools to scrape USENET and the web. It all worked, but it was all very jury rigged. I didn't learn how to do professional-quality work — if you're willing to accept that's what I do these days — until I left college and had to get a full time job.

What editor do you use?

The first text editor I remember using was KEDIT, which was an XEDIT clone. My father worked with 3270s, so he was used to using XEDIT, and so we had KEDIT at home. It was weird, but it was clearly superior to EDIT.COM, so I used it. Later, I moved on to elvis, because I used Slackware, and then JED which I remember fondly. I remember that all of the S-Lang software looked gorgeous in 1995. All of my terminal application color schemes, now, take inspiration from JED and slrn.

Nowadays, I use Vim. I'm not a Vim zealot or even much of an expert, but I know my way around it and have written enough Vim script to know how little I want to write any more. I like looking at new editors as they come out, but I have a hard time believing I'll change editors again.

When and how have you been introduced to Perl?

When I first started using Slackware, around 1995, I wanted to write programs to do a lot of the little boring things that I was doing by hand, like stitching together USENET posts and uudecoding them. I'd written (horrible) C, and I could've done it in C, but I knew it would be painful. Slackware had a bunch of Perl code holding it together, so I decided to learn Perl.

Now, that was Perl 4. Slackware, as I recall, was very slow to adopt Perl 5. Eventually, it was available, but you had to install it as its own package, and it was /usr/bin/perl5. I never bothered. Perl 4 could do everything! Also, I had no clue why I'd want modules or references.

I didn't really learn Perl 5 until around 2001. I had gotten my first full time job, and was writing software from scratch, alone, in PHP 4. It all worked, but it was very clear to me that the language wasn't helping me build software that I'd be able to maintain for long. I needed something that could enforce more discipline, and I had inherited a copy of the Camel. I read it, ported all of my PHP to Perl 5, and have never regretted it.

I'm probably the only person who decided to use Perl because it would encourage discipline.

What are other programming languages you enjoy working with?

Most of the serious work I do is in Perl 5, so in most other languages, I dabble. Occasionally I work on a larger project, though, and I'm always looking for reasons to use the other languages I like even more.

First, there are the languages that are a lot like Perl: PHP, Python, Ruby, JavaScript. Of those, I like Perl best. The rest, mostly, I can take or leave. People overstate the differences.

Last year, I was really into Forth. In the past, I'd tried to learn assembly languages, and I always loathed it. Forth felt like the assembly that I'd always wanted. It was simple, straightforward, close to the metal, and had a model that I could really wrap my head around. More than one Perl conference attendee had to listen to me rant about how they needed to write more Forth.

I really like Smalltalk (the language, if not always its bizarro operating environment), and I like trying to solve little problems in Prolog now and then, to keep my brain a bit limber. I wish I had a reason to write more Io.

I look back happily on every language I've had to use, for different reasons. Except for Visual Basic 5.

What do you think is the strongest Perl advantage?

There are object oriented languages, functional languages, logic languages, and other paradigms. Perl's paradigm is results-oriented. Perl is a language for getting the job done. If the job only has to run once, you can throw together a monstrosity that will do the job, and then you can never speak of it again. If the job has to run reliably every day for ten years, you can write pretty robust code and rely on the program to keep working even as Perl itself changes out from under it. This isn't any one feature of the language, but it's a guiding principle of how the language's evolution is guided over time. We keep trying to make sure that we're helping you get the job done without affecting the jobs you've already got in flight.

Incidentally, I think you can learn a lot just by watching the goings-on of the Perl community with this idea in mind.

What do you think is the most important feature of the languages of the future?

Concurrency. Really, that's one of the most important feature of languages of the present. It's clear that a lot of software that we write could be made more flexible and performant if it was designed with a greater emphasis on concurrency. Perl 5's not terrible at concurrency. It has a ton of frameworks for different kinds of concurrency. That's a pretty common situation for current languages.

I think the really important feature for languages of the future is a simple and ubiquitous abstraction for concurrency throughout the whole language. Go and Erlang are definitely languages to watch on this front.

Why so many modules? When is it going to stop?

Hasn't it already stopped? I'm almost afraid to look at a chart of my activity!

When I solve a problem in a way that I might use in more than one project, I try to modularize it. Sometimes, modularization presents its own problems, so then I have a second order of solutions to modularize. After a while, it all adds up, and I ended up with modules broken out of modules written to help maintain the modules I modularized out of my modules. Yow!

Fow a while now, I've felt like I had most of the tools I've needed for a while. Until I hit some weird new problems, I think my output will remain slow and steady. Then again, I do have a backlog of ideas I'd like to get out the door: a URI.pm replacement, a Mason-like template system, a zasm compiler...

What is your current role in perl development?

I'm the "pumpking," which is something like "benevolent dictator for now." That's a job that's been done differently from person to person. For my part, I try to keep discussion on the perl5-porters list from stalling, to make decisions where there is no consensus forthcoming, and to apply pressure as needed to keep potentially-stalled work moving. I've also tried to firm up expectations of civil behavior on perl5-porters. I don't want to work in a place full of rudeness, and I work on the assumption that most other people don't, either.

What to expect in 5.22?

So far, 5.22 is looking pretty different from 5.20. In 5.20, we added a bunch of exciting new features that you could point at and say, "Wow, that's a feature I want to use!" So far, 5.22's hit list has been mostly been performance improvements — and a lot of them! Method calls are faster, deep dereferencing is faster, and there are a number of other optimizations in there. Of course there quite a few bug fixes and nice little features, too.

If I had to pick one big feature that's most exciting, I might pick the new experimental reference aliasing. With this feature, you can say:

\$x = \$y

...and both will be the same variable, aliased one to the other. You can use it in loops, too:

my @input = ( [ 1, 2, 3 ], [ 8, 9, 10 ] );
for \my $x (\ (@input) ) {
  $x++;
}

...and end up with ([2,3],[9,10]). In other words, you can get the aliasing behavior you'd have with $_, without having to use the topic variable.

What is the current main focus for perl language development?

I don't think it would be accurate to claim that there is one. There are quite a few people working on perl, each according to their own interests. I try to encourage the work that seems beneficial and discourage those rare projects that I think can't ever get merged.

We're definitely seeing a number of people working on speed issues, right now, but there are a lot of other threads of development going on: deparsing improvements, float handling improvements, memory optimizations, and even restored EBCDIC compatibility. My view is that as long as people are working and sharing their work and plans, things are doing well. Trying to channel people onto topics they're not interested in wouldn't be a win for perl, the way things stand now.

There are people who say that backwards compatibility has become a non-priority. What is your answer to that?

It's clearly not the case. When changes to the language are discussed on perl5-porters, the question of backward compatibility invariably comes up, and it's a big factor in deciding what's good for Perl. After all, as I said above, we don't want to break your existing code that you've got getting the job done.

Different people want different rates of change, and they want change to different parts of the language, so there's often a lot of contention around these issues. Still, I think it will be clear from any observation of the process on perl5-porters that backcompat is a definite priority. Earlier this year, we decided to make clearer statements of the consideration given to those rare breaks in backcompat that are made, and that will be going into the "perl policy" document before 5.22.

Are there any things about internal perl development you would like language users to know?

It's really interesting! Long before I took any active part in the development of perl itself, I read p5p for fun. I deleted some of it unread, because it wasn't interesting enough, but tons of it was just fascinating. I learned all kinds of weird quirks of the language, some intentional and some not. I got a great sense for the different priorities assigned to different parts of the language by different people, and why that might be. I learned about operating systems, data interchange, algorithms, data structure, and group social dynamics. It's also just great to watch smart people work together.

Even when I wasn't interested in working on perl, it was fascinating to watch all this, and it turned out that it made me feel a lot more prepared later when I wanted to make a few modest suggestions or changes, and be more heavily involved.

What are your thoughts on Perl 6?

I'm cautiously optimistic. I've tried to keep an eye on Perl 6 through its whole development, which has also been interesting. Every year or so I write a little program in Perl 6, and it's fun. Perl 6 is one of the only languages I know of that seems to be trying to provide universal abstractions for concurrency while also being a very dynamic language. I'm definitely going to keep playing around with it. There's a lot of language there, though, and so far I've been unable to hold the whole thing in my head at once. That may very well change as I use it more often than once a year, though!

Where do you work now? How much of your time are you writing Perl code?

I work at Pobox.com, and I've been there for around ten years. We provide services for using your one email address for life, and we've been doing it for about twenty years now, which still impresses me, given the lifetime of most of the other internet services I've tried using.

Our internal code is almost entirely Perl. There's a little bit of Ruby, Python, C, and PHP, and of course JavaScript, but I'd say that 95% of my time, I'm writing Perl. We try to get most of the generically useful hunks of that Perl onto GitHub or the CPAN, too, so a fair bit of what you find in my CPAN listing is code built for work.

Should we encourage young people to learn Perl right now?

We should encourage young people to keep in mind that computers are general purpose tools for solving all kinds of problems, and that might mean encouraging them to program, depending on the problems they want to solve. I don't think the choice of language is particularly important, except insofar as it's able to help them solve the problem and feel continually more ready to go solve the next one.

For me, Perl was that great at that. I think it probably would be for many other people. On the other hand, if I saw a kid solving problems with what they learned from "JavaScript for Kids," the last thing I'd say is, "You should've written that in Perl."

For kids who want to be serious programmers, though, I might recommend Forth! Let me tell you a little bit about it...

Questions from our readers

Are you going to FOSDEM?

I am! I've heard lots of good things about FOSDEM, and kept thinking I should go someday. This year, I got just the right amount of nudging about it, and so I'm booked and I'll be there. I'll be in the Perl room, but also everywhere else, I hope. I look forward to sampling all the good stuff Brussels has to offer, and to meeting a lot of the people who never make it to the US for conferences.

What are you addicted to?

Lately, I'm trying to prove to myself that I'm not addicted to sweets. I've cut out soda, pastries, chocolate, and lots of other such things, with only a few exceptions. It's not making me miserable, but it sure isn't easy.

Beyond that, I try to maintain a redundant array of inexpensive hobbies. I could quit any one of them any time I wanted, but after that, I'd start needing to find something new. I'm not good at just killing time. Maybe I'm addicted to keeping busy.

Did you finally restore all your backups?

Ugh! This still smarts! Presumably this is about my big music migration disaster in June. The big problem, basically, was that I permanently deleted some backups that I thought were restored, but weren't. So, I was left missing tons of files. I restored quite a lot of it, but now I've got missing tracks on all my favorite albums. I'm not missing any whole albums, so it's even harder to motivate myself to go down in the basement, unpack CDs, and rerip missing tracks. Still, the current count is 1598 missing files. I do need to do something about it. Mostly, though, "something" is turning out to be "listen to more Spotify."

Interviewed by Viacheslav Tykhanovskyi (vti)