<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="32241" data-post-id="32241">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="peerreynders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/120/5826_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  peerreynders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="ericmachine88" data-post="8" data-topic="4972">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmachine88/48/3051_2.png" class="avatar"> ericmachine88:</div>
<blockquote>
<p>as sometimes some developers would relate to Ruby on Rails (which I have never done that before, confused to be honest). The pattern matching .. the %{} .. oh gosh, not to complain <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>The Ruby comparison is kind of shallow (and not that helpful) - I would describe it as Erlang with a “Ruby-esque” coat of paint; and “coat of paint” really doesn’t do justice to the Elixir meta-programming (macro) facilities. In the end I found Elixir to be “less strange” than Ruby.</p>
<p>Pattern matching is part and parcel with recursion and higher order functions, the <a href="http://blog.plataformatec.com.br/2016/05/beyond-functional-programming-with-elixir-and-erlang/" rel="noopener nofollow ugc">practical FP</a> backbone of Elixir/Erlang. PE introduces these ideas much more gradually, while EIA crams them all into Chapter 3 (so it’s a great focused recap after PE’s “Part 1 - Conventional Programming”; n.b. “Sequential Programming” would have been a better heading).</p>
<aside class="quote no-group">
<blockquote>
<p>But I think Elixir in Action was dated back in 2015, the concepts still workable? I saw a comment here where HashDict was deprecated</p>
</blockquote>
</aside>
<p>With Erlang R18:</p>
<blockquote>
<p>erts/compiler: enhanced support for maps. Big maps new uses a HAMT (Hash Array Mapped Trie) representation internally which makes them more efficient. There is now also support for variables as map keys.</p>
</blockquote>
<p><a href="http://theerlangelist.com/article/eia_elixir_12" rel="noopener nofollow ugc">The Erlangelist: Elixir 1.2 and Elixir in Action</a></p>
<blockquote>
<p>For Elixir in Action, this means that all the code that’s using HashDict should be changed to use maps. Most notably, the Todo.List abstraction should internally use maps to maintain the entries field. You can see the changes in this <a href="https://github.com/sasa1977/elixir-in-action/commit/51bc04bf48730bfbb6141ad781f8300cc6e91db5" rel="noopener nofollow ugc">commit</a>.</p>
</blockquote>
<p>i.e. whenever you see <code>HashDict</code> just replace it with a map <code>%{}</code> and functions from <a href="https://hexdocs.pm/elixir/Map.html" rel="noopener nofollow ugc"><code>Map</code></a>.</p>
<p>While EIA may not introduce you to the syntactical niceties of Elixir 1.2, 1.3, or 1.4 it’s code and solution approach is absolutely solid because it’s founded in mature and established Erlang practice.</p>
<aside class="quote no-group">
<blockquote>
<p>What kind of app will work or suitable for Elixir? Any tips?</p>
</blockquote>
</aside>
<p>Watch <a href="https://www.youtube.com/watch?v=5SbWapbXhKo" rel="noopener nofollow ugc">ElixirDaze 2017- Solid Ground by Saša Jurić</a>.</p>
<p>Also Elixir is an extension of the Erlang ecosystem so you may be interested in this: <a href="https://www.youtube.com/watch?v=iMhBEVCgPdg" rel="noopener nofollow ugc">Erlang and Deep Learning by Garrett Smith</a></p>
<p>[quote]Wonder to what extend should I know how to use elixir before I can touch Phoenix, as I am more keen to build web app (SPA) and API <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"><br>
[/quote]</p>
<p>You really benefit if you have your head wrapped around “OTP Applications” first. The currently favoured Phoenix design approach is:</p>
<ul>
<li>Put your (arbitrarily complex) business logic in an OTP application.</li>
<li>Then use Phoenix to expose that functionality to the Web either via HTTP requests or web sockets, for web pages or SPAs.<br>
i.e. don’t entangle your business logic with the web backend (FYI: <a href="http://samnewman.io/patterns/architectural/bff/" rel="noopener nofollow ugc">Patterns: Backends For Frontends</a>).</li>
</ul>
<p>In fact many Phoenix resources will focus on using <a href="https://hexdocs.pm/eex/EEx.html" rel="noopener nofollow ugc">EEx</a> <a href="http://www.phoenixframework.org/docs/templates" rel="nofollow">templates</a> for web pages. Phoenix can support SPAs but the SPA is largely a concern separate from Phoenix (and Elixir). Some (FP-style) frontend technologies are <a href="http://elm-lang.org/" rel="noopener nofollow ugc">Elm</a>, <a href="http://www.purescript.org/" rel="noopener nofollow ugc">PureScript</a> (<a href="https://youtu.be/9kGoaUqcq4A" rel="noopener nofollow ugc">Building a Graphical IDE in Elm/Purescript</a>), <a href="https://bloomberg.github.io/bucklescript/" rel="noopener nofollow ugc">BuckleScript</a> and of course <a href="https://forum.elixirforum.com/t/elixirscript/2409" rel="nofollow">ElixirScript</a>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="32241" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/are-these-courses-updated-and-suitable-for-elixir-phoenix-beginners/4972/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-32241" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="32241"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="32244" data-post-id="32244">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ericmachine88" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmachine88/120/3051_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ericmachine88
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="peerreynders" data-post="12" data-topic="4972">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>ElixirDaze 2017- Solid Ground by Saša Jurić</p>
</blockquote>
</aside>
<p>Thanks all <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>I will watch those recommended videos/links</p>
<p>Anyway I just purchased my 1st elixir book - PE 1.3 <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> (using elixir coupon here) good luck to me.. but i will watch the code school 3 free videos first … i hope i could brainwash myself in time for FP <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"> hehe</p>
<p>one noob question.. so when you code FP, does that mean you no longer code OOP or believe OOP is suitable for software dev?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="32244" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/are-these-courses-updated-and-suitable-for-elixir-phoenix-beginners/4972/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-32244" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="32244"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="32248" data-post-id="32248">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AstonJ" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AstonJ/120/15_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AstonJ
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice one - welcome to Elixir <img src="https://forum.elixirforum.com/uploads/default/original/2X/6/6c3193d1dd46244da3c8c6f719c9f5e2abdd5ae8.gif?v=15" title=":003:" class="emoji emoji-custom" alt=":003:" loading="lazy" width="20" height="20"></p>
<p>Just remember that it’s ok if you need to re-read chapters if they don’t make sense first time around - I had to do that even when I was learning Ruby and it is said to be one of the easiest languages to learn <img src="https://forum.elixirforum.com/uploads/default/original/2X/7/776053aa22968f83c10e90c98b23aa0ddd5c9d47.gif?v=15" title=":lol:" class="emoji emoji-custom" alt=":lol:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="32248" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/are-these-courses-updated-and-suitable-for-elixir-phoenix-beginners/4972/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-32248" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="32248"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="32249" data-post-id="32249">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="peerreynders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/120/5826_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  peerreynders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="ericmachine88" data-post="13" data-topic="4972">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmachine88/48/3051_2.png" class="avatar"> ericmachine88:</div>
<blockquote>
<p>so when you code FP, does that mean you no longer code OOP or believe OOP is suitable for software dev?</p>
</blockquote>
</aside>
<p>What is OOP to you? According to <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html" rel="noopener nofollow ugc">Alan Kay (1998)</a> concurrent Elixir/Erlang <em>is</em> true OO, not what C++/Java/C# et al cranked out.</p>
<blockquote>
<p>I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea. The big idea is “messaging” …</p>
</blockquote>
<p>That being said there still is a lot of valuable wisdom in the SOLID principles (when “ported” correctly). But there is certainly some disillusionment with regards to the sometimes dogmatic OO that is being practiced in the industry.</p>
<p><a href="https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53" rel="noopener nofollow ugc">Charles Scalfani: Goodbye, Object Oriented Programming - Medium</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="32249" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/are-these-courses-updated-and-suitable-for-elixir-phoenix-beginners/4972/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-32249" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="32249"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="85088" data-post-id="85088">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mardo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mardo/120/10305_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mardo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The one from udemy was my introduction less than a year ago. If you follow through, there may be a couple of things you have to change/debug/update (I had to sit through 4 bugs because of updates), but I felt that it helped me a lot.<br>
The guy follows a straight path to developing a sort of big phoenix app and the debugging process was pretty hard in 2-3 points, but nothing you can’t manage and debugging it was pretty enlightening.<br>
Aside from that, the book from O’Reilly press, I believe to be quite thorough and understandable.<br>
Happy learning!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="85088" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/are-these-courses-updated-and-suitable-for-elixir-phoenix-beginners/4972/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-85088" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="85088"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>