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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="keathley" data-post="10" data-topic="22076">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/keathley/48/2652_2.png" class="avatar"> keathley:</div>
<blockquote>
<p>Hey wait a minute!</p>
</blockquote>
</aside>
<p><img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<p>Let me explain,</p>
<p>I love the concept of podcasts and believe they generally can be a great resource. However, I’m a very visual learner and person - so if I “just” listen to something, no matter how interesting, I feel like I should do something with my eyes and am otherwise “bored”.</p>
<p>I tried coding while listening to podcasts, that works as long as I do easy features or refactorings I’ve done a hundred times already. One bug or architecture decision though and see you back here in ~30 minutes with no idea what anyone said on the podcast.</p>
<p>These days the only time I really listen to podcasts is when I go by bus (I get sick when I read in a bus). I kind of want to listen to podcasts more (especially the outlaws as I heard many great things about it) so I’m looking for opportunities like going jogging again, longer chores at home, inhaling or ???</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="127000" 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-explicit-is-better-than-implicit/22076/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-127000" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="127000"
                     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="127230" data-post-id="127230">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve been trying to figure out how to inhale podcasts since I quit driving 100 miles each way to work. Even then I would listen to the same podcast multiple times because my brain would wander in the middle of it. I sometimes miss that drive because of the thinking time, but seven years of it and I had to quit.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="127230" 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-explicit-is-better-than-implicit/22076/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-127230" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="127230"
                     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="127237" data-post-id="127237">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Since a few people haven’t listened to the podcast I thought I would try to explain some of the main points. I’m not sure I can enumerate everything here with as much nuance as we had on the show so I’d still recommend listening. But hopefully I can capture the main points.</p>
<p>I made the case on the show that a lot of the apis that people like in elixir tend to be highly implicit apis. I also made the case that explicit apis tend to be <em>worse</em> apis then implicit apis. That was my contrarian opinion. So now I’ll try to justify it.</p>
<p>When I’m talking about implicit apis what I’m really talking about is encapsulation. A key part of good api design is about hiding large amounts of complexity behind a small interface. If this is done well then the end user doesn’t ever notice the underlying complexity which is really as good as removing complexity altogether. The interface should be small for similar reasons. If you need to chain together multiple api calls in order to use a module then this is a more complicated api then an api that accomplishes the same goal through a single api call. A good example of this would be if every time you wanted to execute a query through ecto you also needed to check out the database connection yourself, parse and compile the query yourself, send the query to Postgres yourself, etc. I refer to APIs like this as “maximally explicit APIs”. They tend to be cumbersome to use and more error prone. But ftmp ecto hides all of this complexity and it’s a better api because of that.</p>
<p>But all of those details are “implicit” to us, the end users of Ecto. We don’t see how any of that stuff is managed from an api perspective. Sure there are escape hatches into that level of the system. But generally you don’t have to wander down there. At our layer of the stack the call to Repo is explicit, the query is explicit, and everything else is encapsulated.</p>
<p>Obviously those details are handled somewhere. If you work on a database pooling solution then you might have to care about them. But at our layer we’re able to ignore them and instead be more explicit about our domain logic.</p>
<p>The trend I see is that people have taken advice like “explicit is greater than implicit” and are carrying it a little too far. If you build a “maximally explicit” api then you quickly start to limit your ability to encapsulate complexity. If you take explicitness to it’s limit then encapsulation becomes impossible.</p>
<p>I think when people say they want explicit APIs over implicit APIs what they really are saying is “don’t surprise me”. If you say to ecto “run this query” you expect it to run the query. You don’t expect it to run the query and also buy you a toaster. The rails example you mention <a class="mention" href="/u/pragtob" rel="nofollow">@PragTob</a> is a great example of a surprising api. It’s almost like it was <em>designed</em> to create surprise through indirection.</p>
<p>I think what we ought to be heading for are APIs that encapsulate large amounts of complexity - which means APIs that hide implicit details - and have few if any surprises. It’s a tricky balance. But I think that’s the correct strategy.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="127237" data-batch-url="/posts/batch_likers">
                        11
                      </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-explicit-is-better-than-implicit/22076/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-127237" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="127237"
                     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="128150" data-post-id="128150">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>What I find interesting is that most of this discussion about being explicit is about <em>explicit actions/implementation details</em>. I find being explicit <em>very</em> important but I look at it from different perspective.</p>
<p>When I search for the meaning of explicit I get the following:</p>
<p><em>stated clearly and in detail, leaving no room for confusion or doubt.</em></p>
<p>To me it’s all about being explicit about the <em>meaning</em> of the code. The part <em>leaving no room for confusion or doubt</em> is very important. This ties in to “don’t surprise me”. What the code <em>says</em> it will do, and what it <em>actually does</em> when you call it, should match. And it only should use the <em>appropriate</em> actions to get to that outcome. No surprises. How much detail you need depends on the context.</p>
<p>I would say this:</p>
<p><em>stated clearly and with enough detail as to leave no room for confusion or doubt about the outcome in the current context.</em></p>
<p>Here’s a simple javascript example</p>
<pre data-code-wrap="javascript"><code class="lang-javascript">if (person.sex === 1 and person.children.length &gt; 0) { ...do something... }
</code></pre>
<p>From a technical standpoint this is very explicit. I know what it’s checking. But I have no clue what the meaning is from a business logic point of view.</p>
<pre data-code-wrap="javascript"><code class="lang-javascript">if (person.isFemale() and person.hasChildren()) { ...do something... }
</code></pre>
<p>This looks much better but it might only have made it more readable. What if this code is specifically about female parents. Is this clear from the if statement? You can assume it’s correct but maybe someone forgot a check. There’s still room for doubt.</p>
<pre data-code-wrap="javascript"><code class="lang-javascript">if (person.isFemaleParent()) { ...do something... }
</code></pre>
<p>To me this code is very explicit, yet it hides the details. It tells you exactly what the code cares about from a business perspective. There could be a bug in isFemaleParent but you know precisely what it’s supposed to check and there’s no confusion or doubt about the meaning.</p>
<p>In case of an API, be explicit about what it returns or what the outcome is. This can be an API contract. The consumer still wants you to be explicit, just about the outcome/result, <em>not</em> the implementation details. For example, with a GraphQL API you’re being explicit about what the consumer can ask for.</p>
<p>So I agree with your opinion about hiding complexity. I just believe being explicit should focus on the meaning/outcome of the code (in context), not the actual implementation details.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="128150" 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/on-explicit-is-better-than-implicit/22076/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-128150" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="128150"
                     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="128175" data-post-id="128175">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>A good example of this would be if every time you wanted to execute a query through ecto you also needed to check out the database connection yourself, parse and compile the query yourself, send the query to Postgres yourself, etc. I refer to APIs like this as “maximally explicit APIs”. They tend to be cumbersome to use and more error prone. But ftmp ecto hides all of this complexity and it’s a better api because of that.</p>
</blockquote>
<p>Agreed. I think that you should make something implicit <strong>when you can promise that callers won’t have to care about it</strong>. Ecto can keep this promise in all cases I’ve personally encountered, so I think this implicitness is good.</p>
<p>As another example, consider a Rails controller action from <a href="https://guides.rubyonrails.org/action_controller_overview.html" rel="noopener nofollow ugc">the guides</a>:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">class ClientsController &lt; ApplicationController
  def new
  end
end
</code></pre>
<blockquote>
<p>Note that the empty method from the example above would work just fine because Rails will by default render the <code>new.html.erb</code> view unless the action says otherwise.</p>
</blockquote>
<p>I don’t like this because 1) maybe 5% of the time I’ll need to make it render something different and 2) 100% of the time I need to <strong>know</strong> what file it’s going to render. To me it makes most sense if I always see an explicit <code>render</code>; that makes it obvious which file I should work on for the template and where I can specify to use a different one if necessary. But someone could argue that omitting the “standard” render lets you focus on the unique aspects of this controller, and you can be explicit if you prefer to. I’d say this implicitness is iffy.</p>
<blockquote>
<p>In ActiveRecord I define all the validations and callbacks in the model. Somewhere else I then call <code>save</code> and all of these are magically executed (with all the weird conditions applied in the model). I don’t see what is executed and in what order.</p>
</blockquote>
<p>In this case, buggy interactions between callbacks are easy to create and not fun to debug. Especially when you have callbacks that touch associations, associations that auto-load, etc. The promise is that you won’t have to care about how the callbacks run, but that promise gets broken. I’d say this implicitness is bad.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="128175" 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/on-explicit-is-better-than-implicit/22076/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-128175" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="128175"
                     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="128182" data-post-id="128182">
  <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="otijhuis" data-post="15" data-topic="22076">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/otijhuis/48/12102_2.png" class="avatar"> otijhuis:</div>
<blockquote>
<p><em>stated clearly and with enough detail as to leave no room for confusion or doubt about the outcome in the current context.</em></p>
</blockquote>
</aside>
<p>In functional languages “explicit” <em>also</em> means “…and don’t have my functions depend on external state if it can be at all helped, please”. Obviously when you work with files, console I/O, network etc. then it’s unavoidable. But “explicit” in the context of this thread carries the extra context of “functions should be idempotent and self-sufficient”.</p>
<p>Which also has its limits. As I mentioned in a previous comment, you wouldn’t want to specify your DB credentials on every call; in such cases having implicit state (the DB credentials, adapter, pooling options etc.) which is persisted and loaded from a non-obvious agent is still convenient. And as long as the programmers in the team don’t forget about these special cases – <em>and keep them to a minimum</em> – then a good balance between minimum WTFs/minute and convenience is achieved.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="128182" 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/on-explicit-is-better-than-implicit/22076/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-128182" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="128182"
                     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="128188" data-post-id="128188">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>don’t have my functions depend on external state if it can be at all helped, please”.</p>
</blockquote>
<p>I totally agree and I’d include that in the <em>leave no room for confusion or doubt</em> part. I wouldn’t say that explicit has anything to do with being idempotent though. But if you mean that a function shouldn’t behave differently when external state changes, I agree. And if I can keep a function pure, I definitely will.</p>
<p>You’re right about things like DB credentials and such. That’s why I like the repo pattern in Ecto for instance. Your configuration might live elsewhere but you’re still being explicit enough about which repo is affected and you can name the repo appropriately. There are always trade-offs, that’s why I added <em>in the current context</em> to my definition. For the people working in that context it has to be clear and easy to reason about.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="128188" 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-explicit-is-better-than-implicit/22076/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-128188" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="128188"
                     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="358191" data-post-id="358191">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>When I’m talking about implicit apis what I’m really talking about is encapsulation. A key part of good api design is about hiding large amounts of complexity behind a small interface.</p>
</blockquote>
<p>Totally agree. API encapsulates <em>accidental</em> complexity. But it must be rather explicit about inevitable <em>essential</em> complexity specific to the problem domain. As other commenters mentioned, exposed accidental complexity distracts the user, thus makes code harder to read.</p>
<p>Do we really need to be aware of RAID configuration while reading an SGML file? Extremely rare case.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="358191" 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/on-explicit-is-better-than-implicit/22076/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-358191" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="358191"
                     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="358342" data-post-id="358342">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Disclosure: I have not listened to this podcast episode yet.</p>
<p>But I feel like the distinction explicit vs. implicit is not helpful. When I run into a distinction that does not help, I like to ask “so what?” until I get to the root of things.</p>
<p>For example…</p>
<p>Question: why make things explicit?<br>
Example answer: so that when you are making modifications to a codebase, you can easily understand the parts of the system needed to make the change</p>
<p>So really we don’t want to be explicit for the sake of being explicit - being “explicit” is just a means to a deeper goal of making a codebase easy to understand.</p>
<p>I would rather ask “If me or someone is coming back to this code and needs to make a change, will it be easy to understand the parts of the code needed to make the change?”</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="358342" 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-explicit-is-better-than-implicit/22076/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-358342" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="358342"
                     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>