As a UNIX admin I spend a fair amount of time utlilizing Perl for various tasks. As time goes on I have these "Ah-ha" moments and things are becoming clearer to me. Lately I have been much more interested in Perl programming than actual UNIX administration. For me it seems to be a logical jump, yet I have a great deal to learn. several years ago, I got my first UNIX admin job - I admit that at the time I was certainly no "expert", and jumped head first into my admin career. Though I am probably not ready to start looking for jobs as a Perl programmer - at what point of the learning curve would someone take a job? If I am proficient in a, b, c am I ready? Or should I be proficient in a, b, c, d, e, f, and g... Or is it logical like admin work when starting one is certainly not an expert, but the talent is there.

I am just curious what opinions folks who have made similar transitions or who have thought about doing so may have.

Ted
--
"That which we persist in doing becomes easier, not that the task itself has become easier, but that our ability to perform it has improved."
  --Ralph Waldo Emerson

Replies are listed 'Best First'.
Re: perl programming for a living
by leriksen (Curate) on Jun 24, 2005 at 23:59 UTC
    I know this kind of topic has been covered several times by others in the Monastery, but as I just finished helping students from my old school with a careers counselling night, I'll pass on the same advice.
    1. It takes a long time to be a 'good' programmer. The skill sets required are not just mastery of the language and syntax - there are a lot of concepts like algorithms and data structures, testing, analysis and decomposition, abstraction - I could go on.
    2. The best way to learn these is to write code and read other peoples code - preferably code written by those recognised by others as excellent coders, but reading really crappy code is illuminating too (from a 'ok, dont do that' perspective)
    3. Look for opportunities in your work to solve problems programmatically, rather than using your SA skills - automation, notification, that kind of thing. If opportunities at work for that are limited, read the questions posted here and try to replicate and solve peoples problems. Initially you'll just be able to say 'I can see it doesnt work', but soon that will start to change to 'I can see _why_ it doesnt work'
    4. Add general programming texts to your reading list - I'd recommend "Generic Programming and the STL", "Design Patterns", any non-language-specific book on algorithms and data structures (I love Introduction to Algorithms but it is not a simple text - try a college library first to see what appeals to you). If there are any experienced coders at your work, see what they recommend. I love the Dragon book too (Aho,Sethi and Ullman), but it too is not simple
    5. The perl books you must have to help you program perl better are the CookBook, Damian's OO Perl, MJD's Higher Order Perl, and from what I've seen, Damian's Perl Best Practice when it finally comes
    6. join your local Perl Mongers, if thats practical
    7. read some of the general programming mediatations here - brian_d_foy,merlyn,TheDamian,tmoertel,tilly,Juerd,Abilgail-II are names worth focussing on - your own list of knowledable people and trolls will grow over time.

    There are many other things you can try - but perhaps a few hours fishing for links here is the best way - you never know what you'll catch - sometimes something good, sometimes bad

    The most important thing though - if you find that programming is your passion, pursue it. Whatever your passion is, pursue it. Lifes too short to spend it doing things we're not really interested in.

    HTH

    update: fixed isbn link

    ...it is better to be approximately right than precisely wrong. - Warren Buffet

      A few replies to your points, most of which are sound ...
      1. It takes a considerable chunk of time to become a good programmer. It takes a lot less time to become a competent employable programmer. I'd suggest that syntax is not particularly important. Testing, analysis, decomposition and abstraction should come easily to the OP, given that he is a sysadmin.
      2. I got in to perl programming by bugfixing and tweaking stuff from Matt's Script Archive. Fiddling with hideous code is IMO quite a good idea, as it teaches diagnosis skills that you are less likely to exercise when dealing with good code, or even with your own code.
      1. Your book recommendations look to be the sorts of things that might be suitable for a CS course or for a more advanced programmer looking to get some theoretical grounding for his practical knowledge, but not for someone just starting out. I recommend Dave Cross's excellent Data Munging With Perl which despite its name is really not about perl at all, it just uses perl for the examples.
Re: perl programming for a living
by 5mi11er (Deacon) on Jun 24, 2005 at 21:07 UTC
    I think it depends on lots of different things. Until you've done work in, say web backend programming, you probably shouldn't persue a non-entry level job doing that task. The same goes for the various disciplines that are out there.

    On the other hand, once you've shown that you can tackle pretty much whatever's thrown your way, then the walls between different tasks tend to disappear, and you become an experienced "senior" type guy.

    On yet another wavelenght, jumping in with both feet and being willing to be "under water" for a while is generally a very good way to learn any task.

    -Scott

Re: perl programming for a living
by Codon (Friar) on Jun 24, 2005 at 23:58 UTC
    My experience has been that SysAdmins generally approach Perl to solve daily task automation problems. Perl is great for this. Perl also allows for so much more than that.

    The basics that everyone who uses Perl more that casual dabbling should know are libraries and modules for code reuse and algorithm standardization. Once you know how to work well with these, you can explore OOP. OOP is more than just package creation for the sake of package creation. OOP gives you rich inheritance capabilities and allows for simplified designs and interfaces which can easily fit into much larger projects. I've seen good OO and I've seen bad OO. When you work with good OO it can make bad OO seem really bad. Of course, this is not to say that everything should be done in OO. Perl is not Java. :-)

    That said, learn the advantages and disadvantages of OO design. This subject trancends Perl programming and goes into general programming practices.

    Ultimately, what you need to know will really depend on what you want to do. Do you want to head into the world of web programming? You will need to know various templating technologies. Do you want to work on backend data-driven applications? DBI is your friend (and occasional enemy). Define your realm and the tools you need to learn will become apparent.

    Good luck with your pursuit into Perl programming. Remember to always think "How can I generalize this just a bit more so that I can re-use it over there, too?" That question can be the difference between enjoying your product and hating it.

    Ivan Heffner
    Sr. Software Engineer, DAS Lead
    WhitePages.com, Inc.
Re: perl programming for a living
by merlyn (Sage) on Jun 24, 2005 at 21:38 UTC
    If I am proficient in a, b, c am I ready? Or should I be proficient in a, b, c, d, e, f, and g...
    I'd definitely consider waiting until you're good at a, b, c, d, e, and maybe f.

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      Actually, I was reading Effective Perl Programming: Writing Better Programs With Perl, and that author seems to think that d isn't important at all, but e really is.

          -Bryan

      Ok, I lied, I never read that book. Unfortunately I haven't actually had the priviledge of reading any of this author's books

Re: perl programming for a living
by grantm (Parson) on Jun 24, 2005 at 23:57 UTC

    I started my IT career in hardware support, moved to Unix OS support (for a vendor), crossed over to doing sysadmin and finally moved into development. I think that my background in support has been extremely valuable. Knowing how to deal with end-users, understanding their problems and building and integrating solutions that are maintainable all flow naturally from that background.

    As a sysadmin, I found there were plenty of opportunities to develop solutions that delivered significant time savings both for me and my users. Once I had a few of those under my belt, I felt confident enough to take on a development role. Luckily I found an employer who was prepared to give me the chance to prove myself.

    There's no magical level of attainment that you have to reach first. When you feel ready to make the move look for the opportunity. Of course you may need to start in a junior role.

Re: perl programming for a living
by NateTut (Deacon) on Jun 24, 2005 at 21:36 UTC
    I try to be proficient in something seen as valued in the marketplace (i.e. databases) then I use Perl to make doing that easier.

    I find that business types are afraid of Perl and Open Source in general. They don't get how something that is "free" can possibly be better than the high priced M$ crap.
Re: perl programming for a living
by TedPride (Priest) on Jun 25, 2005 at 07:34 UTC
    A good web designer needs to know graphic design, HTML, CSS, Javascript, mySQL, PHP, and Perl, all distinct subjects, but he doesn't necessarily have to be a master in any one of them. I imagine most site admins are in more or less the same situation. A Perl programmer, on the other hand, being in a much more specific job, will be required to have advanced skills in Perl. Assuming you don't yet have those advanced skills, you can either (a) pick a job that uses Perl but doesn't focus solely on it or (b) apprentice yourself to a really excellent Perl programmer and work your way up. Or you can do consulting work and hope you get paid before someone smarter than you looks at your code.
Re: perl programming for a living
by arc_of_descent (Hermit) on Jun 25, 2005 at 19:01 UTC

    I'd advice you to jump right in, but not before you learn a,b and c. And since you are already using Perl in your current day job, you can set aside some time (not your employer's) for learning essential Perl skills. Next you could apply for a job which would require intermediate Perl skills (are there any out there?) You'll learn on the job. I believe thats one of the best ways to learn something new. Dive right in!

Re: perl programming for a living
by artist (Parson) on Jun 24, 2005 at 21:12 UTC
    You have 'utilized perl' rather than programming. You might just have to set the programming mindset and you are all set.
    --Artist
      You have 'utilized perl' rather than programming.
      I guess I'm not clear on the difference. In my mind, programming is telling the computer to do what I want it to do. Whether that's a system administration task, data munging, web application, or whatever. Not flaming, but where are you drawing the distinction between utilization and programming?

      thor

      Feel the white light, the light within
      Be your own disciple, fan the sparks of will
      For all of us waiting, your kingdom will come

        I guess I'm not clear on the difference. In my mind, programming is telling the computer to do what I want it to do. Whether that's a system administration task, data munging, web application, or whatever.

        I myself make that distinction - I guess its because I am and consider myself a sysadmin and not a programmer, although yes I do program, its not my primary function - maybe once I can get my head around that, I can move on - not necessarily professionally, but functionally.

        Ted
        --
        "That which we persist in doing becomes easier, not that the task itself has become easier, but that our ability to perform it has improved."
          --Ralph Waldo Emerson
        Utilization is using something.

        Programming is making something, so it can be useable.

        --Artist
Re: perl programming for a living
by aditya.singh (Acolyte) on Jun 27, 2005 at 09:28 UTC
    Which one of the a, b, c, d, e, f, and g do you really like? If it is p,e,r,l then you made a good choice.

    Become a Guru in something you truly enjoy but be prepared to learn new things in case your area of expertise doesn't get you the happiness it should.