amanda said:
How does one determine whether one can pick up a new language quickly
or not? So far, they all seem pretty much the same to me, at least at
basic level.
First off, languages are /not/ all pretty much the same -- however it is quite
possible that you have only seen some of the subset of languages that /do/
resemble each other quite strongly. E.g C is not so very different from Pascal
(once Pascal has been enhanced enough to make it actually usable), and C#
resembles Java rather closely. But if you were to look at some of the other
real languages which are our there, such as Smalltalk, ML (and family), Lisp
(and family), then you would find very different ways of thinking, much more
powerful ways of structuring programs, and generally a higher level of
abstraction. And they by no means exhaust the range of seriously intended
languages (e.g. Icon, Prolog, Sather, Dylan, and many, many, more).
Oh, and don't forget SQL.
Secondly, it is easy, when you are used to language X, and trying to learn Y,
to miss important differences between them. Especially if Y seems to have
near equivalents to most of the features of X. The problem is that you'll try
to program in Y in the same style (using the same kinds of programming
structures and the kinds of abstraction) as you did in X. The classic example
of this is the C programmer who uses a C++ compiler but still writes in C (or
very nearly). Another example which comes up fairly often here is the C++
programmer who tries to use Java as if it were a dialect of C++.
So, how long does it take to pick up a language ? It depends on your
standards. If all you are trying to do is get to the point where you know the
syntax well enough to write programs without having to check the manual every
time you use, say, a while loop; then it I see no reason why it should take
longer than a weekend for most well designed languages (simply because any well
designed language has been designed to be learned). There are exceptions -- I
doubt whether it is possible to learn C++ (even to that minimal extent) in less
than a week or so. And I doubt whether I personally would ever be able to
learn APL (or its descendent J) no matter how long I tried.
However, knowing a language to that extent is a useless party trick. You will
neither be writing correct code yourself, nor able to follow other people's
code -- unless it is written in baby talk. Learning a language to the extent
where you are naturally comfortable with full and idiomatic use of its features
takes a long time. I would say 1 year of nearly full-time use at a minimum.
You would certainly be /productive/ long before then, but not expert enough to
be trusted to work safely unsupervised.
There may be cases where two languages are genuinely close enough to each other
that knowledge of one will significantly reduce the startup time for another
one, but I can't think of any examples offhand (unless, perhaps in the
functional language world). I doubt whether I could gain a level of knowledge
of C# equivalent to my knowledge of Java in less than a year -- and they are
about as similar as languages get.
On the other hand, there are /definitely/ languages which are so complicated
and/or arcane and/or treacherous that it would take a lot longer than a year.
I don't believe that it is possible to become a competent C++ programmer in
less than 3 years -- and most people (if they ever manage it at all) will take
longer still.
-- chris