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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just tweeted about this! This is a learning opportunity I’d regret missing out on <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326185" 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/elixir-in-action-book-club/63088/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-326185" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326185"
                     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="326200" data-post-id="326200">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi all!</p>
<p>I have read to the end of the first chapter and I just realized, how well structured the book is. There is a roadmap in the ‘about this book’ section, where the three big parts of the books are introduced and each part as well as each chapter starts with a summary of the content to expect. I like this!</p>
<p>The first chapter until 1.1.1 gives an easy to follow overview of the historical development of Erlang and how its use cases in telecommunication applications resulted in a language specialized in fault tolerance and concurrency.</p>
<p>1.1.2 limited my reading flow a little bit, as the technologies which work together to handle concurrency are described more explicit. In my opinion, the part about how the BEAM, the OS and the hardware interact together would profit from more details or a reference to later chapters here. At the end of this subchapter, I have questions about how the BEAM schedulers utilize CPU cores and threads and OS processes to achieve concurrency and fault tolerance optimization. Even how distribution between instances or computers is archived stays vaguealy.<br>
At this point, I am curious, if this gets clearer from later chapters. I hold a hope, that part 2 lightens things up!</p>
<p>The following subchapters were more easy to follow again. Erlang is compared to microservice architectures and Elixir is introduced as a more elegant language to write code for the beam. Speed and the Ecosystem are listed as disadvantages.</p>
<p>I am looking forward to the next chapters.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326200" data-batch-url="/posts/batch_likers">
                        6
                      </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/elixir-in-action-book-club/63088/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-326200" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326200"
                     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="326240" data-post-id="326240">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have completed chapter 1 also.  It was nice to be reminded of why I was first attracted to Erlang, primarily the fault tolerance and concurrency aspects of it.  Though I did not get a chance to create a production system with it, the demo I created using RabbitMQ left a lasting impression and made me eager to try more.  Unfortunately, management chose a different technology because it was felt Erlang was too hard to learn.  I still disagree.</p>
<p>I knew that WhatsApp was built on Erlang, but had forgotten that Discord was also.</p>
<p>Listing 1.3 mentions use <code>ExActor.GenServer</code>.  I don’t recall seeing ExActor used in other places.  Are these simplifying libraries not as commonly shared or do folks usually just write their own?</p>
<p>Section 1.3.1 Speed mentions the other languages of C and C++.  I always thought of Rust in this context, though it wasn’t mentioned.  Is the integration of it not as common?</p>
<p>Should we mention typos here?  In 1.1 is this sentence: “It’s acceptable if an occasional request fails due to a bug, but it’s a major problem if the entire system <strong>to</strong> becomes completely unavailable.”  That ‘<strong>to</strong>’ should be removed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326240" data-batch-url="/posts/batch_likers">
                        5
                      </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/elixir-in-action-book-club/63088/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-326240" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326240"
                     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="326242" data-post-id="326242">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I totally agree that Erlang is not a hard language to learn. In fact I would argue it is easier than Elixir with a handful of syntax policies. However, it gives you a cultural shock (<code>.</code> vs <code>,</code> vs <code>;</code>, Pascal cased variable and underscored atoms etc), those subtle differences in syntax, closer to English punctuation, takes a toll on you initially as you try to read the code. But to learn it is easy – to get fluency in reading could take slightly longer than say, C or Ruby family of languages.</p>
<p>Exactor was great as a learning tool for me, not that I used it, but I pry opened the source code and learned from it. When I first encountered <code>gen_server</code> it was a little overwhelming to me, wiring my thought process with how behaviours work (and the “dynamism” of it) took more time than I’d like it to, but then when I read this book and saw the mentioning of <code>ExActor</code>, I went to Github, saw the code and went backwards from there, tracing <code>GenServer</code>, it helped me with the concept (I knew about macros so that helped)</p>
<p>Now back to your original question, I think keeping the <code>GenServer</code> explicit helps with folks comprehending your code – whether they come from Elixir or Erlang. It’s just a contract involving some callback and state management. So I can’t speak for the community, but I’d like to stick to a pattern that is committed to the muscle memories of mine and anyone I onboard, and have more examples in the wild. Which is probably a reason I personally wouldn’t use <code>ExActor</code></p>
<p>Interesting observation on <code>1.3.1</code> + <code>Rust</code> though <img src="https://forum.elixirforum.com/images/emoji/apple/thinking.png?v=15" title=":thinking:" class="emoji" alt=":thinking:" 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="326242" data-batch-url="/posts/batch_likers">
                        5
                      </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/elixir-in-action-book-club/63088/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-326242" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326242"
                     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="326246" data-post-id="326246">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve just finished chapter 1, and I must say, the introduction to the ‘what and why’ behind Erlang and Elixir is excellently presented. Although I feel like the key points Saša discusses are already fairly widely recognized (in the Elixir bubble that I live in, at least!), his articulation of the points is notably direct and clear. In some ways the clarity brought me back to many of the excellent talks Saša has given over the years.</p>
<p>I particularly valued the overview of what Elixir offers, specifically in terms of reducing boilerplate and enhancing the developer experience with tools like Mix and Hex. While I’ve never worked directly on a pure Erlang project, this introduction has definitely sparked my interest to do so! I believe that exploring some Erlang could not only deepen my appreciation for Elixir’s developer experience but also help me understand the inherent simplicity of Erlang as a language. This might even be my key takeaway from this chapter!</p>
<p>Lastly, I really appreciate that the book addresses the limitations of these languages right from the start, rather than avoiding the topic. Understanding both the strengths and limitations of Erlang and Elixir is crucial for making informed decisions. This balanced perspective is important for leveraging the capabilities of Erlang and Elixir while compensating for their weaknesses with other technologies or approaches as needed. Not knowing about the downsides or challenges up front could lead to unpleasant surprises down the road, and so it’s wonderful that this is brought up immediately.</p>
<blockquote>
<p>Listing 1.3 mentions use <code>ExActor.GenServer</code>. I don’t recall seeing ExActor used in other places. Are these simplifying libraries not as commonly shared or do folks usually just write their own?</p>
</blockquote>
<p>As for the topic of GenServers and ExActor, it seems that the library is only mentioned to illustrate how much further can be abstracted away with Elixir. Saša himself cautions against actually using the library in this chapter, warning that it obscures the important details of how GenServers work. This point from Saša is further emphasized in the <a href="https://github.com/sasa1977/exactor/commit/dec3a71c8b17f3325cf8078b5d93cd0c66c0ce90" rel="noopener nofollow ugc">ExActor repository’s README, particularly this commit from years ago</a> <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">. I would have to agree with the sentiment here, as GenServers are such a fundamental building block for many Elixir systems.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326246" data-batch-url="/posts/batch_likers">
                        6
                      </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/elixir-in-action-book-club/63088/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-326246" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326246"
                     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 #15"></div>
  </section>
</div>
    <div class="postbit" id="326251" data-post-id="326251">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bjorng" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjorng/120/13187_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bjorng
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Erlang Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Having the read the first chapter of the book, I don’t have much to say. I think it is a really good introduction to the BEAM, Erlang, and Elixir, with just the right amount of details.</p>
<aside class="quote no-group" data-username="AstonJ" data-post="11" data-topic="63088">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/astonj/48/15_2.png" class="avatar"> AstonJ:</div>
<blockquote>
<p>The mighty <a class="mention" href="/u/bjorng" rel="nofollow">@bjorng</a> will be joining as well! <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>
</blockquote>
</aside>
<p>Thanks for that introduction! Now I must try to live up to it. <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>I will take this opportunity to introduce myself and my experience of programming in Elixir.</p>
<p>I wrote my first Elixir programs in December of 2018. José posted a few screencasts showing the puzzles in <a href="https://adventofcode.com" rel="noopener nofollow ugc">Advent of Code</a>. I immediately decided that I wanted to solve the puzzles while learning Elixir. It turned out that the puzzles themselves was the hardest part. Learning Elixir (enough to solve the puzzles) was easy. I read the <a href="https://elixir-lang.org/crash-course.html" rel="nofollow">crash course for Erlang developers</a> to get going and then I learned more by looking at the <a href="https://forum.elixirforum.com/search?q=advent%20of%20code%202018" rel="nofollow">other solutions in the forum</a>, and especially at <a class="mention" href="/u/sasajuric" rel="nofollow">@sasajuric</a>’s elegant solutions using <code>Enum</code>, <code>Stream</code>, and the pipe operator.</p>
<p>Here is a little about myself and my work in the OTP team.</p>
<p>I am the Björn in “Bogdan/Björn’s Erlang Abstract Machine (BEAM)” mentioned in the book.</p>
<p>I joined the OTP team at the end of 1996, and the first Erlang/OTP release in which some of my code was included was OTP R1D. A few years later, when the inventor of BEAM, Bogumil “Bogdan” Hausman, left Ericsson, I became the main developer responsible for BEAM.</p>
<p>To put that in context, I’ll need to explain how the meaning of the word “BEAM” has changed. Nowadays, the word “BEAM” (at least in common speech) seems to have evolved to mean the entire runtime system for Erlang. That it is also the sense used in the book.</p>
<p>At that time (OTP R1 through OTP <s>R6</s> R5), there existed two Erlang implementations side by side: Joe Armstrong’s original JAM (Joe’s Abstract Machine) and BEAM. They shared the source of the runtime system (scheduler, BIFs, garbage collector, ETS, drivers, and so on).</p>
<p>“BEAM” at that time only referred to the part of the runtime system that executed the BEAM instructions. That is the part that I spent many years on improving and maturing so that it could replace JAM completely. My own invention in that area is the <a href="https://www.erlang.org/doc/apps/erts/beam_makeops" rel="nofollow">loader of BEAM code</a>.</p>
<p>My blog post <a href="https://www.erlang.org/blog/beam-compiler-history/" rel="nofollow">A Brief History of the BEAM Compiler</a> goes beyond its title, giving more details on the early Erlang implementations in general, and BEAM and my involvement in its development in particular.</p>
<p>Returning to the book, the only thing that I think could have been added and is perhaps worth adding in the fourth edition, is a mention of the JIT (Just-In-Time compiler) in the Speed section. As written in the book, we in the OTP team do try to keep the performance as predictable as possible, but we also try to improve the raw performance with the goal to make it less frequently necessary to use libraries or programs implemented in C/C++/Rust. But my opinion in that matter is hardly unbiased. <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>Perhaps another language feature is worth emphasising: the bit syntax/binary syntax.  It makes parsing of binary protocols much easier than in most other languages.  For example, the PER encoding rules for ASN.1 is a nightmare to implement in other languages, but quite easy to implement in Erlang/Elixir using the bit syntax.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326251" data-batch-url="/posts/batch_likers">
                        36
                      </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/elixir-in-action-book-club/63088/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-326251" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326251"
                     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 #16"></div>
  </section>
</div>
    <div class="postbit" id="326257" data-post-id="326257">
  <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
                    <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 group-Erlang-Core-Team" data-username="bjorng" data-post="17" data-topic="63088">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjorng/48/13187_2.png" class="avatar"> bjorng:</div>
<blockquote>
<p>Thanks for that introduction! Now I must try to live up to it. <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>
</blockquote>
</aside>
<p>*<em>Reads the rest of your post..</em></p>
<p>You already have Björn <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" loading="lazy" width="20" height="20"></p>
<p>Would also like to take this opportunity to thank you and everyone else who has worked or works on Erlang and the BEAM - Elixir and this community only managed to get to where it has because of you and all your hard work spanning decades <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/purple_heart.png?v=15" title=":purple_heart:" class="emoji" alt=":purple_heart:" 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="326257" data-batch-url="/posts/batch_likers">
                        14
                      </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/elixir-in-action-book-club/63088/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-326257" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326257"
                     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 #17"></div>
  </section>
</div>
    <div class="postbit" id="326287" data-post-id="326287">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have also finished reading chapter 1. I am a huge fan of this book and own every edition. First as <a class="mention" href="/u/astonj" rel="nofollow">@AstonJ</a> mentioned, a huge thank you to <a class="mention" href="/u/bjorng" rel="nofollow">@bjorng</a> and everyone else who has worked on Erlang and the BEAM. You and the team are the reason we exist as a community and we truly are riding on the shoulders of giants.</p>
<p>I really enjoyed how the features of Erlang were described and the high level image of how Erlang concurrency works. Sometimes I think as a community we may be better off communicating Elixir as a concurrent programming language that happens to be functional.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326287" data-batch-url="/posts/batch_likers">
                        6
                      </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/elixir-in-action-book-club/63088/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-326287" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326287"
                     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 #18"></div>
  </section>
</div>
    <div class="postbit" id="326300" data-post-id="326300">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If you haven’t already, the Foreword and Preface are not to be missed.</p>
<p>I am being slow this time but I wanted to mention one thing I admire about whatever %-age I am at: Each and every paragraph is arranged in a very meaningful, cohesive way.</p>
<p>On this comment I would like to talk about Table 1-1. The famous table where Erlang is the answer of all your infrastructural aspects versus other languages.</p>
<p>I had a few friends pointed out to me that is it not true and other solutions could potentially be better (ie Redis vs ETS or an Mongo vs Mnesia), but I have a different take to it.</p>
<p>Firstly, if you are Erlang shop, those could take you longer way than others before you make an infrastructural change, and perhaps would keep you in line about dropping to a cache and inventing your own design pattern - since chances are Erlang has some opinion and behaviour around those you might not do it wrong.</p>
<p>Secondly, when you learn Erlang (and Elixir — as we will experience as we go through this book), you don’t experience just the programming language, but the whole enchilada — runtime, process management, distributed and concurrency aspects of it. This feels like opening a book on programming and distributed systems in one go, and for a system to be distributed and stand alone, you need to have things like data store, cache, timer, fsm, dag, event etc built in. So you are 100% armed and ready with Erlang if you open up say, those system design guides, or the classic data intensive book, you can reason about those in code with Beam. When I was interviewing those boring (sorry, big companies) System Design interviews that pluck problems out of Grok book, I could literally see how I could build prototypes of the entire infrastructure only with Erlang or Elixir.</p>
<p>That is what I took from that table and I am grateful for the direction and rationale that one table provided me with.</p>
<p>Sorry for the long post.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326300" data-batch-url="/posts/batch_likers">
                        9
                      </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/elixir-in-action-book-club/63088/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-326300" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326300"
                     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 #19"></div>
  </section>
</div>
    <div class="postbit" id="326443" data-post-id="326443">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I had a similar interpretation of that table.  It wasn’t that Erlang is the <em>best</em> at all of those tasks, but that all of those tasks are <em>possible</em> in Erlang.  Then, if that prototype or early version proves insufficient, that single portion could be replaced with something else.  There is no reason to start with many different technologies when using just Erlang may be sufficient.  This also is not rejecting other technologies simply due to a ‘not invented here’ syndrome.  For example, if a queuing mechanism is needed, RabbitMQ may be an option and would still be implemented in Erlang.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="326443" data-batch-url="/posts/batch_likers">
                        7
                      </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/elixir-in-action-book-club/63088/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-326443" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="326443"
                     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 #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/63088/load_more?page=3">Load more posts (76 remaining)</a>
</div></template></turbo-stream>