Julio Biason
4 years ago
1 changed files with 82 additions and 0 deletions
@ -0,0 +1,82 @@ |
|||||||
|
+++ |
||||||
|
title = "Functional Python Programming - Create Succinct and Expressive Implementations with Python - Steven F. Lott" |
||||||
|
date = 2020-08-27 |
||||||
|
|
||||||
|
[taxonomies] |
||||||
|
tags = ["books", "review", "it", "steven f lott", "python", "functional", |
||||||
|
"1 star", "2020 challenge"] |
||||||
|
+++ |
||||||
|
|
||||||
|
[GoodReads Summary](https://www.goodreads.com/book/show/24925633-functional-python-programming---create-succinct-and-expressive-implement): |
||||||
|
With Functional Python Programming by your side you’ll understand the core |
||||||
|
concepts of function Python, its impact on the programming workflow, and how |
||||||
|
to implement it in Python, giving you the ability to take your applications to |
||||||
|
an even higher level. |
||||||
|
|
||||||
|
<!-- more --> |
||||||
|
|
||||||
|
{{ stars(stars=1) }} |
||||||
|
|
||||||
|
Another book the proves my theory that the quality of a book is inversely |
||||||
|
proportional to the amount of "as follows". |
||||||
|
|
||||||
|
But functional programming in Python is generators. |
||||||
|
|
||||||
|
That's it: Generators. Oh, generators and tuples. |
||||||
|
|
||||||
|
There is a lot in this book, but mostly seems... wrong. For example, talking |
||||||
|
about "tail call optimization", when Python does not have them. And then |
||||||
|
talking how to optimize those -- which, again, it is plain "replace with a |
||||||
|
generator". |
||||||
|
|
||||||
|
Also, the case for tuples is that namedtuples is mentioned, but rarely used. |
||||||
|
This makes code hard to read, except the author decided to create lambdas to |
||||||
|
extract them, so you end up with a bunch of `xy_g = lambda p: p[0][1][0]`. |
||||||
|
What the fuck is `0`, `1` and `0` again in this? Why not use name tuples and, |
||||||
|
instead of this atrocity, go with `p.position.x`? |
||||||
|
|
||||||
|
Other examples of wrong things: |
||||||
|
|
||||||
|
- "extract the docstring function": Doctstrings are strings, not functions. |
||||||
|
- "GNU Image Manipulation Program (GIMP) GNU General Public License (GPL) file |
||||||
|
format": Neither GIMP not GPL is a file format; one is a photo editor and |
||||||
|
the other is a license. |
||||||
|
- "This is relatively simple implementation copied from the World Wide Web": |
||||||
|
And we all know how things on the web are reliant. |
||||||
|
- "We can use `((line.split() for line in file)` to create a sequence of ten |
||||||
|
tuples": First of all, yes, the there is some unbalanced parenthesis |
||||||
|
there; second, that thing won't generate ten tuples, it will generate as |
||||||
|
many as the lines in the file -- which is never shown, by the way. |
||||||
|
- Calling functions that return generators "higher-order functions". And no, |
||||||
|
the function does not receive a function, it simply returns a generator. |
||||||
|
- "perms = permutations(range(6)))))". Yup, there are 4 extra closing |
||||||
|
parenthesis. |
||||||
|
- Splitting a string with a path in it by `/`, then checking the first value |
||||||
|
instead of, say, `path.startswith('expected_value')`. |
||||||
|
- "We've created a Counter() function": Counter is a class, not a function. |
||||||
|
- Lots of "not clear if this is helpful". Ok, showing some sort of code is ok, |
||||||
|
but not explaining where if it is useful -- or if it is useful at all -- |
||||||
|
is plain... lazy. |
||||||
|
- "We've shown the loop here to clarify that the server must, generally, be |
||||||
|
crashed": It's the first time that I see that we expect a server to be |
||||||
|
crashed. |
||||||
|
- There is a convoluted aggregation grouping things in a dictionary with a key |
||||||
|
and a count, and then using `Counter()` to check the number of times |
||||||
|
something appear. Problem is, when `Counter()` process the dict, it will |
||||||
|
get only the keys, so the whole process of generating the dictionary is |
||||||
|
completely useless. |
||||||
|
- By the end of the book, I'm not sure if things are being double |
||||||
|
double-quoted (as in ""this is string"") or quadruple single-quote |
||||||
|
(''''this is string'''') -- but neither format is valid Python. |
||||||
|
|
||||||
|
Besides all that, there is a bunch of explanations that are very much akin to |
||||||
|
|
||||||
|
> `a = a + 1` |
||||||
|
> |
||||||
|
> Adds 1 to `a` |
||||||
|
|
||||||
|
Also, there are chapters for multiprocessing, which has absolutely nothing |
||||||
|
functional about it and WSGI, which, again, has nothing functional about it. |
||||||
|
|
||||||
|
The whole book feels rushed and badly reviewed -- if reviewed before |
||||||
|
publishing at all. |
Loading…
Reference in new issue