diff options
author | Loïc Hoguin <[email protected]> | 2017-10-03 13:39:41 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2017-10-03 13:39:41 +0200 |
commit | b5d4cb91f80c833795a2d87050c3674bb7aecdc5 (patch) | |
tree | 62bf0ad8326006fcd3407fcb7c34c844c0dc0874 /articles/dont-let-it-crash/index.html | |
parent | 1f8d51dd2692fc3978080419987bbe4d49a41a90 (diff) | |
download | ninenines.eu-b5d4cb91f80c833795a2d87050c3674bb7aecdc5.tar.gz ninenines.eu-b5d4cb91f80c833795a2d87050c3674bb7aecdc5.tar.bz2 ninenines.eu-b5d4cb91f80c833795a2d87050c3674bb7aecdc5.zip |
Update Hugo, docs
Diffstat (limited to 'articles/dont-let-it-crash/index.html')
-rw-r--r-- | articles/dont-let-it-crash/index.html | 328 |
1 files changed, 190 insertions, 138 deletions
diff --git a/articles/dont-let-it-crash/index.html b/articles/dont-let-it-crash/index.html index 239e479a..e86cb263 100644 --- a/articles/dont-let-it-crash/index.html +++ b/articles/dont-let-it-crash/index.html @@ -7,7 +7,7 @@ <meta name="description" content=""> <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara"> - <meta name="generator" content="Hugo 0.17" /> + <meta name="generator" content="Hugo 0.26" /> <title>Nine Nines: Don't let it crash</title> @@ -74,118 +74,118 @@ </p> </header> -<div class="paragraph"><p>We have a specific mindset when writing Erlang
-programs. We focus on the normal execution of the
-program and don’t handle most of the errors that may
-occur. We sometimes call this normal execution the
-<em>happy path</em>.</p></div>
-<div class="paragraph"><p>The general pattern behind writing only for the
-<em>happy path</em>, letting the VM catch errors (writing
-them to a log for future consumption) and then
-having a supervisor restart the processes that
-failed from a clean state, has a name. We call it
-<em>let it crash</em>; and it drives many of our design
-decisions.</p></div>
-<div class="paragraph"><p>It’s a really great way to program and the results
-are fantastic compared to most other programming
-languages. And yet, <em>let it crash</em> barely convinced
-anyone that they should use Erlang. Why would that
-be?</p></div>
-<div class="paragraph"><p>You may already know that Cowboy is capable of
-handling at least 2 million Websocket connections
-on a single server. This is in large part thanks
-to the capabilities of the VM. Still, 2 million
-is good, much better than most other servers can
-do.</p></div>
-<div class="paragraph"><p>Cowboy is not just a Websocket server; it’s also
-an HTTP and HTTP/2 server, and it handles many
-related features like long polling or the parsing
-of most request headers.</p></div>
-<div class="paragraph"><p>Can you guess how large the Cowboy codebase is,
-without looking at the source?</p></div>
-<div class="paragraph"><p>Do make sure you have a clear answer in your mind
-before you go check.</p></div>
-<div class="paragraph"><p>Good, you are back. Now what were the results? If
-I am correct, you overestimated the size of Cowboy.
-Cowboy is in fact about five thousand lines of code.
-You probably thought it was at least ten thousand.
-About eighty percent of readers will have
-overestimated the size of Cowboy. And you did only
-because I mentioned it can handle millions of
-Websocket connections.</p></div>
-<div class="paragraph"><p>Numerous studies show this effect. Just mentioning
-the large number already prepared your mind to think
-in that direction. Repeating the number made you
-focus even more on it. Then the question asked for
-a number, which ended up larger than the reality.</p></div>
-<div class="paragraph"><p>The same effect can be applied to negotiation for
-example. You generally want to start by giving your
-offer (and not let the other party initiate) and
-you want to give a really large number first. You
-can also prepare your customer by mentioning an even
-larger number in the previous discussion.</p></div>
-<div class="paragraph"><p>And it’s not just numbers either. An experiment
-showed that just by looking at an image of clouds,
-customers of a pillow store were buying pillows
-more comfortable (and more expensive) than those
-who didn’t see that image.</p></div>
-<div class="paragraph"><p>This is the power of associations. It is covered in
-much larger detail in the books
-<a href="https://www.amazon.com/Influence-Psychology-Persuasion-Robert-Cialdini/dp/006124189X">Influence</a>
-and
-<a href="https://www.amazon.com/Pre-Suasion-Revolutionary-Way-Influence-Persuade/dp/1501109790">Pre-suasion</a>.
-I highly recommend reading those and applying what
-you learn to your daily life. I’m definitely not
-a professional psychologist so take this post with
-a grain of salt.</p></div>
-<div class="paragraph"><p>When selling Erlang, whether we are selling it to
-a customer or trying to convince a developer friend
-to start using it, we often talk about how Erlang
-<em>lets you sleep at night</em>, that it is auto healing
-and always gets fantastic uptimes.</p></div>
-<div class="paragraph"><p>And then we talk about <em>let it crash</em>.</p></div>
-<div class="paragraph"><p>And we describe what it means.</p></div>
-<div class="paragraph"><p>We might as well just say that Erlang crashes a lot
-and then take the door. It would have the same effect.
-It doesn’t even stop at programs crashing. You know
-what else crashes? Cars, planes, trains. Often with
-disastrous consequences. Is that really the message
-we want to convey?</p></div>
-<div class="paragraph"><p>They even <a href="https://img.youtube.com/vi/oEUBW2lCkIk/0.jpg">printed it on a t-shirt</a>!
-Keep calm and let it crash. It’s the kind of t-shirt
-you probably shouldn’t wear in an airport, and for good
-reasons. A few people did, then realized what they were
-wearing and were not too smug about it.</p></div>
-<div class="paragraph"><p>And yet this is how we sell Erlang.</p></div>
-<div class="paragraph"><p>A better way would be to focus on the positives, of
-course, but also to make sure that those positives
-are phrased in a way that prevents bad associations
-to be formed in people’s minds.</p></div>
-<div class="paragraph"><p>Instead of <em>let it crash</em>, you can say that Erlang
-has <em>auto healing mechanisms</em>. Healing is a good
-thing and accurately describes what happens in the
-system.</p></div>
-<div class="paragraph"><p>Should you need to go into more details, you will
-probably want to avoid <em>recover from crashes</em> and
-instead say <em>recover from exceptions</em>. Exceptions
-are a pretty neutral word and, should you explain
-what you mean by that, you can talk about exceptions
-that occur for reasons unrelated to Erlang, like
-hardware failure or network instability.</p></div>
-<div class="paragraph"><p>The trick is to always use positive words and
-phrases to describe Erlang, and to use external
-factors to explain how Erlang deals with failures.
-Never mention the failures internal to Erlang
-systems unless you are asked specifically, in
-which case you can say that the auto healing
-applies to all exceptions.</p></div>
-<div class="paragraph"><p>The <em>let it crash</em> philosophy is great when
-learning Erlang or when writing fault-tolerant
-systems. But it’s not going to convince anyone
-to use it unless they were already looking for
-it.</p></div>
-<div class="paragraph"><p>Do you like this post? Tell me on Twitter. I might
-make more.</p></div>
+<div class="paragraph"><p>We have a specific mindset when writing Erlang +programs. We focus on the normal execution of the +program and don’t handle most of the errors that may +occur. We sometimes call this normal execution the +<em>happy path</em>.</p></div> +<div class="paragraph"><p>The general pattern behind writing only for the +<em>happy path</em>, letting the VM catch errors (writing +them to a log for future consumption) and then +having a supervisor restart the processes that +failed from a clean state, has a name. We call it +<em>let it crash</em>; and it drives many of our design +decisions.</p></div> +<div class="paragraph"><p>It’s a really great way to program and the results +are fantastic compared to most other programming +languages. And yet, <em>let it crash</em> barely convinced +anyone that they should use Erlang. Why would that +be?</p></div> +<div class="paragraph"><p>You may already know that Cowboy is capable of +handling at least 2 million Websocket connections +on a single server. This is in large part thanks +to the capabilities of the VM. Still, 2 million +is good, much better than most other servers can +do.</p></div> +<div class="paragraph"><p>Cowboy is not just a Websocket server; it’s also +an HTTP and HTTP/2 server, and it handles many +related features like long polling or the parsing +of most request headers.</p></div> +<div class="paragraph"><p>Can you guess how large the Cowboy codebase is, +without looking at the source?</p></div> +<div class="paragraph"><p>Do make sure you have a clear answer in your mind +before you go check.</p></div> +<div class="paragraph"><p>Good, you are back. Now what were the results? If +I am correct, you overestimated the size of Cowboy. +Cowboy is in fact about five thousand lines of code. +You probably thought it was at least ten thousand. +About eighty percent of readers will have +overestimated the size of Cowboy. And you did only +because I mentioned it can handle millions of +Websocket connections.</p></div> +<div class="paragraph"><p>Numerous studies show this effect. Just mentioning +the large number already prepared your mind to think +in that direction. Repeating the number made you +focus even more on it. Then the question asked for +a number, which ended up larger than the reality.</p></div> +<div class="paragraph"><p>The same effect can be applied to negotiation for +example. You generally want to start by giving your +offer (and not let the other party initiate) and +you want to give a really large number first. You +can also prepare your customer by mentioning an even +larger number in the previous discussion.</p></div> +<div class="paragraph"><p>And it’s not just numbers either. An experiment +showed that just by looking at an image of clouds, +customers of a pillow store were buying pillows +more comfortable (and more expensive) than those +who didn’t see that image.</p></div> +<div class="paragraph"><p>This is the power of associations. It is covered in +much larger detail in the books +<a href="https://www.amazon.com/Influence-Psychology-Persuasion-Robert-Cialdini/dp/006124189X">Influence</a> +and +<a href="https://www.amazon.com/Pre-Suasion-Revolutionary-Way-Influence-Persuade/dp/1501109790">Pre-suasion</a>. +I highly recommend reading those and applying what +you learn to your daily life. I’m definitely not +a professional psychologist so take this post with +a grain of salt.</p></div> +<div class="paragraph"><p>When selling Erlang, whether we are selling it to +a customer or trying to convince a developer friend +to start using it, we often talk about how Erlang +<em>lets you sleep at night</em>, that it is auto healing +and always gets fantastic uptimes.</p></div> +<div class="paragraph"><p>And then we talk about <em>let it crash</em>.</p></div> +<div class="paragraph"><p>And we describe what it means.</p></div> +<div class="paragraph"><p>We might as well just say that Erlang crashes a lot +and then take the door. It would have the same effect. +It doesn’t even stop at programs crashing. You know +what else crashes? Cars, planes, trains. Often with +disastrous consequences. Is that really the message +we want to convey?</p></div> +<div class="paragraph"><p>They even <a href="https://img.youtube.com/vi/oEUBW2lCkIk/0.jpg">printed it on a t-shirt</a>! +Keep calm and let it crash. It’s the kind of t-shirt +you probably shouldn’t wear in an airport, and for good +reasons. A few people did, then realized what they were +wearing and were not too smug about it.</p></div> +<div class="paragraph"><p>And yet this is how we sell Erlang.</p></div> +<div class="paragraph"><p>A better way would be to focus on the positives, of +course, but also to make sure that those positives +are phrased in a way that prevents bad associations +to be formed in people’s minds.</p></div> +<div class="paragraph"><p>Instead of <em>let it crash</em>, you can say that Erlang +has <em>auto healing mechanisms</em>. Healing is a good +thing and accurately describes what happens in the +system.</p></div> +<div class="paragraph"><p>Should you need to go into more details, you will +probably want to avoid <em>recover from crashes</em> and +instead say <em>recover from exceptions</em>. Exceptions +are a pretty neutral word and, should you explain +what you mean by that, you can talk about exceptions +that occur for reasons unrelated to Erlang, like +hardware failure or network instability.</p></div> +<div class="paragraph"><p>The trick is to always use positive words and +phrases to describe Erlang, and to use external +factors to explain how Erlang deals with failures. +Never mention the failures internal to Erlang +systems unless you are asked specifically, in +which case you can say that the auto healing +applies to all exceptions.</p></div> +<div class="paragraph"><p>The <em>let it crash</em> philosophy is great when +learning Erlang or when writing fault-tolerant +systems. But it’s not going to convince anyone +to use it unless they were already looking for +it.</p></div> +<div class="paragraph"><p>Do you like this post? Tell me on Twitter. I might +make more.</p></div> </article> </div> @@ -194,55 +194,107 @@ make more.</p></div> <h3>More articles</h3> <ul id="articles-nav" class="extra_margin"> - <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li> + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li> + - <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li> + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li> + - <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li> + + <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li> + - <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></li> + + <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></li> + - <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li> + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li> + - <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li> + + <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li> + - <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li> + + <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li> + - <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li> + + <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li> + - <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li> + + <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li> + - <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li> + + <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li> + - <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li> + + <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li> + - <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li> + + <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li> + - <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li> + + <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li> + - <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li> + + <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li> + - <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li> + + <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li> + - <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li> + + <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li> + - <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li> + + <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li> + - <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li> + + <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li> + - <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li> + + <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li> + - <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li> + + <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li> + - <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li> + + <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li> + - <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li> + + <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li> + - <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li> + + <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li> + - <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li> + + <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li> + - <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li> + + <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li> + + + </ul> |