Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Learning by doing.

by Yzzyx (Beadle)
on Oct 12, 2005 at 13:34 UTC ( [id://499479]=perlmeditation: print w/replies, xml ) Need Help??

I've been working through a lot of these problems:

http://www.inf.bme.hu/contests/tasks/
http://dinsights.com/POTM/oldproblems.php

While they are fun, they are more a test of my math skill than my Perl ability. While I freely admit my math needs a bit of work, I'd like to spend a little less time on math and more time on Perl. Right now those problems feel like 95% math and 5% code to me.

Any time I try to code a real hard project I get in over my head very quickly, so I am looking for something that is kind of in the middle, or something that is easily broken down into bite-sized chunks. I'm at the stage where I think I could code a magic box that returns a certain value given a certain input, but my brain seizes when I have to consider a giant complicated problem. I expect that over time my ability to deal with more complicated situations will improve.

I have some free time over the fall and winter so I'd like to accelerate my learning process by actually doing something "productive" and "useful". In an ideal world I'd find a mentor on some big Perl-based open-source project to learn from, but I doubt anyone has the time to deal with a new guy like me. Most of my learning so far has been getting familiar with the tools and learning where to find answers. None of the projects I have done so far has exceeded 100 lines.

I'm very willing to research things and invest some time into this. Fortunately, I'm not under pressure to learn Perl in 21 days, in order to find a job. I don't even work in the programming or computer field. This is just a (serious) hobby for me. I'd just like to take maximal advantage of any time I invest. A site that has a full problem specification, and links to how people have solved it in the past, maybe with incremential tips, would be very interesting.

In the past I've picked up a quite a few skills just by jumping into a project with a "sink or swim" attitude. While I am not an expert in any particular one of those skills, I manage to do okay. I haven't found anything that I can just jump into for Perl, yet...

Anyways, any suggestions for Perl-related mini-projects or volunteer work would be greatly appreciated. Thanks!

Replies are listed 'Best First'.
Re: Learning by doing.
by xdg (Monsignor) on Oct 12, 2005 at 13:44 UTC

    You might consider getting involved in the Phalanx project, which encourages volunteer effort to increase test coverage. You'd get practical experience writing code for tests, as well as getting exposure to how other people approach more complicated problems with Perl.

    Otherwise, I'd suggest picking a micro-project that has meaning for you. Write a program to parse a log file, or aggregate RSS feeds, or send you a reminder list for birthdays of your friends and family. If these are too "easy", then step up to more complicated things. Search around your electronic life for things that are repetitive and see if Perl can help you automate them.

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Re: Learning by doing.
by itub (Priest) on Oct 12, 2005 at 16:14 UTC
    Don't be afraid to reinvent the wheel. After you reinveint it, look for other implementations of the wheel and compare them with yours. That can very be educational.
Re: Learning by doing.
by GrandFather (Saint) on Oct 12, 2005 at 20:43 UTC

    Browse SoPW for questions that you think you can answer and write the code - even if you don't post it. You can use other answers as a crib. Do the same sort of thing with Cool Uses for Perl.


    Perl is Huffman encoded by design.
Re: Learning by doing.
by radiantmatrix (Parson) on Oct 13, 2005 at 19:26 UTC

    Pick an 'easy' problem. Say, loading a CSV file with your expenses in it and producing a short report of aggregate amounts ("I spent $500 on beer this month?!"). Then add features. Little ones.

    Maybe the next step is to highlight high values. Maybe you build a simple database with DBD::SQLite2 so that you can track changes in expenses from month to month. Maybe then you dump your summary report back to a CSV file. Or display it in a Tk widget.

    I found the best Perl advice I got was to port simple UNIX commands to Perl (it's been done, but doing it yourself teaches you tons!). For example, make a Perl program that does everything *NIX's ls does. You can start with the basic functionality, then add each feature slowly (bonus points for putting each feature in a module).

    Exercises like this will get you familiar enough with how Perl works (even some of the quirks) that you can start on bigger things. Look for CPAN modules with known bugs or that are asking for feature enhancements. See if you can fix/add to those modules. Then you get the added advantage that the author will provide you feedback about your patch if it needs improvement. That's very much like a mentor relationship.

    <-radiant.matrix->
    A collection of thoughts and links from the minds of geeks
    The Code that can be seen is not the true Code
    "In any sufficiently large group of people, most are idiots" - Kaa's Law
Re: Learning by doing.
by artist (Parson) on Oct 13, 2005 at 05:01 UTC
    I have two projects in mind

  • Study CPAN and tag Modules, such that any two module should differ by atleast one tag.
  • Tag the Perlmonks Nodes.
    --Artist
Re: Learning by doing.
by aufflick (Deacon) on Oct 14, 2005 at 00:54 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlmeditation [id://499479]
Approved by theorbtwo
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (5)
As of 2024-03-19 09:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found