The most fundamental point that I think that programmers need to learn is how to build on existing work. That is, how to build on their own work, how to build on other people's work, how to write work that others can build on. While there are many skills that programmers need, I think that this one, more than any other, is the lesson that I want people around me to know.

This skill leads to better programs with fewer opportunities for bugs that can be written more quickly. And if you are working on the same kinds of problems for a while (which people often do), it leads to ever increasing productivity for the team.

This is the lesson that I want people to learn from using modules. First of all, using modules written by good people requires learning how to use what other people wrote. If you read the documentation you will often get useful programming tips. Furthermore if you think about the API chosen, and how you might do it differently or why it was done like it was, you have excellent examples to learn from and aspire towards for figuring out the APIs that you create. And when you can try to read the source to those modules, you will learn even more.

Now it is true that simple end users will not do all of that. There are definitely people who can accomplish tasks through cut and paste techniques using CPAN. I don't think that such people get the full benefits of the modules. But at least I can console myself with the fact that they produce better programs with less work than they would without the module.

And for people like me, while I might have learned more about, say, http by writing my own version of CGI, I learned more about programming from reading and thinking about the documentation of modules and Perl than I would have ever figured out from handrolling solutions to a million problems which are readily solved by an existing module.

So I don't see the cry of "CPAN" as just encouraging cut and paste and discouraging the emergence of future gurus. Instead I see it as making people more productive now, and shortening the path for motivated ones to aquire real expertise.


In reply to Re (tilly) 1: The Module Mantra by tilly
in thread The Module Mantra by tachyon

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.