you-dont-need / You-Dont-Need-Loops

Avoid The One-off Problem, Infinite Loops, Statefulness and Hidden intent.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Feedback from Rob Howard

stevemao opened this issue · comments

I'm not here to dunk, but
Impress your loved ones with catamorphisms, anamorphisms, bifunctors, fix points, f-algebras, co-recursion, and more.
immediately makes me sub in "Worry / annoy your co-workers with ...".
My take (sorry) is that your current flow of writing is throwing people off before they get anywhere near learning anything. Currently, the article's progression seems to go from:
"Loops are bullshit. Loops are bullshit." and "dreadful loops"
A big table and list of stuff that seems impenetrable if you don't already know what half of it refers to.
Then a too-brief explanation of why loops can cause problems; you've already lost your not-hate-reading audience by this point.
Then "You can immediately avoid off-by-one error and state by using recursions."
Then dunking on recursion with "Recursion is too low-level. Not low-level in the sense of direct access to the machine but low-level in the sense of language design and abstraction. Both loops and recursions do a poor job of signalling intent."
I'm appreciating this from a restatement of combinators in JS form, as I sometimes struggle with Haskell -> JS translation (getting my Haskell intuition back out of my head and into JS), but I worry that you've put a bunch of effort in and have the writing throw people off within the first twenty seconds. (edited)
I know there's controversy about this, but I think having jargon as the headlining item with no explanation doesn't help when introducing concepts, eg.
Paramorphism (which is just a header with no explanation), in the context of arrays/iterators, could be summarised as " map where the 'callback' function has access to the original array as well". I had to look up the definition and compare it to Catamorphism (which I already happen to know) to figure out what was meant by it.
There are ways of introducing the concepts in a way that includes the jargon/terminology for later reading, but without just giving you the name and code definition.

Original link: https://viewsource.slack.com/archives/C055CAFMT/p1575853626091300

Hi! I appreciate the work you put into this! I learned a lot, and I actually appreciate the bluntness from the start of the README.md file. The highly-opinionated language requires the reader to reconsider old habits. My initial concern was, "hmm, well what about very large array sizes? While built-in JS methods will make our dev workflows easier, won't we encounter stack overflow errors in the browser?"

I admit, tail call optimization was something I was unaware of until I read your note about it. Perhaps it would be be useful to include a link to either this link or this one? While the note says only Safari implements it, it seems that maybe the implementation is also in Chrome, just hidden as an "experimental feature"? (Seems like Chrome is working on it here? )

@richardeschloss could you send a PR to add them? Thanks a lot!

I have rewritten the intro