

Advanced programming languages - gnosis
http://matt.might.net/articles/best-programming-languages/

======
moocow01
I agree with this article but I have to admit I'm tired of learning
programming languages after a number of years in this industry. I've had gigs
in just about everything and now I'm purposely restricting my efforts to just
a couple different languages even if there is money on the table for work in
something else.

You can do just about everything in any mature language - after a while of so
to say exploring the landscape for a number of years, its nice to just become
deeply fluent in a couple of things. I know people love to talk about this
language vs that and how language X will make you rethink everything and
usually there is some truth to it but in the big picture its usually pretty
trivial in terms of actually getting stuff done.

~~~
supar
I agree with you here. Several languages (let's call them "advanced"?) are
better than other, ok, but actually very few introduce actually "innovative"
constructs. Most of the _perceived_ differences in recent languages are
actually in the design of the libraries built around the core language, which
is underwhelming.

After some years learning "advanced" languages, and having mastered the
_constructs_ , the biggest problem becomes becoming acquainted with the
libraries. It takes time to re-learn _what_ to use to do something, not _how_
to do it.

Another problem of mine is that a lot of time is spent writing/using
_bindings_ to other foreign code, or let alone re-implement the code in the
current language. Or see your old code stop working because of new libraries,
compilers, etc.

In the end, it feels like you're writing just for the sake of writing instead
of actually _doing_ something.

------
x3c
>In academic research and in entrepreneurship, you need to multiply your
effectiveness as a programmer, and since you (probably) won't be working with
an entrenched code base, you are free to use whatever language best suits the
task at hand.

I disagree. If you're a startup, you're better off using a more mainstream
language. I'm from India and if I start to find a good Haskell or Scala
programmer I'll be looking for a long time and I'll be paying him/her a lot
for those skills. Being a startup, you start small and its tempting to start
using the bleeding edge technologies, but you _must_ do a cost-benefit
analysis; coders for PHP and Java are much easier to find and since the supply
is more, the cost of skills will be less.

Bootstrapped startups should particularly be wary of using technologies that
have a very small talent pool in their part of the world. Use new/rare
technologies if the benefits of using them outweigh the hassle and expenses of
maintaining and extending the team/codebase for it.

~~~
tomp
> I'm from India and if I start to find a good Haskell or Scala programmer

In general, if you need to find a good programmer for any language (Python,
JavaScript, Java, ...), you will be searching for a long time. The only
difference is that with Haskell, OCaml and other advanced languages, usually
the first programmer you will find is already very good.

~~~
jasim
However finding that first 'good' programmer is going to be harder for
languages like Scala, Haskell etc. compared to finding the first good
programmer on more popular languages

~~~
SomeOtherGuy
No it isn't, that's the point. It is easier to find any programmer. It is not
easier to find a good programmer. 99% of java programmers are bad. 50% of
scala programmers are bad. Finding the 1% of good java programmers is just as
hard as finding the 50% of good scala programmers.

~~~
zukhan
"99% of java programmers are bad."

Are you part of the 99%? It irks me when people make pompous statements like
this.

~~~
SomeOtherGuy
I'm not a java programmer. Just to help you out for the future since you seem
a bit confused:

    
    
        pomp·ous/ˈpämpəs/Adjective:
            Affectedly and irritatingly grand, solemn, or self-important: "a pompous ass".

------
198d
My biggest desire to learn a language like Haskell or Scala would be the total
shift in thinking required to grasp the language (the author mentions this).
I've started playing with clojure lately and even though I've barely scratched
the surface (primarily poking around 4clojure.com) I could already feel my
brain twisting in ways I've never experienced before. I firmly believe once
you turn that corner and really start to get it, you start seeing and
attacking problems in such a different light that there's no going back. The
big problem I've had recently is finding the motivation to learn anything
outside of work (programming/engineering related at least); once you start
getting paid to do something its really hard to do it for free, haha.

------
sbirch
"In academic research and in entrepreneurship, you need to multiply your
effectiveness as a programmer, and since you (probably) won't be working with
an entrenched code base, you are free to use whatever language best suits the
task at hand."

What about libraries and code-bases available to the programmer? Legacy code
might not be a concern, but what about having to reinvent wheels?

~~~
lelele
Any advanced language worth his salt will allow you to link libraries from
other languages. It may require some work, but at least it can be done; whilst
you can't expand the capabilities of your programming language of choice as
easily.

I think no language is advanced enough to be used alone for everything. Steve
Yeggie said that once a time at Amazon the only languages allowed were Lisp
and C. It makes sense: an high level language plus a low level one. Those
languages which try to encompass too much become too complex and hard to use
effectively (think about C++).

~~~
metaobject
Wow! I never knew that Amazon was a Lisp company. I'd like to know more about
their infrastructure setup with Lisp and C.

~~~
lelele
I don't have any info besides Yeggie saying it.

~~~
zak_mc_kracken
I read him religiously but I don't remember him even coming close to making
such a claim and searching for "yegge amazon lisp" doesn't turn up anything.

~~~
srparish
<https://sites.google.com/site/steveyegge2/tour-de-babel>

------
nandemo
So the article first states a mathematical definition:

> _A bounded lattice is a mathematical structure that has a least element
> (bot), a greatest element (top)_

And then proceeds to define a typeclass that does not satisfy the definition:

    
    
        instance (Ord k, Lattice a) => Lattice (Map k a) 
            where top = error $ "Cannot be represented.
    

:-(

You can't even fix the definition of _top_ , since union of arbitrary _Map_ s
is not bounded, e.g. there is no finite _Map String foo_ (map with _String_
keys) that is a superset of every _Map String foo_.

You could change Lattice to a weaker structure, but I think it would be better
to present a simpler typeclass like _Show_ or _Ord_.

------
jiggy2011
All the languages he suggests apart from Scala are or are pretty close to
being pure functional languages.

I'm not convinced that I would be more productive developing say a web app ,
database app or game using say Haskell rather than Java or Python especially
since a large amount of programming is all about state and side effects.

I'm not against learning a pure functional language as a way to improve your
programming especially for concurrency or to solve specific problems.

Are there any large pieces of software outside of academia that are written
primarily in functional languages?

~~~
weaksauce
I don't know how far over to the functional paradigm arc leans but hacker news
is programed in it. I know it's built off common lisp so there is that linage.

The naughty dog game studio used a form of lisp in their games starting with
Crash Bandicoot until they got purchased by Sony(I think). Though, the
language was much more imperative in nature instead of functional.

Autocad had autolisp built into it.

<http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp>

I don't know of any others off the top of my head.

~~~
jiggy2011
I wonder if the lack of state is why I keep getting the "Unknown or expired
link" message all the time?

I see allot of functional DSLs (Excel for example + autocad as you pointed
out).

Was crash bandicoot written in Lisp or was this just an internal DSL used for
certain operations?

I don't have anything against functional languages and I'm sure all good
developers should know at least 1 but the article seems to suggest that
everyone should use them all the time.

There are more important things than having an expressive language, I use
allot of Java which is seriously non expressive in many ways but I have more
confidence in it to solve the category of problems I deal with than any other
language that I have tried thus far.

~~~
andolanra
Naughty Dog used an internally developed programming language for the whole
game (or at least most of it.) A big part of the appeal was apparently the
dynamic nature of Lisps, which allowed reloading of code at runtime to
simplify debugging. This article is a postmortem about Jak and Daxter; the
next page also mentions the drawbacks of using GOAL, as well:

[http://www.gamasutra.com/view/feature/2985/postmortem_naught...](http://www.gamasutra.com/view/feature/2985/postmortem_naughty_dogs_jak_and_.php?page=2)

------
buff-a
What exactly makes these languages "advanced" (as opposed to "complicated" or
"difficult")? Or does "advanced" here mean "harder" as in "advanced math"?

~~~
Darmani
Programming language research is a very large and deep field, though a lot of
industrial languages are fairly divorced from it. All of these languages have
a strong theoretical foundation. This pays off well. One common statement from
ML programmers is "If it compiles, then it works."

<http://en.wikipedia.org/wiki/Programming_language_theory>

~~~
buff-a
>Programming language research is a very large and deep field

I agree with you. But to play devils advocate, if its so large and deep, why
do I only hear about Haskell and Scala when language-geeks talk about
"advanced" programming languages? Looking at the wikipedia link you provide,
there's a list of bullet points by decade: 7 things worthy of a bullet in the
60's, 7 in the 70's, 4 in the 80's, 2 in the 90's and 0 in the 00's and 10's.
Has nothing interesting happened lately? Is Haskell as good as it gets?

~~~
gnosis
_"Is Haskell as good as it gets?"_

It's debatable just how good Haskell and similar languages are. Like any
language, it has its ardent fans and bitter detractors.

As for development of "advanced programming languages" in general, if you are
interested in what's out there, I strongly recommend you browse the archives
of the "Lambda the Ultimate" weblog:

<http://lambda-the-ultimate.org/>

There are a lot of very knowledgeable language designers on there, and news of
advanced language features and new languages filters through there all the
time. The blog is not as active as it once was, but the archives are still
very much worth studying.

Another great resource is the old c2 wiki. Here are some relevant starting
points:

<http://c2.com/cgi/wiki?search=haskell>

<http://c2.com/cgi/wiki?search=lisp>

<http://c2.com/cgi/wiki?search=scheme>

Finally, just hang around HN for a while, and you'll see plenty of posts
discussing new "advanced" languages. The HN archives are also worth browsing
through.

------
rdtsc
From an exploratory point of view I would suggest:

* Haskell (functional programming, purity)

* Prolog (logic programming)

* Erlang (actor based concurrency)

