Perl From The Outside

I’ve been a Perl developer for almost 6 months now, so I thought it would be good to step back and document what the community looks like to an outsider. Before moving to Perl I worked professionally with C# as my primary language for 3+ years, so I have a bit of a different background compared to the average Perl monger. I also have varying amounts of experience with JavaScript, Python, Scala, Ruby, Java, and C/C++. Keep that in mind. You’re journey to Perl has probably been different then mine. Also keep in mind that this is what the community looks like to an outsider, not what it actually is.

People Still Write Web Sites in Perl?

If you’re heavily invested in Perl and the surrounding community, I probably already angered you with that statement. Unfortunately, that is the prevailing view of amongst my developer friends. Most of them use C# as their primary language on the job, but have also used VB6, Java, C++, JavaScript, Python, and PHP (and probably more I don’t know about) at some point in their professional career. It was also the first thought I had when I saw a job posting for a Perl web developer. I had been looking for two months and that was the first one I could remember coming across. I didn’t match the requirements, but it was local and I knew I could learn a language quickly. I didn’t know any C# before my first job. Why not go into my second not knowing any Perl?

One rebuttal to the “nobody writes web sites in Perl” argument among Perl mongers is that pigeon holing the use of the language to only how prevalent they are in web programming is unfair. I sympathize with them, but that doesn’t change the fact that the perception of a language among young developers is almost entirely driven by its adoption (and the visiblity of that adoption) on the web. Currently, when a fresh graduate enters the workforce most job postings are very web-centric. The hobby projects most students have usually involve games or web programming, two areas where Perl has struggled to gain traction.

The Learning Process

Back to my learning process, I got an interview and afterwards drove straight to the library to pick up Programming Perl (the camel book). I didn’t know anything about Perl, but I knew the camel book was the de facto guide. Unfortunately, the camel book hasn’t been updated since 2000, but outside the Perl community it is really the only book anybody is familiar with. Combined with the lack of new Perl books in general and their absence from bookstore shelves, this is a big contributor to Perl appearing dead to an outsider. I have heard rumors that an update is on the way, but I couldn’t find any confirmation on O’Reilly’s website.

So, beyond the camel book, what other resources does a newbie come across? Coming from C#, StackOverflow had become my standard reference for any .NET question. The site is written in .NET and the team behind it is well known in the .NET community. Unfortunately, the Perl community hasn’t been as enthusiastic in its embrace of StackOverflow. There are several good reasons for this, most having to do with the community already having established mailing lists and the prior existence of PerlMonks. For the outside developer though who already uses StackOverflow as a standard reference for a multitude of languages and tools, the dearth of Perl questions gives the impression of little use. A quick glance at the StackOverflow tags page lets us see that there are ~17x more questions tagged with C# then Perl. Is C# usage really 17x greater than Perl? Probably not, but the initial perception it gives is not good.

The Pain of TIMTOWTDI

Perl has embraced the motto “there’s more than way to do it” since it’s beginnings and in many ways the philosophy was served it well. The language itself is very extensible and that extensibility has encouraged many developers to have the hubris to think “I can do X better”. This philosophy has given us diversity in things like OO frameworks, where you are free to choose from several excellent choices depending on your needs. However, it also creates a sense of chaos and the lack of any sort of ranking system on CPAN makes it difficult to know which modules to actually use. The worst example I have seen with this is error handling.

Perl predates the widespread adoption of exceptions as the de facto way to handle errors and many developers have stepped forward with modules to fill this void. The problem for the Perl newbie is that there is no easy way to determine which one to use. The fact that such a fundamental, and in other languages simple, question is complicated by so many choices is overwhelming when learning the language. A newbie is confronted with at least the following choices:

There is no easy way for someone just learning Perl to choose between them. The first result from Google for the search “perl error handling” is an article from 2002 for the now deprecated Error module. It’s a shame that such a concept that is so easy to pick up in other languages can be so frustrating to a new Perl monger. I ended up just using the built-in handling, which felt (and continues to feel) clunky compared to the ease of exception management I was used to.

They Can’t Even Ship a New Version!

At some early point in my learning process I started hearing about Perl 6, a subject that seems to cause confusion even within the Perl community. Unsurprisingly, this confusion is magnified for newbies. I now know that Perl 6 is to be treated as an entirely separate language, but outsiders do not know this. To them the decade long (and still going) process to create a production quality implementation seems like a joke. When an outsider sees the names “Perl 5″ and “Perl 6″, the completly natural assumption is that “Perl 6″ is the next version of Perl. And the natural conclusion after seeing that Perl 6 was announced over a decade ago and has very little adoption, is that Perl is a dead language. I have read that Larry has spoken the final word on this issue, but that doesn’t mean it was the correct word. It just means the issue has been closed for debate. The name Perl 6 will continue to hurt the perception of the community from the outside.

Beating the Java Strawman

Most developer communities have a favorite whipping boy. Perl (like many) has chosen Java, but seems to have thrown the baby out with the bath water by vilifying everything associated with Java as well. Now, I’m not here to defend Java. The language has serious warts (crippled generics anybody?) and the late 90′s “enterprise” framework rush crippled the Java community in ways it is still struggling to break away from. But I found the wholesale rejection of everything associated with Java distasteful in many ways. First, it felt childish, but more importantly it has left the community behind the curve in many ways, most notably in object oriented architecture and standard design patterns. As a developer with a strong background in these areas this was a bit of shock. My fears were at least partially eased when I discovered Moose, but overall the Perl community comes off as too cavalier in its dismissal of these ideas.

On a related note, yes, I know that many important OO design principles did not originate in the Java community, but it’s status as the dominant enterprise language at the time the internet took off put it in a unique position to be a test bed for many design ideas on large projects as businesses rushed to retool their infrastructure.. Consequently, most influential architecture and design books released in that time period generally assume Java.

Shaking Things Up

At this point, outside developers have little interest in learning Perl. Any exciting new developments tend not to break out of the Perl echo chamber. For example, the fact that Perl now has several nice OO framework implementations is nice, but doesn’t attract any new Perl developers (although it does seem to have brought some old Perl developers back into the fold).

Looking in from the outside, I see two possibilities for attracting widespread interest in Perl again. One is widespread adoption of Perl 6. It doesn’t really matter if anything is gained technically from this. As I stated above it would remove the specter of decay that surrounds the community. The buzz from some notable adoption of Perl 6 could be the push some developers need to take a look at Perl. In a similar fashion, for the lack of a better comparison, Perl needs it’s killer app/framework. The best example of this in the past decade has been Ruby on Rails. Ruby is a very nice language, but Rails gave it the momentum it needed. I, and many others, would never have given it a chance without Rails. I have no idea what this project would be for Perl, but it wouldn’t hurt to take chromatic’s recent advice and brag about interesting Perl projects.

Conclusion

Overall, my journey to Perl has been worthwhile. I had been concerned about being typecast as a .NET programmer and getting stuck in Microsoft-land for my entire career. Being able to program in multiple paradigms (static vs. dynamic in this case) has certainly made me a better programmer and expanded how I approach certain problems. Plus, it confirmed to me that I can learn and become productive in a new language in a very short period.

However, the problems with the perception of the Perl community aren’t going away and at this point it is probably too much to hope that they ever will. The community itself is too fragmented and pulled in too many different directions to expand it’s core niche as a text processing language. Perl certainly isn’t dead and does seem to be gaining some momentum internally, but none of this has reached the outside world. Until it does the community will not grow in any significant way

25 Responses to “Perl From The Outside”

  1. Gabor Szabo

    Excellent post. Thank you!

    One main issue I am still missing is the source people (outside of the core Perl community) are getting their knowledge? I think we even have trouble reaching the majority of Perl programmers with new information (e.g. Moose) so reaching those who don’t even use Perl seems like impossible.

    You mentioned the age of the Camel book. That’s one thing. Where else do you think people get their perception from?

    • Brian Meeker

      I’m not sure if there is a source. The perception may just be formed from the fact that is old and the absence of discussion about it. The only thought I had is perhaps the references to Perl as one of the first languages of the web colors the perception. Usually a generic history-of-the-web article will mention Perl early on and then it just disappears. That’s not a very good or satisfying answer though.

      My personal perception was also colored by the way I was introduced to Perl in college as just some text processing language. We only had one project where we were required to use it and that involved parsing stabs or dwarf files. I’m not sure if other schools introduce Perl in a similar way (or any way at all).

      • Gabor Szabo

        I don’t think we can do much about it age so let me pick part of your sentence “the absence of discussion about it.”. Where is that discussion going on? How could one get into that discussion and engage the people in there?

        That’s what I don’t get.

        But I am old so it might not be surprising :).

        • Brian Meeker

          The plural of anecdote isn’t data, but I do have a couple of thoughts.

          1. Non-Perl conferences. The best example in my neck of the woods is CodeMash. The sessions from 2011 show talks on .NET, Java, Ruby, Objective-C, Python, and PHP. Getting some Perl talks at heterogeneous conferences like this would be nice. My co-worker tells me this is something that you have done in the past.

          2. Non-Perl user groups. Perl Monger groups are great, but can develop into echo chambers. More collaboration with other user groups. In my area Ruby gets some regular talks in the .NET users group and has gotten some good buzz from doing so.

  2. Raghu

    I generally follow perl on reddir/r/perl & that keeps me in touch with the community , they are plenty of other sites like http://www.perlbuzz.com which aggrigate all perl related news.
    As for beginners, if you are etting started in perl now , then in fact you are entering perl at a good stage as a language perl has come a long way & now has marure support of OO (moose) and active development of new features with 5.10 on wards , 5.14 was out recently.
    Start with modern perl , get this great book on modern perl , also try Learning Perl which is by far the best book for starters. Programming Perl next edition is due sometime this year which will cover modern perl (>5.10) (remember reading about it )
    If you are on windows get Strawberry Perl (it has good support of CPAN & comes with minGW & dmake so its a breeze to grab CPAN modules & get started & also has a portable perl version)
    Please note that perl6 & perl (5.xx) are different languages and will co-exist

  3. Marco Fontani

    Wonderful post, thanks! It gives a great insight about the perception of the Perl world from the outside, and more!

    Regarding the Camel book, here’s a link to the new edition, which should be out in October 2011 and can be pre-ordered from O’Reilly: http://oreilly.com/catalog/9780596004927/

    Hope that helps; I wish you a great journey through Perl land!

  4. Duncan

    A new edition of “Programming Perl” (4th edition) is due out this year, I believe.

    “Learning Perl” has been revised regularly. The 5th edition was released in 2008 and the 6th edition is due this year.

    TIMTOWTDI is a mixed blessing. Have you looked at Task::Kensho on CPAN?

  5. Carl Mäsak

    Thank you for writing this post.

    As a Perl 6 community member I’d just like to chime in with your analysis of the situation with Perl 6. The two things you mention:

    * Yes, “Perl 6″ as a name confuses people and hurts the overall image for the reasons you list. More widespread adoption would change that.

    * Yes, what Perl 6 needs now is some “killer app” a la Ruby on Rails. I have no idea what that it would be, but I know the substrate for building one is quickly materializing.

    Rakudo (a Perl 6 implementation on Parrot) is rich in features and when the next branch lands, will be significantly more performant than so far. Niecza (an implementation on .NET/Mono) is already fairly fast, and quickly catching up in terms of features.

    So now we just have to write enough books and tutorials that the author of the next killer app will find Perl 6. :-)

    • Brian Meeker

      I’ve seen that momentum seems to be growing around Rakudo in the past couple of years. What I worry about with a Perl 6 “killer app” is that somebody will just port it back to Perl 5. It would have to be something that is clearly better on Perl 6 than 5 for some reason. I’m not familiar enough with the technical differences beyond cleaning up the syntax to know what that would be.

  6. Hugh S. Myers

    Given the negativity in your blog, I’d suggest you put down the incredibly old copy of Programming Perl and go back to where ever you came from. Now having said that, I am somewhat disturbed by your not researching what it actually out there. You do realize that there are web ‘Stacks’ written in Perl don’t you? Whatever the task, there are not just modules that do the job, but ‘tested’ modules that do the work! Thousands of them! Not quite Sagan’s ‘billions and billions’, but close enough. In terms of programming, the Web is not the world, try and leave that miss perception behind. Actually the most useful thing you can do at this point is join the Perlmonks community. Having 24×7 access to everyone from fellow beginners to the guy who wrote the language is helpful beyond words. Lastly, the things you complain of bother very few of us who have been Perl programmers for years. At a guess, we will be Perl programmers for years more. Now it is true that we may be all blind to your incredible insight, but somehow I don’t think so… Realize that most of your complaints are cliches and should be set aside so that you can go about learning a rich viable language—or not.

    • Brian Meeker

      I debated whether to feed the troll or not, but decided to go ahead. I’m not sure why.

      * First, the community had a discussion about behavior such as yours. I would recommend that you take a more constructive tone in the future. Don’t criticize what you perceive as my negativity by responding with a far more negative comment then anything I said. It makes your argument sound like the equivalent of “You damn kids get off my lawn!”. You must have incredible insight to see such a negative tone where nobody else has.

      * I am aware of web ‘Stacks’ in Perl. People outside of Perl are not. Catalyst, Dancer, & Mojolicious are all excellent choices for developing on the web with Perl, but have not been able to get any recognition outside of the Perl community.

      * I am fully aware that CPAN is full of many excellent modules. As a matter of fact I listed out many of them for error handling. I even use a large number on a regular basis.

      * I already have a PerlMonks account and consult the site on a regular basis. My point wasn’t that PerlMonks is not a good resource. It is. My point was that non-Perl developers don’t know PerlMonks exists. They just see less Perl discussion on a site like StackOverflow.

      • Gabor Szabo

        Comments like the one above from Hugh S. Myers sadden me. I am not sure where they come from but I think part of the poblem of the Perl community is that we don’t see how we are seen (or not) from the outside.

        I am glad you managed to give such a calm a constructive reponse to him. I am looking forward for more post from you. (BTW Please add your blog to the Ironman: http://ironman.enlightenedperl.org/ )

      • Rob Boerman

        Feed the troll, get off my lawn… HAHAHA. Nice!

        I have been a Perl programmer for years and agree with you how Perl looks to outsiders. It is a shame that such a great (amazingly productive) language does not attract more developers. Comments like the above even make things worse, to stay in his words: go back to the cave you were coding in and don’t bother replying to posts if you’re not planning anything constructive! I agree absolutely with Gabor and applaud you for the calm and insightful response.

        Keep up posts like these!

        Rob Boerman

        (busy planning an enormous new project, using Perl Dancer)

    • sean

      Keep in mind that “chromatic” doesn’t speak for the community, but only a particularly vocal segment. Five years ago Conway’s “Perl Best Practices” was touted as the Right Way to write Perl, and look where that is now… Meanwhile, people have been using Perl in a variety of ways to get stuff done.

  7. scott

    Great article, Perl is awesome, I was taught Java at college, Learned the web programming languages on my own, at work I am in charge of Koha Libraries which is Perl library system. I picked up Perl and I try to use it over the others.

    I hope catalyst comes to Perl 6, from what I have read, Perl 6 will be backwards compatible and its in the works to do so? a native catalyst for Perl 6 would be awesome. Its just like RoR.

  8. Olaf Alders

    The issue you raise about module ratings pains many of us. http://cpanratings.perl.org exists, but it doesn’t fully solve the problem. There is currently a lot of work being done at http://metacpan.org to help identify the tools which are most popular or are currently gaining traction in the community.

    As an aside, MetaCPAN relies on ElasticSearch, which requires Java and performs beautifully.

    • Brian Meeker

      I was excited to see CPAN Ratings at first, but quickly realized it was underused. I think it’s a great idea that just needs some love to attract more use.

      I’m happy to see the work being done with MetaCPAN and hope to see some neat things done with their API. Assuming it continues to go well, is there any chance of it fully replacing the current CPAN portal at some point? If they continue to get traction it seems like a waste to have two portals.

    • Brian Meeker

      I’m happy to hear that. There seems to be a lot of confusion about what DI is in the Perl community and why you would want to use it. I struggled with the best way to apply it myself coming from a statically typed language. I was used to a heavyweight container (Windsor in my case) and making everything an interface.

  9. Shawn

    “A quick glance at the StackOverflow tags page lets us see that there are ~17x more questions tagged with C# then Perl. Is C# usage really 17x greater than Perl? Probably not, but the initial perception it gives is not good.”

    Your perception is wrong. There are 17x more difficulties understanding C# than Perl. That’s why there 17x questions. Conclusion: Perl is 17x easier to understand than C#. :)

    There are three types of lies – lies, damn lies, and statistics. Numbers don’t mean a thing unless you know why.

  10. Carl

    I’ve been working with Perl for several years but I have to agree with much of what you said.

    For example, I had no reason to do serious database work with Perl until recently. Trying to find out about modules and good practice, most of the first few Google pages were articles from 2002 or earlier. Similarly, trying to find the best XML module for my needs brought up very old recommendations and cryptic allusions to great religious flamewars between two factions, also possibly long out of date.

    Speaking of religious flamewars, while Perl started out with TIMTOWTDI as its motto, the Perl community seems unusually keen on a different idea: there’s more than one way, but one of them is the true way for real Perl people, who shouldn’t need to explain why or listen to any counterarguments. This idea of Perl as for an elite of intellectual purists, while those who merely want to get a job done should use PHP and not bother them, is surely not helpful for newbies.