I picked up c# linq, Java Streams and functional JS, the simple concepts of anonymous/lambda functions and the idea of passing around first class functions in my first job without a second thought and use all of this on a daily basis.
Anything I read about explicitly functional languages always looks like alien, academic content about math.
- Pure programming means having to unlearn a lot of stuff you usually do through intermediate variables[1]. You have to express what you want without this (and it's actually freeing).
- Lazy evaluation allowed by pure programming. It means that the order of execution is not the same as you'd have in strict/eager evaluation. It can it be hard to reason about it initially, but once you get it, it can be very powerful.
[1] Not exactly true, you can still use them but they're used in a different way.
Is it this?
map f [] = []
map f (x:xs) = f x : map f xs
Because my feelings are the opposite.No matter what language you're using, things get complicated when you're using every bit of low-level knowledge you've got to eke out every tenth of a percentage point.