The Perl community is never going to agree on Perl certification as a whole. Some members don't see value in certifications, or might even think of them as something harmful to the community. But many people do see the need for certification and would like to be certified. These people should have the opportunity to get certified. Not by some cheap online test, but by a series of modular exams at face to face testing centers. Certificates that actually mean something and prove the candidates are actually capable of coding and debugging.

It's time to put things into action, make a system and design the syllabus. The time for debate is over.

What has gone before

The certification debate has come and gone many a time. Here I try to summarize the previous debates with links to the original material.

A couple of multiple choice Perl Certificates have been around for a while. Both are cheap online tests and only really test the knowledge of whoever takes them, not whether they can actually code. It's very easy to cheat on these or even get someone else to take the test in your name. The majority seem view these as a very bad example of certification.

Tim Maher wrote a detailed article that was posted in TPJ you can read it here. He makes a very strong argument with some very good points.

---some comments have been removed as they created the wrong impression and could have been taken as creating a negative view of some community members---

One main thing I've noticed from reading through all the posts and articles I've found on Perl certification is that over the years there have been a lot of different people requesting certification and putting forward ideas. Each time this has happened, it's been the same people opposing it. It's my conclusion that there are many, many more people that want Perl Certification compared to those that don't. The reason why Perl Certification hasn't started already is that some of those that don't want it are influential within the community.

John Adams put forward a modest proposal for Perl Certification.

I re-opened some interest with a 2007 Perl Monks post, Perl Certification revisited.

Perl Monks in 2001 Perl Certification??

Perl Monks in 2005 New Perl Certification What is your opinion on Perl Certified Professional?

There are many other Perl Monks posts, too many to list. They all basically follow the same format as the ones above.

Conclusion

There will never be a situation where everyone agrees. There are a lot of 'bogus' certificates for all languages out there, that give certification a bad name. Those sitting on the fence or who aren't strongly against will not be swayed by further discussion. They're thinking of bad certificate systems.

I think they will be swayed by proof of a working Perl Certification system that sets a new standard that all of certificate programs can aspire towards, and be jealous of.

Looking at TPF's funding it shows $29,132.86 (correct at 2008/08/22) in the last 12 months (this figure only includes donations from the site, the real figure is $266,371 correct at 2008/09/05, thanks Kurt, but that's largely due to a one off $200,000 donation that was made this year. Historically the figure is much lower). This is not a lot of money. If a large portion of a Perl Certification fee went to TPF this would mean a lot more money for Perl development.

Would this mean taking money out of Perl Hackers pockets? From my experience most candidates are put through certificates by their employers. Ergo not taking money out of programmers pockets. Also from most of the articles and posts that I've read, many of the people against Perl Certification say that they would not get a certificate or work for a company that required or relied on them having one. So effectively Perl Certificates will only benefit the Perl Hackers and Companies that want them, and not the Perl Hackers that don't. Seems all good to me :)

All that want Perl Certification should join the new Perl Certification list that has been created by Bristol & Bath Perl Mongers (not implying that all of B&BPM want certification as I'm sure some of them don't, but so is the nature of certification). Your input is greatly valued :)

Good certification examples

I don't have a lot of experience with Certification myself. I've looked into a few different certificates, and tried a few out on my staff. The only one I've come across so far that really impressed me was RedHat's. Ok, people will say that they expect you to do things the RedHat way and not the general Linux way, but what do you expect, this is after all a RedHat certification and not a general Linux Certification.

What impressed me about RedHat certification was this:-

  1. No multiple choice
  2. Totally hands on, you work the whole time on an independent machine
  3. You're given a broken machine to fix, with minimal information about the problem, if you don't fix it 100% you fail
  4. You're given a list of things to implement, if you don't get most of them done, you fail

This is all actual machine work as you'd actually do it in real life, no paper or question tests, real machines, real problems. It's the best certification system I've come across.

I posted at Perl Monks to find out what features of other programmer Certificates were good...

The common factor to all of them is that they are very, or completely, hands-on.

Plan of action

Perl is Huge! It has so many different uses, different modules and syntax. There is no way that a single certificate can declare competency. It has to be modular.

Larry hasn't said a lot about Perl certification, but what he has said is this:-

"CL: Some people seem to see the need for Perl certification. What do you think?
LW: I think someone else can do that :-) I'm not going to tell people whether they're certified or not. My approach to language design has always been that people should learn just enough of the languages to get their jobs done. They shouldn't have to learn the whole language to begin with. But with certification, you have to be learning the whole language. Some people feel more comfortable that way. I guess if you want to hire experts, you want to make sure they're experts. Certification is useful for that.

But most of the programming out there is not done by Perl experts. It's mostly done by Perl novices, and they sometimes make sloppy programs, that's ok. They learn by experience to do better over time and eventually they become experts and then, if they want to get certified and somebody wants to certify them, that's fine. I just don't want to do that myself."

Let's brake this down:-

"I think someone else can do that :-)" fair enough, I'll give it a shot.

"My approach to language design has always been that people should learn just enough of the languages to get their jobs done. They shouldn't have to learn the whole language to begin with."

I heartily agree. I believe one of the main problems with some parts of the Perl Community is that it's unfriendly to those hackers who are new, or only know the small part of Perl programming that they needed to get their job done. There is nothing wrong with this. In fact I think these people are some of the most valuable Perl Hackers out there. They are the ones introducing Perl into new businesses and new situations. They are the ones making companies realize that Perl can solve some of their problems and making them consider that Perl could do a lot more...

Why shouldn't a Perl certification system be graded so that Perl Hackers at this level could get some kind of recognition (albeit minimal)? All those job postings for Perl as a preference, if a minimal level of Perl competency was certifiable, wouldn't this help to beef those resumes with something meaningful? Why not have a level of certification which basically says "they are no expert, but they can hack together basic QnD Perl scripts"?

I think these minimal Perl hackers mean a lot. They are getting Perl into new businesses. It doesn't matter if it isn't the 'best' most 'efficient' Perl in the world, it's putting Perl into places it wouldn't have been, and that can only be a good thing, it's showing that Perl can solve their problems. The only objection to this I can see is that it might put off businesses if it's not great code, they might think Perl's not up to the job. To me this is just adds more to the argument for Perl Certification. Businesses can know that the code is only that of a novice Perl programmer, and the novice Perl programmer will know that they are just that, and that Perl from higher programmers is capable of so much more. Years ago when I was a purely self taught Perl programmer with no interaction with the community, I genuinely thought I must have been one of the best Perl programmers in the country. I was horribly wrong. But without any Perl learning structure how was I to know any better? The more Perl is used, the more companies can realize it's potential. The more they'll want better more experienced Perl hackers to achieve their goals.

This is exactly what helped Perl spread in the first place, and what has made PHP (Perl's inferior web replacement) so popular. Most of the PHP scripts out there are terrible from a coding point of view, but what businesses see is a language that their employees can learn relatively easily, that can do a lot of the things they need doing. When they find things aren't done right and need re-doing, most of them aren't looking for a new language, they are looking for new more experienced programmers.

" But with certification, you have to be learning the whole language. Some people feel more comfortable that way. I guess if you want to hire experts, you want to make sure they're experts. Certification is useful for that. "

With the current state of Perl, the core language is one thing. But CPAN has an ever more important role to programmers. For example the last edition of 'Advance Perl Programming' is based heavily on the use of CPAN modules. With a modular system you don't need to learn the whole language, but have the option to if you complete all of the core certificate modules. You can also have certificate modules for the most popular CPAN modules.

With a modular system you can quickly evaluate exactly which areas of Perl the programmer is familiar with. It would also be possible to evaluate whether the programmer has proficient knowledge and skills to adapt or learn the businesses or projects use for Perl.

"But most of the programming out there is not done by Perl experts. It's mostly done by Perl novices, and they sometimes make sloppy programs, that's ok. They learn by experience to do better over time and eventually they become experts and then, if they want to get certified and somebody wants to certify them, that's fine. I just don't want to do that myself."

I agree. New people making programs in Perl should be encouraged. I think more people should be giving Perl a try. From my experience you only need to get people to give Perl a chance, make a couple of little programs, and they'll get hooked. They'll make a lot of mistakes, but they'll learn and they'll get better. It really saddens me when I read posts in some Perl groups, where a newcomer is mocked or ridiculed or even insulted for asking questions about Perl. I've started the 'Free Perl Course project' to try and encourage people to pass on their Perl knowledge and get new people using Perl. I'm trying to set a friendly standard with Bristol and Bath Perl Moungers so that new Perl programmers can feel happy and comfortable to get involved with the Perl community sooner rather than later, and that they'll stay rather than being pushed away.

Also I'm trying to put together a 50 (about $100) perl donation program. Most Perl 5 programmers having been waiting a long time for Perl 6. We want to use it, we want it to be ready now. But how many of us are paying for it? Long have I personally wanted to be able to make a useful contribution to Perl 6 and Perl 5 development. The fact of the matter is you have to be a really good programmer in Perl and C, and have knowledge of the way many other languages work, to be able to make a useful contribution to Perl development. At this time I'm not that good a programmer (although I will be in the future :) ), so the other main contribution I could make is financial. I've been saying for years, as soon as I make a fortune I'll make a big donation, but it hasn't happened yet. I've thought of donating a little, but haven't because I couldn't see it making a difference. In fairness, it wouldn't make a lot of difference, but if we all did, it would make a lot of difference. How many Perl programmers are there? What if all of us gave just a 50 donation to The Perl Foundation? These days a night out or even just a meal for 2 (with drinks) can cost in excess of 50. Would it really be so much for each of us to sacrifice a night out or a meal for 2, just once so that we could donate the money to The Perl Foundation and help make Perl 6 a reality? I've started the ball rolling, I encourage every Perl programmer to do the same, see PerlDonate.com for more details.

The Solution

Breaking things down... At this stage I want to put forward the basic outline. I think we need to outline the beginning stages, the core modules, then the modules that grow from those... Then we can figure out the tests and how we can keep everything hands on, and make it almost impossible for candidates to learn cheat sheets, or do crash courses.

Here is my list (recently updated following another post at Perl Monks, Outlining levels of Perl people).

Basic User
Those that are capable of installing and running Perl scripts. (They know path to perl, permissions, uploading in ASCII, variables, config, installing CPAN modules, knows where to get help (PerlMonks, etc), etc, I think it's important to cover both Linux and Windows)
Advanced User
Those that are capable of reading and fixing problems with Perl scripts so that they may run. Understanding what problems are theirs and what are caused by a bug in the scripts. (Understanding perl error messages and how to correct them, being able to roughly read Perl code, understanding the need for \@ in double quotes or single quotes in variable config, installing tricky CPAN Modules such as those that require C libraries to be installed first).
Basic Coder Level 1
Those that are capable of writing basic scripts. (Using scalars, arrays, hashs, reading from writing to files. Understanding and being able to use the common built in Perl functions
Basic Coder Level 2
Those that are capable of writing basic system administration, automation scripts. Can use CPAN and DBI. (Searching the directory tree, piping to programs such as sendmail, reading output from other programs, DBI with DBD::mysql and DBD::SQLite).
Basic Web
Those that are capable of writing basic (but secure) CGI scripts with Perl. (Reading input from the browser, outputting to the browser, understanding web server ENVironment variables. Understanding the need for -t and how to screen user input to minimize hack attempts).
Intermediate Coder Level 1
Those that are capable of writing more detailed scripts and modules. (Good quality code layout and commenting following PBP, understand how to create and use modules, understands references and anonymous data structures, how to write automated tests).
Intermediate Coder Level 2
Those that are capable of writing more detailed scripts and modules using OO and more advanced database techniques. (Understands the main methods of creating objects with Perl, has a much better grasp and understanding of Regular Expressions and knows when it's better to use a Parser, good knowledge of SQL, knows when it's best to use flat file, understands the different types of DB systems, their benefits and drawbacks, transactions).
Intermediate Coder Level 3
Those that are capable of writing more detailed scripts and modules using C. (Knowledge of C and XS, knows when it should be used).
Intermediate Database Coder
Those that are capable of using more advanced database techniques.
Intermediate Web
Those that are capable of using the main web frameworks, FastCGI, mod_perl. (Understands and uses Catalyst, CGI::Application, etc. Can write extension modules for both. Must greater knowledge of security. See the benefits of FastCGI and mod_perl).
Advanced
...
Guru
...

I'm sure there is a lot of missed. But I think it's a good start. If we could work to outline these in more detail and work out a Syllabus then we can start designing the tests and testing environment.

Lyle Hopkins