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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="93" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>and is reflected in how many of us “organize” our homes as well.</p>
</blockquote>
</aside>
<p>Yeah, I also think it’s similar to how I work in general life, compartmentalizing things when they become too large.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="93" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>I keep looking for excuses to use it and that might be the one.</p>
</blockquote>
</aside>
<p>You can use this particular mix task without needing to setup boundaries or add the boundary compiler. I.e. just add the lib as a dependency (I think even <code>runtime: false</code> is enough) and invoke the task on some module.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="204309" data-batch-url="/posts/batch_likers">
                        3
                      </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/on-why-elixir/34038/94">Post #93</a>
	                </div>
	            </div>
              <div id="likers-container-204309" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="204309"
                     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 #93"></div>
  </section>
</div>
    <div class="postbit" id="204676" data-post-id="204676">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="shanesveller" data-post="1" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/shanesveller/48/7962_2.png" class="avatar"> shanesveller:</div>
<blockquote>
<p>I increasingly value provably correct software, which for me means an actual type of system to go with your good testing practices</p>
</blockquote>
</aside>
<p>A powerful type system is a good thing to have but it’s even of lesser value than tests when it’s coming to proving the logical correctness of the software.<br>
At the end of the day, only good software development practices can save it.</p>
<p>And it’s about working with your teammates on software as a team.</p>
<p>I see this trend of techies trying to solve socio-technical problems with more tech and I think about how pervasive that practice is.<br>
To quote “When Coffee  &amp; Kale Compete”.</p>
<blockquote>
<p>I feel that way especially with software because we have the analytics and the geeks who are building the software; they’re all about tracking and logging and all these data…I always give the analogy of being a retail shop owner and hiding in the back room and trying to learn from your customers by watching the closed-circuit television.<br>
You could watch [customers] come in, walk around your store, pick up things, put them down, try things on…or you could just walk out and ask them, “Hey, what brought you in here today? What are you looking for? What other places did you try in the past?”</p>
</blockquote>
<p>And  I believe this is at least a part of the reason why people are migrating from Elixir to Go and then to Rust</p>
<blockquote>
<p>There is some noticeable brain-drain occurring, especially towards Rust and WASM.</p>
</blockquote>
<p>The hell one would prefer a language with rudimentary concurrency primitives for networking heavy-services? That’s really above my head.</p>
<p>I remember a conversation when crypto guys discussed that their node has a limit of 40 connections because async I/O in Rust sucks. They worked in a company that I hugely respect and which was valued above $500m.</p>
<p>Sure, the trade-off there is that Rust became the de-facto standard language for the new wave of crypto projects and it has all the cryptographic libraries which will be ridiculous to reimplement in Elixir (At least it was probably unfeasible before Nx).</p>
<p>But the point is that <strong>a team</strong> of developers working with a dynamic type system will deliver a better crafted piece of software that will serve their customers better than a group of individual developers working with a static type system.</p>
<p>TLDR: groups of individual contributors who don’t know how to write software together, as a team seeking shelter in their tools.</p>
<p>That doesn’t have to do anything with language.</p>
<p>disclosure: I do love Rust’s type system and it’s the next language that I want to learn because it will definitely expand my worldview.<br>
But not as nearly as Elixir who added notion of time to my everyday practice.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="204676" 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/on-why-elixir/34038/95">Post #94</a>
	                </div>
	            </div>
              <div id="likers-container-204676" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="204676"
                     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 #94"></div>
  </section>
</div>
    <div class="postbit" id="204678" data-post-id="204678">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>I see this trend of techies trying to solve socio-technical problems with more tech</p>
</blockquote>
</aside>
<p>This actually works for a lot of issues. The people who tend to write code negligently and without much care what gets passed to where don’t survive for long coding Rust, OCaml, Haskell, and the other compile-time typed languages.</p>
<p>Even outside that area, enforcing a simple pre-commit GIT hook – which is a tooling solution, not a programming language one – can do wonders for the productivity of the team.</p>
<p>I relate to the argument that not all social / economic / politic issues can be solved by tech. That’s true. But it’s a bit too extreme a view for my taste because my practice has shown that forcing people to “behave” with good tooling (or a strict programming language) works.</p>
<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>or you could just walk out and ask them, “Hey, what brought you in here today? What are you looking for? What other places did you try in the past?”</p>
</blockquote>
</aside>
<p>Strange example. I’d definitely leave the store and not return there anytime soon. There are acceptable and unacceptable ways of gathering metrics / analytics.</p>
<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>I remember a conversation when crypto guys discussed that their node has a limit of 40 connections because async I/O in Rust sucks. They worked in a company that I hugely respect and which was valued above $500m.</p>
</blockquote>
</aside>
<p>I’ve been in one such company last year. Rust’s async has been improving literally every week, for months. We ended up having one Kubernetes pod with 4 vCPUs and 8GB RAM with a NVMe SSD storage that peaked at about 150,000 parallel requests.</p>
<p>Rust’s async used to suck but the community is extremely dedicated and things are improving with an impressive speed.</p>
<p>I agree it’s not OTP, of course; nobody has beat that so far. But Rust is getting fairly close, trust me.</p>
<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>But the point is that <strong>a team</strong> of developers working with a dynamic type system will deliver a better crafted piece of software that will serve their customers better than a group of individual developers working with a static type system.</p>
</blockquote>
</aside>
<p>I’ve seen this but I’ve seen the other extreme as well. This can’t be generalized.</p>
<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>That doesn’t have to do anything with language.</p>
</blockquote>
</aside>
<p>Agreed. Good devs find ways around the problems in their ecosystem and even make them work to their advantage. Example: we might not have compile-time typing guarantees in Elixir but between mocks and property tests you can gear your system with a very heavy anti-bug armor.</p>
<p>Bad devs will screw up no matter what they work with.</p>
<aside class="quote no-group" data-username="lessless" data-post="95" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lessless/48/6719_2.png" class="avatar"> lessless:</div>
<blockquote>
<p>But not as nearly as Elixir who added notion of time to my everyday practice.</p>
</blockquote>
</aside>
<p>That one I fully agree with. Elixir is extremely productive. You can test your idea with just a few lines in <code>iex</code> and prototype a solution in minutes.</p>
<p>Rust’s iteration cycles are very punishing in terms of an up-front cost and this can be quite annoying.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="204678" 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/on-why-elixir/34038/96">Post #95</a>
	                </div>
	            </div>
              <div id="likers-container-204678" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="204678"
                     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 #95"></div>
  </section>
</div>
    <div class="postbit" id="204685" data-post-id="204685">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>The people who tend to write code negligently and without much care what gets passed to where don’t survive for long coding Rust, OCaml, Haskell, and the other compile-time typed languages.</p>
</blockquote>
<p>I’m talking about empowering customers with new capabilities. That’s on the other level than codebase aesthetics and the absence of errors related to type conversion.<br>
If someone doesn’t have the skills to adhere to the quality bar you do pair-programming, let them have time to learn and practice deliberately until a problem is solved.</p>
<p>They will either raise to the brighter part of the hill or will continue their journey where they don’t have to be under the light constantly.</p>
<blockquote>
<p>But it’s a bit too extreme a view for my taste because my practice has shown that forcing people to “behave” with good tooling (or a strict programming language) works.</p>
</blockquote>
<p>I stick to the theory that people want to become better at what they’re doing. And either developing software is not important for them or the company doesn’t give them a chance to unveil their potential.</p>
<blockquote>
<p>But it’s a bit too extreme a view for my taste because my practice has shown that forcing people to “behave” with good tooling (or a strict programming language) works.</p>
</blockquote>
<p>Practice can show only that something is not inherently wrong, not that something is completely right.</p>
<blockquote>
<p>Rust’s async used to suck but the community is extremely dedicated and things are improving with an impressive speed.</p>
</blockquote>
<p>That’s great to know!</p>
<blockquote>
<p>This can’t be generalized.</p>
</blockquote>
<p>I’m willing to bet my last penny on that. Give complicated enough domain space, decently sized company, and two-three years timeframe. <strong>Team</strong> will always win over a group of individual contributors.</p>
<blockquote>
<p>That one I fully agree with. Elixir is extremely productive. You can test your idea with just a few lines in <code>iex</code> and prototype a solution in minutes.</p>
</blockquote>
<p>I meant long-lived processes that outlive individual I/O requests/response cycles.  They add a dimension of time to the app.</p>
<blockquote>
<p>Rust’s iteration cycles are very punishing in terms of an up-front cost and this can be quite annoying.</p>
</blockquote>
<p>Not only Rust. Again, Rust is a great language. There is no intention to start a flame or language-politics discussion here.</p>
<p>Software is an implementation of a conceptual model and every day we learn more and more about it.<br>
Compare yourself after one year in a project and after two years.<br>
You are more knowledgeable and understand how abstractions should be structured much better than you did before.<br>
But how many teams update their codebases to reflect their updates in their conceptual models?<br>
Many of them prefer to go through hoops of mental-mapping while writing code.</p>
<p>And that’s what makes people neglectable to their professional duties and become disappointed in their software development careers.</p>
<p>Even worse - junior developers are being poisoned into thinking that it’s the only possible way to go.</p>
<p>And then you have to add tools to “force” people into doing things, instead of having them as just a safeguard against a silly mistake.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="204685" 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/on-why-elixir/34038/97">Post #96</a>
	                </div>
	            </div>
              <div id="likers-container-204685" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="204685"
                     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>