<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>It might help to read "Erlang & OTP in Action" and work
      through the exercises.  It provides a pretty thorough,
      step-by-step view of building a meaningful application in Erlang.<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 12/15/16 7:04 AM, IRLeif wrote:<br>
    </div>
    <blockquote
cite="mid:CAJYp+xt3su6Q4ob_GVTsngDUKqSWZV+3SM6B-MjEzmV0bhfqvQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>Dear Erlang community,</div>
        <div><br>
        </div>
        <div>This is my first email to the mailing list. I apologize in
          advance if this is odd or off-topic.</div>
        <div><br>
        </div>
        <div>Coming from an object-oriented and data-centric background,
          I have cognitive difficulties when it comes to
          conceptualizing, thinking about and designing systems
          consisting of modules, processes and key-value data stores.</div>
        <div><br>
        </div>
        <div>My brain reverts to thinking about classes, objects,
          inheritance trees, encapsulation and SQL-style relational data
          models. I'm afraid this could lead to unidiomatic Erlang
          system architectures and implementations, which would be
          undesirable.</div>
        <div><br>
        </div>
        <div>Here are some of the essential complexities I have
          difficulties grasping:<br>
          <br>
        </div>
        <div>A) Identifying discrete modules and processes and finding
          good names for them.</div>
        <div>B) Appointing supervisor and worker modules; defining
          process hierarchies.</div>
        <div>C) Deciding which processes should communicate with each
          other and how.</div>
        <div>D) Designing a sensible persistent data model with Mnesia
          or other NoSQL data models (e.g. using CouchDB).</div>
        <div>E) Deciding which processes should read and write
          persistent data records.</div>
        <div>F) Incorporating global modules/"shared facilities" like
          event handlers, loggers, etc.</div>
        <div>G) Visualizing the system architecture, processes and
          communication lines; what kind of graphics to use.</div>
        <div>H) Organizing source code files into separate projects and
          directory structures.</div>
        <div><br>
        </div>
        <div>Questions:</div>
        <div><br>
          1) How do you unlearn "bad habits" from object-oriented way of
          thinking?</div>
        <div>2) How do you think and reason about process-centric
          systems designs?<br>
          3) When designing a new system, how do you approach the above
          activities?</div>
        <div><br>
        </div>
        <div>I would appreciate any practical tips, examples, "mind
          hacks" and resources that might help.</div>
        <div><br>
        </div>
        <div>Kind regards,</div>
        <div><br>
        </div>
        <div>Leif Eric Fredheim</div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
erlang-questions mailing list
<a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
In theory, there is no difference between theory and practice.
In practice, there is.  .... Yogi Berra</pre>
  </body>
</html>