<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 12, 2014 at 5:10 PM, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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.<br>

<br></blockquote><div><br></div><div>No but the example is the *first* thing you see on the <a href="http://nodejs.org">nodejs.org</a> website and node.js</div><div>is far more popular than Erlang. The first example just says "type this stuff in" and</div>
<div>"give this command" - it's not *teaching* JS nor Node.js for that matter - that comes later.</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

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.<br></blockquote><div><br></div><div>I have no intention of dumbing down anything - what I want is a simple example</div>
<div>that folks can type in and run. They don't need to understand it yet.</div><div><br></div><div>I tried the node example and it worked and I still don't understand how it works.</div><div>I'd have to read and understand all the code to do this - but this can come later</div>
<div>...</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
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? </blockquote><div><br></div><div>
Yes - I do want this. This is how education works. You start with the simple story</div><div>and then tell people why it is wrong.</div><div><br></div><div>Take physics, for example. Start with Newtonian mechanics, then relativistic, then quantum relativistic, ...</div>
<div><br></div><div>Start by telling people functions in Erlang are pure, then tell them about ets and get/put</div><div><br></div><div>I would also not start with examples that are wrong - it's easy to find examples that are correct.</div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I think the bigger difference here is that nodejs uses a scripting language vs Erlang's compiled/run in a VM language.</blockquote>
<div><br></div><div>The examples could easily start with escript. Compiling should not change semantics</div><div>only performance (which again is not the whole truth, but good enough to get started)</div><div><br></div><div>
 </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> There's simply more to do and learn before you can start something.</blockquote>
<div><br></div><div>I can start things with a one liner</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
 You have to compile the file. </blockquote><div><br></div><div>Not if it's an escript</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
You have to start the VM with the proper paths set. </blockquote><div><br></div><div>Like Java and Node</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
And so on. Since you have to do all that, why not explain it properly from the beginning?<br></blockquote><div><br></div><div>Simple examples should work out-of-the-box. And simple examples should be </div><div>explained properly.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
That's why the Cowboy guide starts with building a release.</blockquote><div><br></div><div>I've run cowboy thousands of times (I use it a lot) and have *never* built a release.</div><div>The only time I build a release is in products and this is the last thing I do, not the first.</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> It takes about five minutes to go from nothing to your first release running a hello world application.</blockquote>
<div><br></div><div>A release might take five minutes - but you don't need a release to</div><div>run hello world.</div><div><br></div><div>Example:</div><div><br></div><div> Type this in a file called <a href="http://hello.es">hello.es</a><br>
</div><div><br></div><div>   #!/usr/bin/env escript</div><div><br></div><div>  main(_) -></div><div>     io:format("Hello world~n").</div><div><br></div><div>Then give this commands</div><div><br></div><div>   $ escript ./<a href="http://hello.es">hello.es</a></div>
<div><br></div><div>I timed this it and it took me 17 seconds. If you have correctly installed Erlang this </div><div>should work first time.</div><div><br></div><div>How about a cowboy example in an escript that you can type in and run in less than one minute? - This might get you a large number of new users.</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> Of course that's not as fast as nodejs, but we simply can't go that fast anyway.</blockquote>
<div><br></div><div>No we should go 10 times faster :-)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
 We're not a scripting language.</blockquote><div><br></div><div>escript is. </div><div><br></div><div>Add:</div><div><br></div><div>    -mode(compile).</div><div><br></div><div>To an escript and it *is* compiled</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> Still I think that's a pretty quick way to start.<br>

<br>
The chapter is here if you want to take a look and provide feedback: <a href="http://ninenines.eu/docs/en/cowboy/HEAD/guide/getting_started/" target="_blank">http://ninenines.eu/docs/en/<u></u>cowboy/HEAD/guide/getting_<u></u>started/</a><div>
<div class="h5"><br></div></div></blockquote><div><br></div><div>I think this would be excellent as an "Advanced usage" section.</div><div><br></div><div>Your first paragraph says:</div><div><br></div><div><quote></div>
<div><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:14px;line-height:19.600000381469727px">Setting up a working Erlang application is a little more complex than for most other languages. The reason is that Erlang is designed to build systems and not just simple applications.</span><br>
</div><div></quote></div><div><br></div><div>I disagree - Erlang was designed for building systems AND simple applications.</div><div>Also "most other languages" are complex to set up.</div><div><br></div>
<div>(Actually the fast majority of things I write ARE simple, without releases and all that stuff. Releases are only for production quality run-forever stuff)</div><div><br></div><div>(aside - setting up a working C application - ie one that runs forever</div>
<div>and restarts after errors is *incredibly* difficult - so I'm not sure what your point of reference is here) </div><div><br></div><div>In Garrett's talk at EUC and in Katie Miller's keynote, both speakers emphasised the</div>
<div>importance of Erlang being not perceived as being complex and difficult to get started with. This is why I don't like first sentence in the "Getting started" guide.</div><div><br></div><div>If I'd said that in the first line of my Erlang book my editor would have asked me if</div>
<div>I actually wanted anybody to read the book.</div><div><br></div><div>I'd have said </div><div><br></div><div>"Getting started with cowboy is really really easy, just put this in a file ... and type this.</div>
<div>..."</div><div><br></div><div>Once you've got started you can gradually introduce more complex ideas.</div><div><br></div><div>And yes - I do use cowboy - but I don't build it in a release, and it can be</div>
<div>booted from an escript and we can make examples that show this.</div><div><br></div><div>Cheers</div><div><br></div><div>/Joe</div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div><div class="h5">
<br>
On 06/12/2014 04:54 PM, Joe Armstrong wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div class="h5">
Re: Garrett's great talk at EUC2014<br>
<br>
The point has been made many times before that<br>
"There are no easy Erlang getting started guides"<br>
<br>
So I thought I'd take a look at Node.js.<br>
<br>
The node js home page (node.js) starts with a simple example<br>
<br>
<br>
<quote><br>
var http = require('http');<br>
http.createServer(function (req, res) {<br>
   res.writeHead(200, {'Content-Type': 'text/plain'});<br>
   res.end('Hello World\n');<br>
}).listen(1337, '127.0.0.1');<br>
console.log('Server running at <a href="http://127.0.0.1:1337/'" target="_blank">http://127.0.0.1:1337/'</a>);<br>
<br>
To run the server, put the code into a file example.js and execute it<br>
with the node program from the command line:<br>
<br>
% node example.js<br>
Server running at <a href="http://127.0.0.1:1337/" target="_blank">http://127.0.0.1:1337/</a><br>
</endquote><br>
<br>
It's pretty easy to knock up an almost identical example in Erlang -<br>
using any of the well-known web<br>
servers in the background, unfortunately this has not been done, or if<br>
it has been done<br>
it's not easy to find the examples (or if there are examples I can't<br>
find them)<br>
<br>
I was vaguely thinking of making some examples that are more-or-less<br>
isomorphic to the<br>
node.js examples and then applying small transformation steps to turn<br>
then from idiomatic node.js code to idiomatic Erlang code.<br>
<br>
Although I could find a simple hello world example in node.js I could<br>
not find a tutorial that<br>
started with a simple example and then built on it in very small steps<br>
adding routing, authentication,<br>
database access and so on.<br>
<br>
Does anybody know of some examples of node.js that could be used for this.<br>
Cheers<br>
<br>
/Joe<br>
<br>
<br>
<br></div></div>
______________________________<u></u>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-questions</a><br>
<br><span class=""><font color="#888888">
</font></span></blockquote><span class=""><font color="#888888">
<br>
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu" target="_blank">http://ninenines.eu</a><br>
</font></span></blockquote></div><br></div></div>