[erlang-questions] Beginners tutorials

Miles Fidelman mfidelman@REDACTED
Thu Jun 12 17:48:52 CEST 2014

Doesn't it kind of depend on what the goal of a tutorial is?

If all one is trying to do is teach straight coding in Erlang, the big 
conceptual issue is getting one's head around a functional language.  
For that, there's:

But, really, if all one is trying to do is get from "hello world" to 
stand-alone code modules, that kind of misses the point of Erlang (at 
least IMHO).  It's not like one is progressing from short, simple 
programs, to very large complicated ones - the whole point of Erlang is 
to develop systems of actors - where the conceptual issues have a lot 
more to do with how to structure large collections of interacting units.

Now if one is trying to do a ground up tutorial for Erlang, and OTP, as 
a platform - that immediately leads to three questions:
- what is the audience trying to learn?
- what is the reader's state of knowledge about such things as 
distributed system concepts and architectures, run-time environments, 
platforms, and so forth?
- where to start?
- and maybe, whether to proceed with a bottom-up incremental approach to 
system building, or a top-down architectural approach

In fact, if anything, rather than a bottom-up tutorial, what might be 
really useful is a top-down tutorial - more along the lines of learning 
Linux for the first time.  Rather than starting with echo "Hello 
World!"  a tutorial is more along the lines of:
- insert liveCD into slot, and boot
- log in
- list some files
- create a file, display it, examine its properties,
- examine directory structures and file types (including device types)
- examine the processes running, manipulate them
- examine environment variables, paths, etc.
- create and manipulate some shells
- download, unpack, and install some packages
- and so forth

For Erlang, the equivalent might start with:
- install Erlang
- start a node
- use the various run-time tools to start examining what's running
- write, compile, load, run a simple 2-actor ping-pong application; 
examine it's behavior with the various run-time tools
- start up another node
- modify ping-pong to run across nodes; examine its run-time behavior
- play with some of the packaging/installation/distribution tools
- from there, I think we're getting into areas that are more complex 
than it makes sense to address in a tutorial - more like the ground that 
"Erlang and OTP in Action" covers pretty well

Just my two cents,

Miles Fidelman

Loïc Hoguin wrote:
> The simple nodejs example works because it's a nodejs example and not 
> a Javascript example. Someone who doesn't know Javascript (pretty much 
> equivalent to someone who doesn't know programming at all) won't 
> understand it. In particular it has a number of objects in it, and 
> these are not what you start learning a language with.
> Most people who look at Erlang necessarily have to learn a number of 
> things that people who look at nodejs don't. You can't dumb it down as 
> much as nodejs can.
> The other issue would be that teaching someone to do that in Erlang 
> would be counter-productive. Do you really want to teach people to do 
> that and then tell them they're doing it wrong? I think the bigger 
> difference here is that nodejs uses a scripting language vs Erlang's 
> compiled/run in a VM language. There's simply more to do and learn 
> before you can start something. You have to compile the file. You have 
> to start the VM with the proper paths set. And so on. Since you have 
> to do all that, why not explain it properly from the beginning?
> That's why the Cowboy guide starts with building a release. It takes 
> about five minutes to go from nothing to your first release running a 
> hello world application. Of course that's not as fast as nodejs, but 
> we simply can't go that fast anyway. We're not a scripting language. 
> Still I think that's a pretty quick way to start.
> The chapter is here if you want to take a look and provide feedback: 
> http://ninenines.eu/docs/en/cowboy/HEAD/guide/getting_started/
> On 06/12/2014 04:54 PM, Joe Armstrong wrote:
>> Re: Garrett's great talk at EUC2014
>> The point has been made many times before that
>> "There are no easy Erlang getting started guides"
>> So I thought I'd take a look at Node.js.
>> The node js home page (node.js) starts with a simple example
>> <quote>
>> var http = require('http');
>> http.createServer(function (req, res) {
>>    res.writeHead(200, {'Content-Type': 'text/plain'});
>>    res.end('Hello World\n');
>> }).listen(1337, '');
>> console.log('Server running at');
>> To run the server, put the code into a file example.js and execute it
>> with the node program from the command line:
>> % node example.js
>> Server running at
>> </endquote>
>> It's pretty easy to knock up an almost identical example in Erlang -
>> using any of the well-known web
>> servers in the background, unfortunately this has not been done, or if
>> it has been done
>> it's not easy to find the examples (or if there are examples I can't
>> find them)
>> I was vaguely thinking of making some examples that are more-or-less
>> isomorphic to the
>> node.js examples and then applying small transformation steps to turn
>> then from idiomatic node.js code to idiomatic Erlang code.
>> Although I could find a simple hello world example in node.js I could
>> not find a tutorial that
>> started with a simple example and then built on it in very small steps
>> adding routing, authentication,
>> database access and so on.
>> Does anybody know of some examples of node.js that could be used for 
>> this.
>> Cheers
>> /Joe
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions

In theory, there is no difference between theory and practice.
In practice, there is.   .... Yogi Berra

More information about the erlang-questions mailing list