I disagree, to an extent. Some languages evolve. ANSI C hasn't changed enough to affect seriously affect anyone who wrote C 15 years ago. 6800 assembly is still 6800 assembly, 18 years later. Fortran-77 is still what it was.

More complicated languages have a tendency to evolve, such as Perl, C++, Python, etc.

Are you going to tell Brian Kernigan he hasn't mastered 'C'? Or Strousup on C++? How about Charles Moore on Forth?

Mastering a language is comprised of several pieces. One piece is that basic grammar of the language. C has a simple grammar, as do most assemblers. Forth has a *very* simple grammar. Yet, simply mastering the grammar doesn't make you a master of the language.

Mastery of a language is being able to clearly accomplish a goal, with a minimum of waste. A shorter program doesn't always mean that the author is a better master of the language than a longer program. I may write a very simple one liner that solves a problem, but it may not be efficient, well documented, etc. A master of a language uses idioms, styles, and documentation that allow subsequent users/maintainers of the program to understand what is going on. One only has to look at some of the by the more famous authors on CPAN to get a feel for this. The code may work, but it's not necessarily well documented (in fact, this is one of the biggest weaknesses of these aforementioned people. Dog help us all if the author of CGI.pm ever gets hit by a truck).

Mastery involves knowing *how* to apply your knowledge of the langauge you know to solving the problem. An incomplete understanding of the language or the problem can yield inefficient or incorrect results, indicating that you are NOT a master.

In fact, the more I think about it, the less I believe in the concept of mastery of a language. I can make a 8051 stand up and beg, and write really honking tight code, but I can't write a 'C' compiler in it. Mostly, because I'm not skilled enough. But I have really tight fast serial drivers that many people have used. Does that make me a master of 8031? No, I don't think so. I'm good at implementing the problems I know (or can figure out) how to solve with that toolset.

Rather, I think people who exhibit "mastery" of a language are in fact, simply good programmers. They know enough about the language to solve the problem, enough about the problem to generate a solution, and it's tested, documented, and presentable to the world at large. The two are inseparably combined. You can't have a worldclass programmer who can't write code (those are called theoreticians, and hand algorithms to programmers), and you can't have a programmer who doesn't understand the problems, or he has no way to implement anything he understands (those are called quota-hires).

A good programmer knows what the language is capable of, and knows how to put that knowledge to use solving problems. S/he knows that it's a trade off between readability (inherent to the coding style), documentation (which is affected by the coding style), and efficiency. Some people are better at exploiting the full capabilities of a language than others, some people are better at solving the problems. And the people who can do both get paid a helluva lot.

My $0.02 worth.

--Chris

e-mail jcwren

In reply to (jcwren) Re: (2) Master in Perl? by jcwren
in thread Master in Perl? by Beatnik

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.