You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
7.1 KiB
153 lines
7.1 KiB
11 months ago
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||
|
|
||
|
<!-- Enable responsiveness on mobile devices-->
|
||
|
<!-- viewport-fit=cover is to support iPhone X rounded corners and notch in landscape-->
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, viewport-fit=cover">
|
||
|
|
||
|
<title>Julio Biason .Me 4.3</title>
|
||
|
|
||
|
<!-- CSS -->
|
||
|
<link rel="stylesheet" href="https://blog.juliobiason.me/print.css" media="print">
|
||
|
<link rel="stylesheet" href="https://blog.juliobiason.me/poole.css">
|
||
|
<link rel="stylesheet" href="https://blog.juliobiason.me/hyde.css">
|
||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700|Abril+Fatface">
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</head>
|
||
|
|
||
|
<body class=" ">
|
||
|
|
||
|
<div class="sidebar">
|
||
|
<div class="container sidebar-sticky">
|
||
|
<div class="sidebar-about">
|
||
|
|
||
|
<a href="https://blog.juliobiason.me"><h1>Julio Biason .Me 4.3</h1></a>
|
||
|
|
||
|
<p class="lead">Old school dev living in a 2.0 dev world</p>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<ul class="sidebar-nav">
|
||
|
|
||
|
|
||
|
<li class="sidebar-nav-item"><a href="/">English</a></li>
|
||
|
|
||
|
<li class="sidebar-nav-item"><a href="/pt">Português</a></li>
|
||
|
|
||
|
<li class="sidebar-nav-item"><a href="/tags">Tags (EN)</a></li>
|
||
|
|
||
|
<li class="sidebar-nav-item"><a href="/pt/tags">Tags (PT)</a></li>
|
||
|
|
||
|
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="content container">
|
||
|
|
||
|
<div class="post">
|
||
|
<h1 class="post-title">Functional Reactive Programming - Stephen Blackheath, Anthony Jones</h1>
|
||
|
<span class="post-date">
|
||
|
2020-03-04
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/books/">#books</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/reviews/">#reviews</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/stephen-blackheath/">#stephen blackheath</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/it/">#it</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/anthony-jones/">#anthony jones</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/stars-0/">#stars:0</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/books-2020/">#books:2020</a>
|
||
|
|
||
|
<a href="https://blog.juliobiason.me/tags/published-2015/">#published:2015</a>
|
||
|
|
||
|
</span>
|
||
|
<p><a href="https://www.goodreads.com/book/show/24671986-functional-reactive-programming">GoodReads Summary</a>
|
||
|
Functional Reactive Programming teaches the concepts and applications of FRP.
|
||
|
It begins with a careful walk-through of the FRP core operations and
|
||
|
introduces the concepts and techniques you'll need to use FRP in any language.
|
||
|
Following easy-to-understand examples, you'll learn both how to use FRP in
|
||
|
greenfield applications and how to refactor existing applications. Along the
|
||
|
way, the book introduces the basics of functional programming in a
|
||
|
just-in-time style, so you never learn anything before you need to use it.
|
||
|
When you're finished, you'll be able to use FRP to spend more time adding
|
||
|
features and less time fixing problems.</p>
|
||
|
<span id="continue-reading"></span><div>
|
||
|
☆☆☆☆☆
|
||
|
</div>
|
||
|
<ul>
|
||
|
<li>(-) Some phrases are a bit hard to read. Maybe it's because I'm
|
||
|
not a native English speaker<sup class="footnote-reference"><a href="#1">1</a></sup>, but some are akin to "my beautiful
|
||
|
nature photos", which you can read in different ways ("my beautiful photos
|
||
|
of nature", "my photos of beautiful nature") and I had to backtrack and
|
||
|
read the whole thing again.</li>
|
||
|
<li>(-) Code listings are a mess: long and with no separation of concerns. It is
|
||
|
ok if you use lambdas for simpler functions, but when you keep piling
|
||
|
lambdas over lambdas, things get a bit out of hand. Trying to explain some
|
||
|
functionality in a 200 line function is not actually helpful.</li>
|
||
|
<li>(-) The ePub version seriously need another check. Some code listings are
|
||
|
pure text, following the font size the user set in their reader; other are
|
||
|
screenshots/images of code, which get way out of hand, as some of those
|
||
|
had a font 1/5 of the size I set up (yes, I use a large font, I'm reading
|
||
|
at night without my glasses, but the point remains).</li>
|
||
|
<li>(--) There is very little explanation on what FRP really is, but a lot about
|
||
|
how to do things with Sodium, the authors' library. Instead of focusing on
|
||
|
how to build your own FRP system, using Sodium as reference, the book
|
||
|
focuses <em>a lot</em> in using Sodium and its relationship with FRP instead
|
||
|
of explaining the concept behind the FRP functionality itself.</li>
|
||
|
<li>(--) The authors show some weird prejudices against TDD. For example, they
|
||
|
say that FRP doesn't require TDD and that using TDD is actually <em>harmful</em>
|
||
|
for FRP (!!<sup class="footnote-reference"><a href="#2">2</a></sup>), "unless you test logic" (???<sup class="footnote-reference"><a href="#3">3</a></sup>). I have to ask: Seriously?
|
||
|
What do you think TDD is about? Lines of code? TDD says that "tests should
|
||
|
validate behaviors, not implementation" and I'm wondering why the authors
|
||
|
are so reticent against TDD when their concept of TDD seems completely out
|
||
|
of place.</li>
|
||
|
<li>(---) There is a strong gatekeeping in the book. While talking about other
|
||
|
frameworks, the authors decided to focus more on "why this framework
|
||
|
is not pure FRP, while Sodium is" instead of, again, focusing on the
|
||
|
concepts of FRP itself. "FRP says so and so, you can build this with
|
||
|
framework X using that and that" is a good way to do it; "FRP says so and
|
||
|
so, framework X do this which is not what the FRP says, so framework X is
|
||
|
not FRP, but Sodium is!" is a dickish way to downplay other frameworks.
|
||
|
Not only that, but every time Sodium break some FRP rule (rules that
|
||
|
the authors themselves keep listing), they put a long explanation on why
|
||
|
it's ok for you to break the rule there when using Sodium, but Sodium,
|
||
|
although requiring you to break some FRP rule, is actually a pure-FRP
|
||
|
framework, and not those pesky other frameworks that are not pure-FRP
|
||
|
frameworks.</li>
|
||
|
</ul>
|
||
|
<p>Honestly, I read the book and I still don't understand FRP; all I got was some
|
||
|
concepts for a Sodium framework.</p>
|
||
|
<hr />
|
||
|
<div class="footnote-definition" id="1"><sup class="footnote-definition-label">1</sup>
|
||
|
<p>... which may appear as no surprise, with the amount of grammar mistakes
|
||
|
in this post. :p
|
||
|
<sup class="footnote-reference"><a href="#2">2</a></sup>: That's surprise.
|
||
|
<sup class="footnote-reference"><a href="#3">3</a></sup>: That's confusion.</p>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|