When comparing Erlang vs Pharo, the Slant community recommends Pharo for most people. In the question“What is the best programming language to learn first?”Pharo is ranked 25th while Erlang is ranked 29th. The most important reason people chose Pharo is:

In Pharo everything is an object. Compiler - object, network - object, method - also an object. And objects communicate with messages. No operators, no control-flow statements. Just objects and messages. Few things to learn, but you can learn OOP well.

Pros

Pro

Built from the ground up with concurrency and distributed computing in mind

Erlang has strong roots with the telecom industry in which concurrent processes are normal. It's designed to be concurrent, to be used for distributed computing and to be scalable.

Pro

Fault-tolerant

Fault tolerance means that a system has the property to continue operating even though one or more components have failed.

For Erlang systems, this means that the system is kept running even if for example a user has to drop a phone call rather than forcing everyone else to do so.

In order to achieve this, Erlang's VM gives you:

Knowledge of when a process died and why that happened

The ability to force processes to die together if they depend on each other and if one of them has a fault.

A logger that logs every uncaught exception

Nodes that can be monitored so that you find out when they go down

The ability to restart failed processes (or groups of them)

Pro

Upgrade code without stopping the system

In a real-time system it may not be possible to stop the system in order to implement code upgrades. For these cases Erlang gives you dynamic code upgrade support for free when using OTP. The mechanism is very easy to understand and works as follows:

Start the app

Edit the code

Recompile

That's all that is needed, the app updates with the new code while it's still running and tests are run automatically.

Pro

Great for writing distributed applications

Erlang is made to be parallel and distributed. Because it's very easy to write code that uses multiple processor cores, it's also very easy to write applications that span multiple servers.

Pro

Battle proven

Erlang has been used in production for more than 20 years now. During that time it has proven itself over and over again that works great in both small startups and large-scale enterprise systems.

Erlang has been used extensively by Ericsson themselves. For example, the AXD301 ATM, which is one of Ericsson's flagships is probably the largest Erlang project ever with more than 1.1 million lines of Erlang code.

Pro

Light processes

Erlang's processes have very little overhead (about 500 bytes per process). This means that a huge amount of processes can be created, even on older machines.

Pro

Consistency across platforms

Erlang's processes run in a complete independent way from the OS (they aren't managed by the OS scheduler neither). This means that programs written in Erlang will run exactly the same way regardless of the operating system or platform.

Pro

Object-Oriented

In Pharo everything is an object. Compiler - object, network - object, method - also an object. And objects communicate with messages. No operators, no control-flow statements. Just objects and messages. Few things to learn, but you can learn OOP well.

Pro

Easily learnt

There is good, free documentation including several books written by experts with extensive examples. There is an online MOOC. There are many tutorial videos. Supportive conferences and community. Even a professional support option if desired.

Pro

Live updates

The nature of Pharo being a "live" environment allows you to perform live updates to your system without requiring to restart it. You can upgrade/modify classes while serving requests at the same time.

Pro

Seaside

The framework for developing sophisticated web applications in Smalltalk is developed in Pharo. Seaside lets you build highly interactive web applications quickly, reusably and maintainably.

Can run headless for production

Pro

Highly productive

Pro

Remote debugging

Pro

Advanced code analysis tools

Pro

Really simple networking and REST with Zinc

Pro

Graphics, graphing and visualisation framework - Roassal

Roassal and Mondrian provide fantastic and easily used frameworks for graphics, graphing and advanced visualisations (comparable to D3.js) but with much less code. Visualisations can be rendered into web friendly graphics (SVG, .png etc.) without additional work.

Pro

Beautiful coding patterns in your IDE

No need to search google for compact beautiful examples of how to do things, your live environment source is available and you can easily live search, see how it works and copy how the masters would do it (examples most languages still copy too).

Pro

Glamorous toolkit & GTInspector

Most languages are still copying the Smalltalk tools of yesterday - GTInspector (written in Glamorous) takes live exploration of code/running objects to a new level. It's really slick, and better yet, you can easily write your own inspectors in 10 lines of code.

Pro

Code can be run on rock solid GemStone environment

Cons

Con

Eccentric syntax

Erlang's syntax may feel very strange to 99% of programmers who have never used it. This is because it does not share any similarities or common syntax definitions that are found in all the other languages that are used today.

Con

Useful in only one niche

Erlang is not really a general purpose language. It has a very special and well-defined niche where it towers above everything else. It's specialized in scalability and in distributed applications. Which is not necessarily a bad thing per se, but it still lacks and falls behind other languages when it needs to do things outside it's niche.

Con

Small community

But they are very friendly and supportive. Best help comes through the mailing lists so not always easily googlable. There is also a Slack community where help is nearly instantaneous.

Con

No 64 bit VM

Although 64 bit support is on its way, there is no official VM to work in a 64 bit system, requiring you to use 32 bit libraries.