I need to hire some Perl programmers to customize some of my products, and I'd like to use students from the local university. I don't need hot-shots, just sufficiently capable Perl programmers.

In order to determine a programmer's knowledge, without spending a lot of my time looking through their work product, I would like to conjur up a test, or better yet, find an existing test that indicates level of expertise.

Suggestions?

For example, is the test at BrainBench.com any good?

--lnl

Replies are listed 'Best First'.
Re: Perl Exam?
by cchampion (Curate) on Oct 20, 2003 at 13:04 UTC
Re: Perl Exam?
by ptkdb (Monk) on Oct 20, 2003 at 15:35 UTC
    There are quite a few people with Perl on their resumes whose capablities don't extend much further than "Hello World"

    Dead End Questions

    If they can't answer any ONE of these, they're going to be more trouble than they're worth(YMMV).

  • what does "use strict ;" do?
  • how do you access a list?
  • how do you access a hash?
  • write a subroutine
  • write a loop
  • write an 'if' statement
  • how do you use a package? Example, I want to use the FileHandle package.

    More Lenient Questions

    These you can offer them a pass on, depending on how many they miss and your content and confident with them picking it up as they go along.
  • how do you debug a perl program? (Note, not required to use -d or other debugger, there are many people who get along just fine with injecting 'print' everywhere.)
  • How many Perl books do you own?
  • What's the difference between 'local' and 'my'?
  • Write a package and create an object with it.
  • access a list within a hash, within a list. Of course there are many many perl questions you can ask. What you have to set is the "Tipping Point" where this person knows enough to get by for the task at hand. There used to be something called "The Perl Purity Test," but that leaned towards saint level skills.

    One thing I've often HATED in interviews is that years and years after writing code in emacs, someone gives me some complex issue to solve in code and asks me to write on a white board.

    Not wishing to perpetuate such evil, my answer to that has been to write some 'busted' code on a white board sometime before the interview and then at some point ask the interviewee to look at it and tell me what's wrong.

    Take a laptop, with perl installed, and putting some pieces of simple and perhaps not so simple perl code on there, broken or not, and asking the interviewee to fix it or tell me what they think it's supposed to do; giving them time alone to do so.

      A little concern.

      Would you consider it mandatory to have explaination for the items that you use to be a good programmer for 'this' need? For example what if the candidate doesn't know exactly what is the purpose of 'use strict' but always uses it in the program to avoid any messages.

      Would you hire a programmer 1. having good practices ie.. using knowledge for programming advantage, or 2. expert in theory to which programmer may not be capable of converting it into practice.

      In my opinion many of the 'know how' is not readily transferable to information. But for human being it can be easily seen by someone having similar or better knowledge.

      artist
      ===================================================
      Perl is fast.. So I spend more time doing fast things

      How many Perl books do you own?

      Does this really matter? I own no Perl book, but I'm not Perl-ignorant.

      There is a lot of free on-line Perl documentation, and it is more than enough to become a good Perl coder. If owning a book means anything, then IMHO, it means that you don't like screen reading. And that's not positive: you better get used to reading the stuff on the screen, because that is where your code is going to be.

      Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

        How many Perl books do you own?

        Does this really matter? I own no Perl book, but I'm not Perl-ignorant.

        Ignoring the issue of hardcopy versus onscreen(for now), I would ask this question as an indicator of professional commitment. However, in retrospect, I might not ask it on the hypothetical test because it's far too easy to lie about it, and judges historically have turned me down for the search warrant.

      ptkdb-

      Yes, this is like what I had in mind. But I want to make it a written, multiple choice exam, so I don't have to sit there asking the questions or reading code.

      I'd rather assess other issues than technical ones when we are face-to-face.

      --lnl

        It's certainly possible to write such an exam, perhaps even put it into some HTML or even CGI format to check results and mail them somewhere, or just something that prints out well.

        If such a thing already exists on line, such as 'brainbench.com' it's probably going to cost some money to take it. Who's going pay?

        Any of the monks here could probably write a half decent test in probably under an hour, and then spend the next two weeks debating the merits of various questions.

Re: Perl Exam?
by jacques (Priest) on Oct 20, 2003 at 13:18 UTC
    Good luck finding them at the university. Java is by far the most widely taught language in colleges, with C++ a distant second. Try the local Perl mongers.
Re: Perl Exam?
by Abigail-II (Bishop) on Oct 20, 2003 at 14:41 UTC
    I don't need hot-shots, just sufficiently capable Perl programmers.
    I guess that says it all. What's 'sufficiently' capable is very subjective. For most of the jobs I've had, if I were to hire a sufficiently capable Perl programmer, it would have be fine if (s)he had not even heard of the Web.

    But I can imagine for many jobs, not knowing Web basics doesn't classify one as "sufficiently capable".

    Abigail

Re: Perl Exam?
by tilly (Archbishop) on Oct 20, 2003 at 18:39 UTC
    Let me translate what you said into what I heard.
    I want to hire cheap talent. I don't want skilled people, just peons who can do as I say and not cost a bundle.

    I want to put little energy into finding these peons. Is there some test I can give to do my work for me?

    Suggestions? Perhaps Brainbench?

    That may be unfair, but it is what I heard. And if the shoe doesn't fit, then please rest assured that there are many employers for whom it does.

    Here is my answer.

    A classic problem that management has is underestimating how much they are wasting in the long run by making short-term decisions. While a cheap programmer can get the job done, it won't be done as reliably or as fast as a good programmer would do, and having been done shoddily, further modifications will be likely to cost you more down the road. (Although to be fair, it is hard for most employers to tell good programmers from bad ones...)

    But if you want to take this path, then brainbench probably is what you are looking for. I took their Perl test a few years ago on a lark. Based on that I would say that someone who manages to pass that test without cheating probably does know Perl. However a lot of what is tested is probably going to be irrelevant to you. If you have far more candidates than you need, and are willing to weed them down to technically capable ones on a somewhat arbitrary criteria, that will likely do it.

    It won't tell you anything about that person's work habits, what they know of good software practice, or how you will get along with them. You know that. My experience is that it doesn't take much looking through code that a person wrote to tell a good programmer pretty quickly that person's general skill level, and also something about what that person knows of good software practice. Of course that requires a good programmer, which is kind of a chicken and egg problem.

      While I understand your perspective Tilly, my own experience in hiring programmers leads to me to believe that tests are *required*.

      Too often, education and experience show a very small part of the picture. When giving simple tests, I've seen people with impressive resumes fall *way* short. To the point that I am truely frightened.

      This is not true of just finding developers who know perl, but also Java (perhaps more so), C++, and even sysadmins.

      The sad fact is that the majority of people currently employed doing technical work simply walk through work in a deep dark haze. They try this, that and the other thing, until it sort of works, not knowing why. They copy and crib (not that that's always bad) without understanding what they're copying (that's bad, IMO). I don't believe this is isolated to technical professions, it is true of here too.

      You have to realize that most management types simply do not have the skills and knowledge base to make reasonable assessements of a programmers skill level. For those people, tests are the only way they can assess how well a person knows a given skill.

      Should a perl interview test be hard? Of course not. It should stupid simple. The kind of test where if someone misses a few questions you have to seriouslly consider that they either a) lied or b) have brain damage. The kind of test you could pass by skimming an intro book to perl the day before the exam.

      Sad fact is that I'll bet more than half of the people you interview won't pass such a stupid simple test. Such is life.

        Indeed.

        I'll bet that the failure rate is closer to 2/3 than 1/2.

        Question 1 at (OT) Interview questions -- your response? is based on a conversation that Ovid and I had where I described an interview question that I actually use. (Ovid translated it into pseudocode, and omitted the statement that each array can be assumed to only have unique elements.) I generally ask that question in Perl, and stand ready to explain any language construct that the other person doesn't understand. I further walk them through a 3-part question, first is to describe what it does, second is to figure out the performance, and then third is to come up with an approach (code not required) to solve the scalability problem.

        About 2/3 of people I have interviewed (all purportedly experienced programmers, etc, etc) fail that test. No halfway competent programmer of my experience (tested on friends, co-workers, etc) has found it hard. (Several have been puzzled about where the challenge is supposed to be.) Knowledge of Perl does not appear to make much of a difference, even though I give the question in Perl.

        And here we come to what I consider a critical point. I think that Perl experience only really matters if you want someone to hit the ground running in a very Perl-specific environment. If you use a mix of languages, then while you might like Perl, you don't necessarily want to insist on it. Looking for that is somewhat harder.

        Incidentally for perspective on why companies find hiring the right person so hard, read Anne Learns To Recruit. :-)

Re: Perl Exam?
by scrottie (Scribe) on Oct 21, 2003 at 08:05 UTC
    Oh boy. You hit a nerve here, probably unintentionally.

    If you were hiring a gardener, would you would find someone acceptable who doesn't know the difference between annuals and perenials? If you were hiring a bank security guard, would you waive the drug test so that you could save a dollar an hour off their pay? If you were hiring a grade school teacher, would you neglect a background check for sexual misconduct? If you were hiring an electrician, would you pick up some guy on the street corner who graduated high school changed flourescent bulbs before? No, you wouldn't, not unless you're very short-sighted, negligent, irresponsible, or stupid.

    Some attitudes towards computer programmers:
    • They work magic
    • Or, alternatively, they're dumb kids who just happen to know a little bit about how computer works
    • Computers are hard for some people and not others
    • The younger generation is good at computers
    • Computer people are all interchangeable
    • If you're not happy with how things are going, you can just work them harder
    These attitudes are based on myths. Trying to follow these myths will frustrate them and will harm progress towards your goal.

    I've seen it again and again - someone who should know better hires the wrong guy (or even the right guy) because they find some kid who fits their stereotype of the computer genious. Good vibes all around, everyone is excited about the project. After a month or two of no apparent progress or a few prototypes that don't look like what you want, things start to get tense. You start to doubt your guy because you have lingering doubts about your ability to pick someone. You know you could be being taken advantage of, so you strugle every day with the question of whether this kid is taking advantage of you. You turn up the heat on him, demanding more and faster, to keep him from getting away scot free with bilking you. Eventually, he quits for a better job, or you cancel the project or more often, fire him and bring in someone younger, leaner, and cheaper, and repeat the whole progress even more spectacularly. Meanwhile, consultants don't feel like they can tell you how error prone and grueling and exacting the software development process is because they don't want to be labeled a hack and they don't want to ruin the good vibe that each project starts out with.

    If you're at the doctors with horrible pains, you don't dismiss him for an intern if he says that he will have to do surgery and it will cost a lot and there will be a long recovery. People have serious control issues when it comes to programmers - they don't understand the process, but they don't understand exactly how little they understand the process (see the bullet list of dillusions above), so they tug on the reigns when they should be staying the heck out of it.

    Yes, I'm getting around to an answer to your question. I just needed to post some background to the problem first, since the scope of the problem seems to have been missed.

    The solution is (if you haven't guessed) is to:
    • Find someone who is serious about their profession
    • Takes a stand on technical and management issues and keeps the project on track even when you're confused - personality is important

    On the first point, someone who is active in the community, has gone through college and studied advanced topics while they were there, has their name spread all over the Internet when you search google for it, and/or was already writing software before going to school is what you're after. This is a better test than some quiz in some ways, but people lie and play the system, so a good minimum compentency test is helpful too. Brainbench is too easy to cheat on. Reading part of perlfaq (perldoc.org) and quizzing them from that verbally should do the trick.

    After you find this person and put them to work, leave them alone. Get a second opinion from a trusted source if you must - and more people should do this far more often - but don't harrass them out of fear or boredom.

    Perhaps I'm overly cynical, but I've seen far more mismanagement, aborted efforts, amaturely written code leaving a time bomb that always goes off sooner or later, and time and energy wasted on politics, power plays, and second guessing.

    I hope this helps. I'm sure there are other good suggestions in other notes in here - this doesn't attempt to second guess them.

    -scott
A reply falls below the community's threshold of quality. You may see it by logging in.