

Learning 12 new programming languages in 12 months - coderholic
http://www.coderholic.com/12-months-are-up/

======
junkbit
There's a great book called Seven Languages in Seven Weeks that teaches this
way of thinking to broaden your horizons.

The languages discussed are Ruby, Io, Prolog, Scala, Erlang, Clojure, and
Haskell

[http://pragprog.com/titles/btlang/seven-languages-in-
seven-w...](http://pragprog.com/titles/btlang/seven-languages-in-seven-weeks)

~~~
cema
I am not sure how great it is. My impression was it skips and jumps around the
language territory. For example, as I looked through the Clojure chapter, I
knew I would not understand the language if I had not had studied it before.

~~~
bendmorris
I found the book very useful. The idea isn't to give you a deep understanding
of the language, it's more along the lines of: introduce some cool concepts
that you may not have seen before, and encourage you to do your own thing to
learn the language. It also gives a quick introduction with examples to
several different programming paradigms that many are unfamiliar with. The
Haskell part is not particularly deep either, but it gives you some basics and
gets you started.

------
cd34
Cached version:
[http://webcache.googleusercontent.com/search?q=cache:KmnKhb-...](http://webcache.googleusercontent.com/search?q=cache:KmnKhb-
_kUoJ:www.coderholic.com/+http://www.coderholic.com/12-months-are-
up/&hl=en&gl=us&strip=1)

------
malkia
Sorry, but had to be posted:

Peter Norvig's "Teach Yourself Programming in Ten Years", linked under... ahem
<http://norvig.com/21-days.html>

~~~
azanar
I understand the point you are trying to make in posting this, and it _is_ a
good point to make.

However, in the article, Norvig himself points out the worthiness of learning
several languages, and doesn't claim that you have to get on a ten year
treadmill for any individual one, or even a subset. My impression was that
Norvig was _really_ targeting the people for whom whatever-language-in-a-
fortnight-and-a-half would be their first exposure to programming at all.

As you gain more languages, provided you are judicious in choosing, so shall
your learning of each of those languages be more rapid than the prior.

Does a month per language seem a bit rapid? Yeah, it kind of does, depending
on the time spent in study and tooling. The pragmatic programmer guys suggest
learning a new language every year; that seems wholly attainable. In reality,
the author studied a language to what he considered a sufficient level in a
quarter. That _also_ doesn't seem _that_ unreasonable, depending on the level
of mastery desired. Could be that both perspectives have more than a grain of
truth.

~~~
malkia
I like to learn new languages, but I end up at this.

What matters more professionally is Frameworks, SDKs, Libraries, etc.

For example I'm not a big fan of C#, or static typing, but Unity's C# (And
UnityScript/BooLang) framework is pretty good to be ignored.

~~~
lelele
> What matters more professionally is Frameworks, SDKs, Libraries, etc.

It depends. Frameworks and SDKs cannot overcome shortcomings of your language
and/or language implementation (and often you don't have the luxury to switch
gears, because there is only one reference implementation).

When I studied Erlang's support for concurrency, I realized how hard it would
have been trying to do that in another language. Yes, you could somewhat
manage to replicate that, but:

\- your language implementation could lack microthreads, thus impacting how
concurrency would scale;

\- you may need to follow some protocol in using the framework, otherwise you
could fall into one of many pitfalls, which aren't there in the language
you're using as a model.

------
jschuur
Why not learn one or two really well in that time instead?

~~~
samdk
I think it's just important to know a little about a wide variety of things as
it is to know a lot about a few specific things. Breadth and depth are both
valuable.

I ended up doing something similar to what this author tried to do starting in
my sophomore year in college (although I didn't have any particular goal in
mind when I started). Over the course of about a year and a half, through some
combination of classes and my own projects, I programmed Standard ML, Prolog,
Haskell, PHP, Ruby, JavaScript, x86 Assembly, Scala, SuperCollider, and Scheme
for the first time. At that point, all I really knew were Java and Python.

I think it was an immensely useful experience for several reasons. I've now
had some exposure to most/all of the major programming paradigms (and some
less common ones too). A month is enough time to begin to get a feel for a
language and its idioms, and being able to think and solve problems in
different ways will make you a much better programmer even if you do end up
working mostly in one or two languages.

Learning how to learn a programming language quickly is also an exceptionally
useful skill. New languages don't scare me any more--I can usually learn
enough to start hacking on something in a couple of hours, and enough to not
be writing completely horrible code in a couple of days. And it's now very
rare that I sit down to read a piece of code and can't figure out what's
happening because I'm not familiar with the language, which is very helpful
when I need to work on something I've never seen before.

That all said, there's a reason I didn't continue doing that indefinitely.
Learning one or two languages really well is also very important.

------
melling
It would be easier to learn a new language if I could fit it into my day job.
My current idea is to try to find small throw-away tasks to do in different
languages. For example, last week I joined StackOverFlow and tried to solve a
small task by asking the same question for two different languages (elisp,
Haskell).

Elisp: [http://stackoverflow.com/questions/4640040/how-can-i-
generat...](http://stackoverflow.com/questions/4640040/how-can-i-generate-sql-
inserts-from-pipe-delimited-data)

Haskell: [http://stackoverflow.com/questions/4640953/how-can-i-
generat...](http://stackoverflow.com/questions/4640953/how-can-i-generate-sql-
inserts-from-pipe-delimited-data)

In the future, when I need something done quickly I won't always "reach" for
Perl because I'll have a better starting point. Not that there's anything
wrong with Perl. I just want a few more tools in my arsenal.

If I few people joined in, we might end up with a few breadcrumbs to make it
easier for everyone to get started.

------
kleiba
Articles like this always remind me of an old blog post by Steve Yegge, or
rather a few paragraphs from it about Dan Friedman: [http://steve-
yegge.blogspot.com/2008/06/rhinos-and-tigers.ht...](http://steve-
yegge.blogspot.com/2008/06/rhinos-and-tigers.html) (the part I mean starts
half-way through the article, search for "Friedman")

------
coderholic
Sorry, posted before going to bed, and it looks like you killed my small VM!
The site is back up now. Thanks for all of the comments!

------
ajays
The problem with knowing too many languages is that soon the syntax starts
blending with each other, and context switches take time.

~~~
malkia
Actually it helped me realize certain things in other libs.

For example using std::<pair> more after spending time with Common Lisp.

Also it made me realized that certain building blocks, patterns, etc. are not
that great when looked through a different view.

For example the "factory" pattern is needed in C++, because objects can be
allocated on the stack... Wait... what?

Well, because C++ allows allocation of objects on the stack, obviously one
cannot think in it, as if "new" would've returned object with different size
than the one declared. e.g. "new SomeClass()" is known by the compiler how
much space would take, hence "SomeClass someObject;" is known in advance and
can be allocated on the stack. Cool, isn't.... Actually not so cool - because
of that you can't return proxied objects, hidden implementation, etc... Hence
you need factory - instead of "new SomeClass" -> CreateSomeClass() function
that might return object of different size... Where I got aware of this - by
spending some time with Objective C and it's objects.

Then comes the holly OOP, especially the C++ way - but then one discovers lua,
javascript... Or Common Lisp... and understands - "protected", "private" are
not that important, and the GOF patterns are not that needed.

Okay, so you go back at your work to code in C++, and just take it easier,
because you have realized there is no point going hard-core and doing it the
C++ way all the time. Hell it's even okay to have this macro called "HASHED(
"SomeGameResource", 0x123123 )" that... gets preprocessed by external tool,
that replaces 0x123123 with the hash code of "SomeGameResource" and puts it
back in the source code.

#ifdef DEBUG

#define HASHED(s,c) hashed(s) // e.g. call function in debug to return the
hash-code

#else

#define HASHED(s,c) c // replaced with the precalculated value

#endif

Now try doing that with templates.... But my point is - there is no need -
just use an external tool that does it for you. Inform your programmers that
if they want to change HASHED("BlahBlah", 0x123123) to HASHED("BlahBlah2",
0x123123) then they have to run it through a tool (or have such step), or just
make them use the debug version. Or change the language... Joke! You are doing
this for the Nintendo DS - "C/C++" is the only viable option for large
project.

------
benologist
What a great idea, amazing you managed to fit 4 of them in juggling everything
else, very jealous of you.

------
iwhine
I'm sorry, but who cares? This post offered nothing insightful, merely click
bait towards some of your projects. Teach me the benefit of learning "12
languages" or offer some productivity hacks to achieve so next time.

