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

Comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

Now, I tend to be a fairly rabid fan of the Pragmatic Programmer book and/or approach. I've adopted most of the techniques in their eponymous book, and it's made me a better hacker. But I don't buy the advice: "Learn at least one new language every year" (p. 14).

I can't think of any language that I've been competent in after a year. C? (Hell no.) Pascal? (Er, did I just admit to knowing Pascal?) SQL? (shudder) Java? (Pshaw.) Common Lisp? (Not even close.) Prolog? (I'm still not competent in Prolog.) Perl? (Well, I was sort-of competent in C at the time, does that count?) Scheme? (Still writing defun, and it's been three years.) Haskell? (What's a monad?) I've been hacking C for a decade or so, and I'm far from C-guru status. Why should I expect to get far after a year of study?

Not counting assembly languages, shells, and one scripting language that shall not be named, that makes nine languages that I "know". After a year's experience with each language I hadn't even scratched the surface of what that language had to offer.

That might've been different if I'd been using the new language exclusively for a year, but who can devote a year's worth of programming to learning an unfamiliar tool? I'm in a better position than most -- I'm a grad student, with flexible deadlines and a tolerant supervisor -- but I'm mostly interested in using the right tool for the job, not in advancing my skills with a nifty language unconnected to my job. I have a feeling that most programmers, Pragmatic or not, are in an even worse position when it comes to learning the ins and outs of a new language - and especially developing a new point of view on programming, which IMO is the best reason to learn a new language.

Not that I think we should stick to the languages we know (although they deserve brain-time, too). Of course we should learn new languages, especially languages that break our brains in useful and creative ways. I know C, C++, Java, and Perl. Learning another procedural/OO language (Objective C is on my hit list) isn't likely to teach me anything world-shatteringly new. Learning a stack-based language like FORTH (or perhaps more usefully PostScript), on the other hand, would probably be a decent idea. (That's on my little list, too.)

I just think that the "one a year" timeframe is misleading. Unless you devote an impractically large chunk of time to that new language, one year isn't enough. Ten years might be closer to the truth. (Who knows? Maybe nine years from now I'll grok continuation-passing style in fullness.) Start learning a new language a year (or every two or three), but don't expect real results for at least two. Crank up a pipeline.

While we're at it, I don't think we should be focusing on languages. Rare is the language that's conceptually different from every other computer language with an open-source cross-platform implementation. Concepts are more important than languages, hands down. It doesn't matter whether I write closure-slinging functional code in Haskell, Common Lisp, OCaml, or Perl, I can express what I want to regardless. The idea of closure-slinging is what's important, not the implementation language.

Programming languages, especially programming languages that teach you something you didn't already know, are too complex to be properly learned in a year. Programming, in general, is hard. Let's keep that in mind.

Edit 2004 Oct 7: Fixed the PragProg link. What's that preview button for, again? sigh

F o x t r o t U n i f o r m
Found a typo in this node? /msg me

In reply to (OT) "Learn one new language every year"? Yeah, right. by FoxtrotUniform

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, 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, 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.
  • Log In?

    What's my password?
    Create A New User
    [choroba]: Especially the "Real Time" link
    [choroba]: I can confirm it shows a lightning at the moment it strikes

    How do I use this? | Other CB clients
    Other Users?
    Others avoiding work at the Monastery: (9)
    As of 2018-05-23 21:43 GMT
    Find Nodes?
      Voting Booth?