<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="11542" data-post-id="11542">
  <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="StefanHoutzager" data-post="19" data-topic="1771">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/s/cab0a1/48.png" class="avatar"> StefanHoutzager:</div>
<blockquote>
<p>(Erik Meijer: “Mostly functional” programming does not work)</p>
</blockquote>
</aside>
<p>He is a bit of a “rebel for the <em>static strongly typed pure functional</em> cause” - and even though he makes some good arguments that isn’t going to stop me from referring to work like that from <a href="https://dzone.com/articles/whats-wrong-java-8-part-vii" rel="noopener nofollow ugc">Pierre-Yves Saumont</a> if I should find myself trapped in Java-land (for whatever reason) anytime in the future.</p>
<p>I would argue that “functional tactics” in imperative languages are ultimately more effectively wielded by developers with experience with “real functional languages” - but never(, ever, and not even close) to the full effect and impact of actually using a “real functional language” for the task at hand (which ultimately is one of the points that Erik Meijer is making).</p>
<p>[quote=“mkunikow, post:20, topic:1771”]<br>
You will always need to deal with state and side effects. But there should be clear separation in code: pure functions vs rest.[/quote]</p>
<p>In the Clojure community it is often said that good functional design “pushes the [impure aspects] to the edges of the system”‡ - leaving the core logic pure and minimally “complected”.</p>
<p>‡I seem to recall <a href="https://twitter.com/swannodette" rel="noopener nofollow ugc">David Nolen</a> using that phrase fairly regularly in his communications.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="11542" 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/thinking-functional/1771/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-11542" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="11542"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="11550" data-post-id="11550">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="kostonstyle" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  kostonstyle
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Now I am very confused about what is functional programming. I feel, none languages out there support pure functional and a language can never be 100% perfect.<br>
So close the eyes, do something greet with elixir, I really love the language. <img src="https://forum.elixirforum.com/images/emoji/apple/grin.png?v=15" title=":grin:" class="emoji" alt=":grin:" loading="lazy" width="20" height="20"><br>
And elixir contributors, your guys do amazing work, thanks so much.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="11550" 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/thinking-functional/1771/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-11550" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="11550"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="11553" data-post-id="11553">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="StefanHoutzager" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  StefanHoutzager
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>concerning static + strongly typed he is not an envangelist acording to what I read: <a href="https://www.ics.uci.edu/~lopes/teaching/inf212W12/readings/rdl04meijer.pdf" rel="noopener nofollow ugc">https://www.ics.uci.edu/~lopes/teaching/inf212W12/readings/rdl04meijer.pdf</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="11553" 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/thinking-functional/1771/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-11553" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="11553"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="11557" data-post-id="11557">
  <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">
								<ul>
<li>2007 - LINQ</li>
<li>2009 - Reactive Extensions</li>
<li>2011 - “Static Typing Where Possible”</li>
<li>2013 - RxJava</li>
<li>2014 - (PHP) Hack</li>
<li>2014 - “The Curse of the Excluded Middle”</li>
</ul>
<p>Interpret that timeline whichever way you seem fit - but he always struck me as a person who can be pragmatic <em>when it suits him</em> - at the same time he never seems to lay off his “learn Haskell” campaign (and that the type system needs to identify side-effects). So he may not be an “evangelist” but he has never been afraid to voice his strong <em>opinions</em>.</p>
<p>Erik Meijer: <em>One Hacker Way</em> (GOTO 2015)</p><div class="youtube-onebox lazy-video-container" data-video-id="FvMuPtuvP5w" data-video-title="One Hacker Way • Erik Meijer • GOTO 2015" data-video-start-time="" data-provider-name="youtube">
  <a href="https://www.youtube.com/watch?v=FvMuPtuvP5w" target="_blank" class="video-thumbnail" rel="noopener nofollow ugc">
    <img class="youtube-thumbnail" src="https://img.youtube.com/vi/FvMuPtuvP5w/maxresdefault.jpg" title="One Hacker Way • Erik Meijer • GOTO 2015" width="690" height="388">
  </a>
</div>

<p><a href="https://vimeo.com/110554082" rel="noopener nofollow ugc">The Original: The Hacker Way (A Rational Alternative to “Agile”) (Reaktor 2014)</a></p>
<aside class="quote no-group quote-modified" data-username="kostonstyle" data-post="23" data-topic="1771">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/5f9b8f/48.png" class="avatar"> kostonstyle:</div>
<blockquote>
<p>So close the eyes, do something great with elixir, I really love the language. <img src="https://forum.elixirforum.com/images/emoji/apple/grin.png?v=15" title=":grin:" class="emoji" alt=":grin:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>Open your eyes and watch the Scott Wlaschin video <a href="https://forum.elixirforum.com/t/thinking-functional/1771/9" rel="nofollow">I linked to</a> above - you’ll likely need to watch it in pieces and multiple times because he covers a lot of ground in that hour.</p>
<p>If you’ve read <a href="https://pragprog.com/book/elixir13/programming-elixir-1-3" rel="noopener nofollow ugc">Programming Elixir</a> you’ll probably be familiar with this tweet:<br>
<a href="https://twitter.com/jessitron/status/333228687208112128" class="onebox" target="_blank" rel="noopener nofollow ugc">https://twitter.com/jessitron/status/333228687208112128</a></p>
<p>Lots of her videos are available on the Web but you may find this one helpful to start with:<br>
Jessica Kerr: <em>Functional Principles for Object-Oriented Development</em> (GOTO 2014)</p><div class="youtube-onebox lazy-video-container" data-video-id="GpXsQ-NIKXY" data-video-title="Functional Principles for Object-Oriented Development • Jessica Kerr • GOTO 2014" data-video-start-time="" data-provider-name="youtube">
  <a href="https://www.youtube.com/watch?v=GpXsQ-NIKXY" target="_blank" class="video-thumbnail" rel="noopener nofollow ugc">
    <img class="youtube-thumbnail" src="https://img.youtube.com/vi/GpXsQ-NIKXY/maxresdefault.jpg" title="Functional Principles for Object-Oriented Development • Jessica Kerr • GOTO 2014" width="690" height="388">
  </a>
</div>

<p><a class="mention" href="/u/vasspilka" rel="nofollow">@vasspilka</a> already made a good start for you on the “purity” aspect but as simple as it may seem on the surface, the implications go quite deep.  The programming language you choose is like a carpenter’s toolbox - even if it is stocked with the best tools available there is no guarantee that you will be crafting only “top of the line”, “world class” cabinets - that part is ultimately up to you and your (developing) skill.</p>
<p>Elixir can’t stop you from writing <a href="https://en.wikipedia.org/wiki/Spaghetti_code" rel="noopener nofollow ugc">Spaghetti Code</a> - that responsibility ultimately rests with you.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="11557" 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/thinking-functional/1771/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-11557" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="11557"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="11559" data-post-id="11559">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="StefanHoutzager" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  StefanHoutzager
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have seen that youtube item from Erik Meijer before. Strong opinions indeed, but I can understand his problem with the agile / scrum hype / industry. Interesting subject by itself. Even people like Dave Thomas have a problem with what has come from his work, although he is more subtle (see youtube). IT Guru Simon Wardley has said interesting things on the subject also, see this great presentation <a href="https://www.youtube.com/watch?v=Ty6pOVEc3bA" rel="noopener nofollow ugc">https://www.youtube.com/watch?v=Ty6pOVEc3bA</a> or read <a href="http://blog.gardeviance.org/2015/06/why-agile-lean-and-six-sigma-must-die.html" class="inline-onebox" rel="noopener nofollow ugc">Bits or pieces?: Why Agile, Lean and Six Sigma must die ...</a>.<br>
Nice one on scrum: <a href="http://anti-agile.blogspot.nl/2010/06/day-1-why-i-hate-agile-methodologies.html" class="inline-onebox" rel="noopener nofollow ugc">Anti Agile: Day 1: Why I hate Agile methodologies</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="11559" 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/thinking-functional/1771/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-11559" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="11559"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="13087" data-post-id="13087">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>A lot of that depends on how one defines “pure”. If a program did exactly the same thing every time it was run there wouldn’t be much point in running it more than once would there? A program has to have some side-effect to be useful. Side-effects aren’t inherently bad; uncontrolled or accidental side-effects are the problem.</p>
<p>Stop looking for absolutes. Few things in life are always right or always wrong.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13087" 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/thinking-functional/1771/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-13087" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13087"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="13137" data-post-id="13137">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes, the definition of ‘pure’ is a difficult one.</p>
<p>There is no <em>true</em> 100% pure language (that works and is used in practice; Lambda Calculus itself is pure, but you directly run it on hardware), if only that the languages that for the most part <em>are</em> pure, have some ways to cheat (for Haskell: <code>unsafePerformIO</code>).</p>
<p>Haskell, for instance, archieves purity by allowing programmers to pass on the  ‘IO baton’ from one side-effectful action to the next. This ‘IO baton’ can therefore be considered ‘the state of the whole <a href="https://en.wikipedia.org/wiki/Von_Neumann_architecture" rel="noopener nofollow ugc">von Neumann computer</a> this program runs on, as a whole’. In this way, one can still consider these side-effectfull actions to be pure, from the viewpoint of the programmer (and of the language).</p>
<p>Of course, what happens behind the scenes is not important in this case, as long as the end result is that we can show ‘look! when you would call this function again with the same input, you would indeed get exactly the same output’.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13137" 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/thinking-functional/1771/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-13137" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13137"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="13145" data-post-id="13145">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>In the style of Joe Armstrong, I’m going to bring physics into the discussion. “Pure” computation exists only as a thought experiment. Once you execute on a physical computing device, you cannot ignore physics. Hardware fails; a cosmic ray may flip a bit it memory, etc. However rare these may be, they are non-zero probabilities. A “pure” computation run on physical hardware may return a different result when run again.</p>
<p>This bit of brilliance led to supervisors for when you need truly robust systems. And IMHO is a core bit of the difference between computer science and software engineering.</p>
<p>That said, it is still wise to isolate side effects to one/few places in code. The IO monad is one way of doing that. It’s one that appeals to the theoretician more than the practitioner though.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13145" 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/thinking-functional/1771/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-13145" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13145"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="13155" data-post-id="13155">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You hit the nail right on the head! I couldn’t agree more with what you’ve said. It was i believe last friday when <a href="http://thehackernews.com/2016/10/root-android-phone-exploit.html?m=1" rel="noopener nofollow ugc">an interesting exploit on Android phones was published</a>, which alters the state of the software by exploiting a physical hardware peculiarly.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13155" 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/thinking-functional/1771/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-13155" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13155"
                     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>