27 comments

[ 3.5 ms ] story [ 122 ms ] thread
The contents of this article are (almost) a bunch of quotes from a bunch of different authors.
true, but they are worth a read and some of them I hadn't seen before.
> it would make sense to learn both Scala and Clojure

Stop dreaming... unless you're a true programmer at heart (or mind, really), there's no way you can learn new languages just like that. My schoolmates, very smart people, have huge problems even learning C++ (without most of pointers, but with inheritance, virtual classes and such), although they all know Matlab and possibly other languages.

Thinking in programming languages is hard, even though it may not seem so to those proficient in many languages. Each new language, Scala and Clojure/Lisp especially, have their own "weird" features and are quite far away from Java/C++.

>unless you're a true programmer at heart (or mind, really), there's no way you can learn new languages just like that.

Becoming a "true programmer" isn't something that you're like born with; it's not like there has ever been a Paul Erdos[1] of programming coming up with novel GC schemes at the tender age of three -- it's a result of the combination of a sincere interest in the process of coding and the pursuit thereof, and the former can and usually does follow from the latter, as long as you are careful to try to move no faster than is natural for yourself and have the patience to continue at such a pace, and if you're like me and you constantly need external stimulation you should find some, but in any case it certainly isn't magic.

[1] -- Erdos, quite famously, could calculate the number of seconds a person had been alive when he was three.

You've got cause and effect backwards. People that pick these languages up don't start off as "true programmers", they become "true programmers" because they pick up languages like this.
It's actually a slight feedback loop, though I agree it's probably biased toward the end of people who learn more becoming better. With the existence of FizzBuzz and similar results along with the existence of people who literally have no problem with Haskell, it's safe to say there are some genetic variables involved with programming and math and so on.
Why would it be problem to learn both Scala and Clojure.

Your friends that struggle with C++ are just begginers, they'll learn over time.

If one is really a programmer, it's not the language he has to learn, it's concept that can be easily applied to different languages. And the chance is that those concepts are not that distinct or unique, and that you already know some of them.

Functional programming, STM, macros, ... nothing new, just 20+ years old repackaged concepts in a new wrapper package (language) and a new API.

That being said, go learn either Scala or Clojure. After that, learning the other one will be much easier.

I totally agree. While I am a 'true programmer' (it's my job, my hobby, and my love since 4th grade) as soon as Clojure and Scala became popular, I knew I'd end up learning them one day.

And when I have a -use- for a language, I learn it on the spot. Learning the basics is stupidly easy once you know 3-4 languages, and learning the quirks comes with time for any language.

They'll learn, but what... They will work in banks, write code using their proprietary frameworks, and be forced to comply with strict coding guidelines, never experimenting, testing the limits of the code, etc... They might even hate coding.

True, I can't really speak from experience, as I've learnt to code by myself, from a young age, I wasn't forced or urged to do it, so I have no idea what happens with people that have to learn to program as part of their education/job. However, the professor that was teaching us, who has apparently worked in the industry as well, seemed... limited - mentally - thinking inside the box. That, or he was a very good teacher, taking it very slowly, and boring the hell out of me.

If you know how to do X, and you are in a class where the teacher is teaching how to do X, you will become frustrated and bored.
Learning new languages will become easier over time. Lots of concepts are shared by many languages.

Only paradigm shifts are really difficult. From imperative to functional. From functional to reactive etc. But these are also the more worthwhile experiences, because they broaden your possibilities as programmer.

The leap from imperative to functional becomes apparent when you stop thinking of your problem or system in terms of the data it processes, but it terms of the functions it has.

Yes, I belong to the school which believes everyone should have learnt Lisp/Scheme in school in that introductory module to CS, ala, the MIT belief. :)

MIT uses Python now, but I agree with you. Reading through just the first 1.5 chapters of SICP was enlightening and completely changed how I write and think about code in my main language, Python.
I am a physicist from origin, so I haven't had a lot of specialized classes. I always used imperative languages. In physics c++ and c are leading.

Two years ago I found Haskell. It was difficult to learn, until I realized in Haskell you are just doing mathematics. In functional languages a function is a mathematical function. You can actually reason about code and even prove your code. This is extremely cool (from my point of view).

I purchased some books on lambda calculus, logic, category theory and did the SICP thing. Now functional programming feels more natural to me. I used it as day to day tool.

I find programming in C++ harder than other languages. (Clojure, Common Lisp, Python, Ruby, Erlang, Haskell).
Is it really harder or a just a pain in the ass?
In terms of programming language difficulty, 'hard' and PITA are the same thing.

The real 'difficulty' in programming comes from learning the domain that you are working in well enough to express it to the idiot computer.

That said, I find expressing myself easier in languages that are less of a PITA.

Why is this page making my CPU thrash?
And, if you are an Aristotelian rather than a Platonist, you may instead be interested in Gosu (http://gosu-lang.org): a party school language for a party school world.
I don't understand the Aristotelian vs. Platonist reference.

Could you digress?

Lisp (and lisps) appeals to Platonists (as you can see in this article): they are minimal and pure.

Gosu is not pure nor particularly minimal: it's rooted in the historical experience of Java software development, for better and for worse. As such, it is more of an Aristotelean language: practical, derived from experience and not particularly concerned with unification.

I enjoy both languages, but I'm an Aristotle guy.

Does anyone besides Guidewire use Gosu?
Unfortunately, not many -- yet. But we've got lots of customers who aren't going anywhere for a long time. I think prostitution is the only other industry that isn't really affected by depressions and the like.

You should really check it out, it's a sexy language. If you know java you'll feel right at home. I've been using it for almost five years and really love it. To me, the syntactic sugar they throw in for common little things are what really make it so nice. It's not overly verbose, enhancements on types can be amazingly powerful if you have no control over over an API, and the ability to use and pass blocks (similar to closures) are something that I hate being without when I am forced to go play in java-land.

I've wondered why I never see a gosu reference when comparing jvm languages. I was quite pleasantly surprised when I checked it out.. Looking forward to having a play in the near future.
There are a couple of guys working on custom typeloaders:

  https://github.com/jpcamara/Goson
And there is a web framework in progress:

  http://ronin-web.org/
But, yeah, it's mostly Guidewire.

Getting a new language adopted is hard.

tl&dr ?