Popular conceit about learning programming languages

Michele Simionato mis6 at pitt.edu
Thu Nov 21 11:38:24 EST 2002


mertz at gnosis.cx (David Mertz, Ph.D.) wrote in message news:<mailman.1037841160.17387.python-list at python.org>...
> Carl Banks <imbosol at vt.edu> wrote previously:
> |Try two or three months [to learn Common Lisp], at worst.  A competent
> |and experienced programmer can probably learn a language like Common
> |Lisp in a couple weeks in their spare time.
> 
> There's a strange phenomenon with programmers, especially (but not
> exclusively) ones who are attached to one or a couple favorite
> langauges.  They claim--rather persistently--that someone/anyone can
> learn their language in an absurdly short time period.
> 
> Sometimes it is "a few hours to pick up the basics of Python;" other
> times "a couple weeks to master CL;" or occasionally "a few months to
> become an expert in X."  All these claims are quite literally
> unbelievable... and yet they come up over and over from every advocate.
> 
> The funny thing about all the claims is that they are enthymatic
> contrasts with all "those other languages."  The writers apparently
> expect readers to have a realistic sense about how long it takes to
> learn most programming languages (months or years), so the silly claim
> about <favorite-language> is then drawn as such a strong contrast with
> that.  But as soon as anyone explicitly STATES the claim that
> <non-favorite-language> actually takes -many- months to learn, the
> optimistic "days" for <favorite-language> appears as an absurdity rather
> than a language advantage.
> 
> It's a funny structure... sort of like what ordinary language
> philosophers (Grice or Dummett, I think) call "essentially accidental"
> events.  But this is "essentially implicit."
> 
> Yours, David...
> 
> P.S. I'm a pretty smart guy, btw.  From kindergarten through doctorate,
> I always learned things faster than just about everyone around me.  I
> remember more than almost anyone I know.  Everywhere I've worked as a
> programmer, I've been pretty much the best one at the site.
> 
> And you know what:  I CANNOT learn CL in a couple weeks of my spare
> time.  I've spent more than that, and understand little about it,
> really.  When I first learned Python, it took me much longer than a few
> hours to pick up even the barest essentials.  And when I have programmed
> with languages fulltime for several years, I continued to learn new
> things about them after those years.

I think the problem is with the definition of "learning".

It is true that you can read the Python tutorial in couple of hours,
"understand" most of it and start immediately programming in Python.
In a couple of days you can also write some non-trivial program (I wrote
my first non-trivial program with Python within a week, working on my
spare time). But this does NOT mean that you have learned Python. You 
have only learned the syntax: what you are doing is to mentally translate 
from the other languages you already know to Python. The understanding
of the syntax can give you a fake sense of "power", in the sense that
it seems to you that you have learned the language but it is NOT so. 
It takes a much longer time to become to *think* in Python. I started 
six months ago and I am still in the process of adapting my way of 
thinking to the language. This is much harder than adapting the language 
to your way of thinking. But eventually you must do it if you really 
want to understand the language. One of my professor of Physics once
said "students shoul remember that learning is of a process of inelastic 
shock". He meant that students should not look for magic shortcuts; 
learning is *hard* since it modifies your mind and after you have learned, 
your mind is not the same as before. Conversely, if your mind is the same 
as before, then you haven't learned anything of relevant ;-).

It is also true that most people DO NOT want to understand a programming 
language, sometimes for very good reasons: i.e. they have more important 
things to understand. This is why they prefer an "easy" language, where 
I would define "easy" a language that can easily be adapted to your 
pre-existing way of thinking. In this sense, Python is exceptionally easy, 
since it has a familiar syntax and it can be programmed in the procedural way, 
that most people already know. CL instead is difficult because the syntax 
is unfamiliar and you have to change your way of thinking from the very 
beginning (for instance you must get used to the prefix notation); moreover 
most CL programs are more sophisticated than simple procedural programs and 
are not easy to read if you don't already  know lots of concepts in computer 
science. It is true that you can get used to the CL syntax in a couple of 
weeks  a write some program: but still you don't know CL.

To bring another example, I am now in the process of learning OOP, coming
from traditional procedural programming. It tooks to me few days 
to understand the syntax and the basic concepts of OOP in Python:
but it takes many months to get used to the OOP way of thinking.
Probably the process is simpler for a newbie who doesn't know anything,
whereas my mind is polluted by years of procedural programming. On the
other hand I have less problems with functional programming, which is
quite natural for somedoby having a strong mathematical background: I
would naturally solve a problem in a functional way, but more often than 
not I prefer do not code in this way since I think it is less readable;
for instance. I tend to use the more readable list comprehension instead 
of map, even if in my mind map is more elegant and somewhat preferable.

Final thought: different persons have different way of thinking.
Different programming languages have different philosophies. It is not
strange at all that when you find a language that fits you mind, it is
*for you* much easier to learn than other languages. That said, I agree
with the OP, you can't understand any language worth of this name in a 
couple of weeks, no matter as smart you are.

--
Michele Simionato - Dept. of Physics and Astronomy
210 Allen Hall Pittsburgh PA 15260 U.S.A.
Phone: 001-412-624-9041 Fax: 001-412-624-9163
Home-page: http://www.phyast.pitt.edu/~micheles/


P.S. this a good moment to ask a question I always wanted to ask to 
David Mertz ;-) :  Why the Ph.D. title in the signature ? Most of
the people I know don't do that (myself included). Maybe there a
misterious reason...

P.P.S. David, this is a joke; seriously I take the occasion to say I have
read your articles on "Charming Python" and your book "Text Processing
in Python" which I appreciate very much. Bravo! Very pedagogical and very
useful. When it will be printed ?



More information about the Python-list mailing list