Erlang is based originally on Prolog, a logic programming
language that was briefly hot in the 80's. Surely you've
seen other languages based on Prolog, right? No? Why not?
Because Prolog sucks ass for building entire
applications. But that hasn't deterred Erlang from
stealing it's dynamite syntax.
cf. http://damienkatz.net/2008/03/what_sucks_abou.htmlTea time!
However programming languages live and die by the size of their community. Erlang has, by choice of an over-brewed and bitter syntax, drawn itself into a niche much smaller than it deserves. The only chance to escape would be to adapt a more popular taste.
Otherwise it will eventually be obsoleted by a language "as powerful as erlang, but minus the arcane syntax".
Erlang's semantics are so very different from most other languages that having an arcane Prolog-derived syntax is just insult to injury.
In addition to all the conceptual, semantic leaps that Erlang asks you to make, you also have to learn a syntax which is very different from the Algol/C-based languages most people are used to.
I buy the argument that maybe, if you get used to it, Erlang's syntax can be beautiful. But it's still very much a barrier to people who have never used the Prolog language "family" (which as noted earlier includes... Prolog and Erlang).
In my personal experience having used Erlang for some 3 years now, I still find its syntax ugly and obtrusive.
Erlang syntax is a bit different, and there are even (IMHO) internal inconsistencies, but I didn't find it any more of a roadblock than e.g. python's indentation conventions. Each person is different I guess.
erlang's syntax is not some arcane afterthought, it may look strange or even "ugly" to people not familiar with it, but it has been very well thought out and purposeful, every time there is a choice between a beautiful construct that can add confusion, or a less elegant solution that is crystal clear, erlang chooses less elegant every time.
I have been doing javascript since I started programming and still get confused by its object model + prototypal inheritance, the same is true for pretty much every language, python, ruby, c++ etc going back to erlang is a refreshing break.