
Advanced programming languages - fogus
http://matt.might.net/articles/best-programming-languages/
======
edw
Just the mention of Scheme, my favorite programming language, makes me get
irritated when I think about the thousand or fifteen hundred lines of
JavaScript I've written in the last couple weeks. I'm basically writing Scheme
using C syntax, and the anonymous functions as arguments to functions which
are called by anonymous functions that are themselves arguments to functions
really start to get confusing, in large part because the mixing of parentheses
and curly brackets and the semicolons and all the things that are supposed to
be the sane alternative to all those sets of parantheses. Oh, and let's not
even mention the way JavaScript doesn't do block scoping the way C++ does, and
let's not even _think_ about how closures interact with mutation—which almost
guarantees that code with for loops and closures will have bugs in it.

And the sad thing is, I don't mind writing JavaScript. Relatively speaking, I
_love_ JavaScript. Now, if a framework-platform like Node.js existed for
Clojure, now, that would be a different story. Except that I'd then constantly
have to do mental context switches whenever I jumped from client to server
code.

There is no rest for the wicked, I suppose.

~~~
ataggart
>Now, if a framework-platform like Node.js existed for Clojure, now, that
would be a different story.

What about aleph?

<http://github.com/ztellman/aleph>

~~~
pmjordan
There's also Saturnine, <https://github.com/texodus/saturnine> though I
haven't tried it yet.

------
joelburget
I was really surprised when I got to college and the only languages people
cared about were C++ and Java. Ok, you'll also find some C#, Python, and Ruby,
but nobody has heard of any of these "advanced" languages. The _only_ thing
they care about are the number of job opportunities they can get. I sometimes
try to advocate for Haskell, or Scheme, or even Prolog. The response is
usually "Pascal?" It's sad that these students never wonder if there's a
better language, or a more fun language, or _anything other than Java_. It's a
desert out here.

~~~
necubi
I guess it really depends on what college. At my school, which tends towards
the theoretical, Scheme, SML and Prolog are part of the core curriculum.

~~~
joelburget
I've been reading some blog posts here <http://existentialtype.wordpress.com/>
about the curriculum at Carnegie Mellon and I've been very impressed. I can't
believe they're phasing out object-oriented programming! Here the faculty seem
to think object-oriented is the only way. Actually I can't think of _any_
functional programming we've been introduced to. (Or any other paradigm for
that matter)

------
russellallen
If he thinks that Smalltalk is a "alternate yet fully capable universe that
branched off from mainstream computing long ago" then I'm not sure I want to
know what he thinks about selflanguage.org ...

But seriously, his four 'advanced programming languages' seem to be all in the
functional space. That's great, but I'd recommend looking outside that as
well. Maybe Haskell, Pharo, Factor and Erlang?

~~~
mahmud
SECONDED!

Add Mozart/Oz to the mix for good measure.

~~~
jefffoster
+1 for Mozart/Oz. It's a great language for exploring the various paradigms of
programming. Working through "Concepts, Techniques and and Models of Computer
Programming" (<http://www.info.ucl.ac.be/~pvr/book.html>) with Mozart/Oz gives
a great tour of programming techniques and manages to stay in one language for
the whole journey.

------
kragen
Shouldn't an article on "advanced programming languages" include at least one
dependently typed language? I mean, I'm pretty slow and halting in Haskell and
Erlang, but with ATS and Coq I don't even know where to start.

------
wewyor
Previous discussion:

<http://news.ycombinator.com/item?id=992218>

<http://news.ycombinator.com/item?id=1374635>

------
calpaterson
"In Haskell, programmers not yet well versed in functional program design may
find they repeatedly code themselves into a corner, where they don't have
access to the monad that they need. The MLs keep the side effects "escape
hatch" open to patch over incomplete design, which prevents projects from
coming to a sudden, unexpected "refactor-or-abort" decision point."

When I was a beginner, I did this a lot. In fact, I still do it occasionally.

------
herdrick
_... the Racket library is immense..._

It is very impressive by the standards of relatively unpopular languages. Also
the documentation is really good. But if Racket's libraries are immense, what
is Ruby's and Rails'? Mega gargantuan?

------
nitrogen
I went to the U of U for a time, and I wish I would've encountered Matt Might
while I was there (it looks like our only overlap would've been Spring 2009,
though). Somehow I wasn't able to effectively communicate with my advisor
and/or figure out which classes on the schedule were actually cool.

------
jbooth
Stopped reading at "once a program compiles [in haskell], it's almost
certainly correct".

Haven't done any Haskell coding, but I just seriously doubt that in any
language.

~~~
DarkShikari
It's far closer to true than you'd think.

In my experience writing code in Haskell, you spend about 95% of your time
debugging type errors and 5% of your time debugging actual bugs. The good
thing about the former is that it's effectively _the compiler finding the bugs
for you_.

Haskell is the only language I've used (obviously, not the only one in
existence) where I am _not surprised_ when a large program works correctly on
the first successful compilation.

 _Disclaimer: Haskell is not my main language, I'm mainly a C programmer._

~~~
VinzO
ADA is also good for that.

