[HN Gopher] Functional Programming Is Great. But It Ain't Magic
___________________________________________________________________
Functional Programming Is Great. But It Ain't Magic
Author : mariambarouma
Score : 9 points
Date : 2023-01-25 18:03 UTC (4 hours ago)
(HTM) web link (moaboelez.medium.com)
(TXT) w3m dump (moaboelez.medium.com)
| Veliladon wrote:
| Any sufficiently advanced technology is indistinguishable from
| magic.
|
| It's magic. Functional programmers are witches/warlocks. What
| else is the turbofish other than an arcane rune for magical
| purposes?
| miloignis wrote:
| I'm not a huge fan of this post - I feel like it adds to the
| confusion where it tries to enlighten.
|
| First, a pedantic point - a proper pure functional language will
| not have "side effects", it will have "effects" (either through
| algebraic effects or through monads or something) - nothing
| "side" about them. Side effects are effects that happen _in
| addition to_ the main value of doing something (this medicine has
| side effects). Effects are just things that you want to happen in
| the world, and many functional languages reason about them as
| first class objects instead of implicit behaviors. That is, a
| function has an IO effect or returns a value in the IO monad
| instead of being a C function that can arbitrarily write to the
| file system.
|
| Second, the main point of the post seems to be that functional
| programming will not make concurrency happening outside of the
| language (say, when talking to databases) safe, but that's a
| pretty simple point that's not stated as clearly as it could be.
|
| Hopefully I'm not being too harsh - I might have misunderstood
| something, and the core point that functional programming doesn't
| magically fix everything is true - but it's that very confusion
| that I think makes this post unhelpful.
| karmakaze wrote:
| The post is entirely useless from any technical perspective. It
| talks about pure FP languages. Then about OCaml and concurrency
| without much detail or distinction.
|
| The only useful thing it almost says clearly is that FP doesn't
| have to be magic and can be used effectively by normal folks,
| but instead flips the title (for clicks) to imply it's not as
| good as they say.
| chongli wrote:
| Thank you. I've frequently found myself annoyed when people
| conflate the terms "effects" and "side effects".
| nh23423fefe wrote:
| conflating FP with immutable data structures or with referential
| transparency and then bashing FP seems pointless.
|
| No one says FP is panacea. Why are you refuting words you put
| into imaginary novices mouths. Engage with good ideas instead of
| shooting down bad ideas no one holds.
|
| > what I call FPF ... emanates from people who've recently
| discovered FP ... and have yet to realize that -- like all
| programming innovations since the 1940s -- it doesn't actually
| solve all the problems for us.
| hajile wrote:
| Why no mention of safety?
|
| On the whole, the type safety guarantees of something like
| StandardML over something like Golang are at least as valuable as
| many of the more traditional "functional" aspects.
| tabtab wrote:
| Most rank and file business and administrative apps don't need
| "direct" concurrency. The web server and database provide it more
| or less automatically most of the time, if you don't do anything
| "odd". If you disagree, I'd like to exam a relatively common
| scenario.
| raluk wrote:
| Here in haskell: https://www.microsoft.com/en-us/research/wp-
| content/uploads/...
|
| Functional programming is not about "no side effects", but how to
| separate pure functions and side effects. Additionally FP is also
| about how to separate data and logic.
| tabtab wrote:
| Another critique of FP. (The headline is sensationalist, so don't
| let that ruffle you.)
|
| https://www.reddit.com/r/DilbertProgramming/comments/qg99f0/...
| abc_lisper wrote:
| OTOH, It does seem like magic if you have dealt with Java in your
| previous life
| karmakaze wrote:
| I dunno if I'd say that. At least using recent versions of Java
| and some F#, I find the latter much nicer, but don't do things
| so extremely differently. It's just more concise and less
| keyboard typing when refactoring.
|
| Having worked with Rails codebases I tend to avoid magic when
| not needed.
|
| The best effect is using FP, then going back to what you used
| before and adopting more FP style: single assignment to local
| vars, immutable datastructures, less imperative control flow,
| etc.
| pharmakom wrote:
| The major differences between Java and F# are:
|
| - Discriminated unions and pattern matching
|
| - Global type inference
|
| - Tail call optimisation
|
| - Syntactic sugar for monadic code (computation expressions)
|
| Java is more "FP" than it used to be, but it is still not
| minimum viable FP
___________________________________________________________________
(page generated 2023-01-25 23:02 UTC)