Growing Perl Developers

This video is in English.
Length: 51:23
Source: YAPC::NA 2014 on the 2014-06-23.
Speaker: Nicholas Perez (nperez)
abstract

The sound and the video is broken between 2:38-3:58 , please skip that part. The actual talk ends at 25:20 and then it is QA.

We hire lots of really smart people that really know software development, architecture, and scaling critical systems. There is one thing that many of them don't know and that is Perl.

How does an organization such as Booking.com tackle this challenge? In this presentation I'll share our process on growing our own Perl developers, including our successes and our lessons learned.

Some notes

  • 3,000,000 lines of code.
  • Daily stand-ups in the morning hours.
  • Give them important tasks immediately.
  • Let them deploy in the first week, or even in the first day.
  • Have seatbelts so they don't hurt themselves when they crash the car.
  • Face-to-face communication.
  • 2-1 the Non-Perl - Perl ratio of new hires.
  • "We don't hire junior programmers, unless they have Open Source experience."
  • Abigail sits in the front row and provides frequent commentary.

  • Why Try::Tiny is slow.

    # Here is a way to get consistent error handling using eval which is
    # much faster than using a module like Try::Tiny. The 'trick' is to
    # inspect the return value of the eval block and base your error
    # handling around it instead of relying upon $@ which can have
    # clobbering issues.
    #


    eval
    {
        # do stuff that might fail like division by zero
        1/0;

        # return true to indicate success
        1;
    }
    or do # this next block executes if the eval didn't return true
    {
        # gather the exception as soon as possible. Might already be eaten
        # so having a default like 'Unknown failure' gives you clues.
        my $error = $@ || 'Unknown failure';

        # handle the exception
        ...

    # Take note of the semi-colon, it is required unless this statement is
    # already at the end of a block
    };

See this stackoverflow answer for more details.