The Situation Today

Concentration of Effort and Elitism
Lack of Adequate Online Resources
Lack of Adequate Mailing Lists
Substandard Standard Documentation
Too Much Hubris

When Larry Wall and others started hacking on Perl 5 (which was a complete rewrite and complete re-design of the defunct perl4), they expected it to be used for system administration tasks, for text processing and maybe to automate a few network tasks. The Internet Boom wanted otherwise, and several other technological explosions saw in Perl a suitable language for its tasks. Nowadays, Perl (and similar languages such as Python, PHP, Ruby or Tcl) are used for tasks as diverse as the computer world itself. Server-side- scripting, Bio-informatics, System Administration, Text Processing, System Tools, Graphical User-Interface, Computational Programming, Quality Assurance, automating Internet services (for good or worse) and even real-world applications and Games, are all written in Perl, Python and everything else. Some Killer apps of this kind include: Slash (the back-end of Slashdot), SourceForge/GForge, Bugzilla, Zope, PySol, The Mandrake Linux System Tools and Installer, Frozen Bubble (;-)), SpamAssassin, and many other things I don’t recall or forgot about momentarily. Furthermore, a lot of code of such languages is used internally and not exposed to the world, and plays a large role behind the scenes.

They are still often referred to as “scripting languages”, but this term can no longer accurately describe them. While a Java-obsessed friend of mine asked me to give him an example for a proprietary application of a large codebase that is written in Perl, and I could only think of open-source ones, it is definitely enterprise ready, and not a toy language for hackers any more.

Now, let’s go back to Mel. She needs to learn Perl. But she might as well have been told to learn PHP, Python, Visual Basic or whatever. My problem is I think she would have a much harder time with Perl than with the others. No, it’s not because Perl is a harder language than the others. I don’t think it is. It’s because the resources available online are inadequate or may scare her. And as Casey West noted in a previous attempt at correcting the situation, the Perl community is relatively hostile to newbies and does not put up with them as much as those that are friendly would hope.

Here is what I think are the problems with it:

Concentration of Effort and Elitism

I did my best to help newbies welcome in Perl. I actually like beginners, and have a lot of patience to them, because I know no one is born with an innate knowledge of Perl, UNIX or whatever. I often work in the Technion farms and whenever I overhear that someone has a problem my ears become pointed, and I cry “do you need help?” And then show him how to do something that for me may be perfectly obvious. Seriously. I simply enjoy doing that.

I also took some proactive effort in the direction. I wrote the Perl for Perl Newbies lecture series for the Haifa Linux Club. I wrote them with absolute beginners in mind, and decided to teach a very small subset of Perl step by step, with assumption that people will read the man pages afterwards. (and be able to understand them better then).

Lately, out of frustration with the learn.perl.org site, I started working on my own version of a Perl beginners site. Now here is where things went a bit wrong in my opinion. However, I don’t want to defame anyone so I’ll summarize. Both the use.perl.org’s editor and a very prominent Perl figure that stumbled upon the site, believed that I should merge my work with learn.perl.org. At first, I thought it was a good idea, but then discover I am unable to contact the learn.perl.org workers and that their mailing lists was closed for subscription.

Regardless, what’s wrong with two Perl beginners site on the Internet? If I feel that learn.perl.org is inadequate, why should my effort be frowned upon? If we take PHP or Visual Basic for example, than everyone and his mother have a PHP portal where users can post questions (sometimes without subscribing), receive answers, read tutorials and see code snippets. Same for Visual Basic, despite the fact that it is proprietary. I want the same for Perl! I don’t want a couple of concentrated perl.org and perl.com and oreillynet.com sites. I want a real network of independent sites!

It also demonstrates the Perl community’s elitism. I don’t know how it came into being. For example, when I log into EF-Net, the channel #perl displays a long title that reads something like: “Not a Helpdesk! No CGI/WWW/Net::IRC/FAQ.”. OK, there’s also #perlhelp where such questions are accepted. But here are two facts from a user interface designer point of view:

  1. People are not going to read the title. In a user interface, you are lucky if people read anything at all. (including: “Delete and Expunge ‘My most important work’?”)

  2. Newbies by nature will try #perl if they log into a random IRC server. And they don’t want to get flamed for being off-topic there.

In short, this is a bad UI design. If the Perl gurus so desire not to be disturbed by newbie questions, they should move to #perlgurus or #perlelite or #perlcafe or whatever. But they should not make claim for #perl.

In another IRC network, I (not a newbie by far) was kicked because I pasted a URL and said the word CGI. (there’s a nasty pattern bot there). Some other time, I was kicked out of #perlhelp, because I said the built-in function hex() converts numbers from hexadecimal to decimal, while a moderator believed it converts them to hexadecimal. Naturally I was right (Run perldoc -f hex), but still instead of arguing with me, he kicked me out. Why should a bit of disinformation hurt if there are enough good people to correct it on the IRC as well? And Newbies can learn a lot from such discussions.

Lack of Adequate Online Resources

Let’s face it: at the moment, there aren’t too many good Perl tutorials online. Many people who ask trivial questions are being conveyed something like “Read the Llama Book, the Camel Book, the Black Panther book, the Perl Cookbook, and then you’ll know how to convert a file to lowercase.” Maybe I’m exaggerating a little, but it seems people are so content with the books that they don’t seem to think people who don’t want them, cannot afford to buy them, or don’t have time for them, are worthy of learning Perl.

I don’t have anything against people trying to make money off Perl by selling books. But these people are the same people who are the Perl project leaders, and so are responsible to make sure Perl is well-documented. If people get frustrated learning Perl, and become unhappy with it, they will criticize “Perl”. Not the Perl documentation. Not the Perl community. Not even the Perl leaders. “Perl”. If Larry Wall et al. care enough about Perl, they should make sure it has good online documentation. They don’t have to do it themselves, as a simple call for action by a very prominent Perl figure will do. (in accordance to Eric Raymond’s “The Cathedral and the Bazaar”)

If we take a look at Python or PHP for instance, then they have excellent online documentation, which is very useful for most if not all newbies. No need to read a book or take a course. Just surf the Internet on your ADSL connection, install a few things on your Windows machine, and presto! You know PHP or Python or Ruby. I seriously doubt if it can be done with Perl with the same ease.

I am grateful for Simon Cozens for making his Beginning Perl book online for free. I did not take a thorough look at the book, but it is more encompassing than anything I’ve seen. But even one book is not enough. People still want step by step tutorials and things they can cut and paste code out of and tinker it to do something.

When are books that cover a Technology something that I find legitimate? When they are not absolutely needed. I learned the Perl DBI by reading the man page and the online site and asking a few questions. Some people do not like man pages too much and would rather buy a book that covers Perl DBI. That’s OK, and there may be a few fine points of working with DBI that I missed with what I call my “bottom-up learning”.

Such books need not be available online if their authors so much don’t desire. However, Perl is very hard to learn from public electronic resources alone. I believe there may even be a clash of interests because the core Perl people also write them and so may not have enough motivation to improve the online documentation. Making them public will resolve that.

That aside, I also believe that making it available online will not dent their sales much. I still would like to buy the Camel Book (which I borrowed from the local Perl Mongers library), and loved regardless if it’s online so I can read it at bed time and stuff. And I generally have no problems using a computer book or tutorial.

Lack of Adequate Mailing Lists

Then there are the mailing lists. I think (but am not sure) that most Perl Mongers mailing lists will gladly accept questions from newbies and answer them kindly. I know this is the case for Israel.PM. As a general rule Perl Mongers should make sure that the newbies mailing list would be the first list they see on the site, or try to subscribe to. Again, good user-interface design.

The Perl Beginners list In my opinion is a bit useless. It is very high volume, and usually whenever one considers replying to a question, it receives three replies by the time he finished composing it. I was also subscribed and it was too high volume to be effective for me as a “guru”. I believe newbies will not be able to handle such volumes either. Unless they can configure their mail readers to filter only their own threads, which I’m not sure they can. Perl can do that, but they need to know it first.

Like I said earlier, I think distributism is the key to our success here. Just like there are many scientific journals with very similar names and themes, (sometimes, “Physics A”, “Physics B”, “Physics C” etc), so there should be several international Perl beginners sites, each with his own mailing list for beginners. Gurus will subscribe to one or more sites and answer questions there, and newbies won’t have to excessively use their delete button. Gradually, each such community will have a different atmosphere, and we will get a more diversified Perl world. (we all agree that diversity is good, right? If you don’t you should program in Python)

Substandard Standard Documentation

Let’s face it, the man pages (or perl*.pod), which are the definitive resource on the exact behaviour of Perl are very bad. Maybe they were OK for expert Perl 4 or Tcl hackers, or those that knew UNIX shells, sed and awk well. But nowadays we can expect people to come even without knowledge of the DOS or Windows command line, much less UNIX wizardry.

Perl is not and cannot be a “point-and-click-no-think” language. I’m not going to fall into the trap of trying to make it so. Even the lamest GUI kiddie eventually learns to invoke a text editor and write some glue code for whatever he needs to get a web-site or whatever working. Perl is much too powerful, to be something like ASP, where you can write wizards to perform most common tasks. In Perl, you can in one script, write a full application. This is something that while perhaps possible in ASP, it was not intended to do.

Still, the fear of writing code and thinking in terms of variables, functions, objects, modules and other abstractions is not something that for people above a certain age is easy to overcome. Visual Basic for Applications is one of the things I like most in Excel, but most people don’t know it, and most books don’t teach it. Why? Because it involves actual coding and people don’t like that. Ironically, it’s very useful, too.

Now, a documentation should guide a newbie step by step and explains: what is a variable? what is a scalar? what is a number? what is a string? how they convert into each other? What is an array and what it is good for? Same for hash, object, etc. All these things may have different semantics in Perl than in most other languages. And all these things need to be explained clearly and reasonably, without depending on an analogy to tools that are way over Mel’s head at her current position.

I don’t want this knowledge to be hidden from the world in some proprietary O’Reilly books. I did my best to remedy it, and Simon Cozens did even more. I think the reason people think Perl is such a poor language to learn or even for complete beginners, is not because of the syntax and semantics themselves, but because of its poor documentation. That put aside, I think publishers making their books available online, will only help them sell more books (assuming these books are good, of course). Otherwise it’s similar to buying an apartment without seeing it first.

Too Much Hubris

Hubris is one of the three great virtues of the programmer according to Larry Wall. But he also noted in “Open Sources” that humility was a good quality as well. Don’t get me wrong some projects have much more hubris than Perl: Python and Linux come to mind. I’m not saying all Pythoneers or Linuxers are hubris-ful. But a small minority is too loud, and there’s a similar case in Perl to a lesser extent.

What do I mean by hubris? “Perl is the greatest language since sliced bread. It has unparalleled text processing and data structures support. It is object-oriented, supports functional programming and any other programming paradigm very well. It’s perfect for almost any task, from powering web-sites to writing GUI to writing games. It’s practically LISP with in-fix notation, and runs on almost any platform imaginable...”

You get the drift? Why I think it’s bad? Because most people don’t like communities with this sales pitch. When recommending Perl to someone, you should discuss one advantage at a time, not overload him with a lot of information. When people see a lot of information they think there’s something fishy about this.

Let’s take a look at a language with just the right amount of hubris: Visual Basic. Right, a language that Microsoft has released several versions of, each adding major things, but is still inferior to perl 5.000. A language whose code can only be deployed on Windows. A language that is many times useless without a whole slew of OCX or OLE components that are freely available at best. Still, Microsoft and the other VB community do not claim it’s the greatest language on earth. “I take your word that Perl/Python/Ruby/LISP/whatever is much superior. VB is stupid, but cute and it gets the job done.” That’s the attitude we should have: Perl gets the job done. Granted, many different jobs. But as far as Mel is concerned it only gets her job done and not the entire world’s ones.