What is functional programming?
blog.jenkster.com
blog.jenkster.com
This is indeed covered very well, the author manages to explain both what side-effects are and why it makes sense to avoid them in a clear, succinct style with useful examples. Thumbs up for that!
However, functional programming is about much more than avoiding side effects. AFAIK, the defining factor for whether a give language can be classed as functional is whether it has functions as first-class objects. That means: can functions be created (and returned) by other functions? Can functions be passed as parameters to other functions? This is a huge area that was completely ignored in the blog post.
Yes, all these languages allow for functional programming, but it's not their primary paradigm, and not the one that is only natural when you use the language.
There must be something different that makes a language functional.
The main problem is that "functional" is not a binary attribute, but a matter of degrees. Technical no single language is entirely functional. However all of them are functional to smaller or larger degrees.
However, "it has an emphasis on functions" is a rather wishy-washy definition for a functional programming language. Thus I touted first-class functions as a working definition for how to classify a language as functional. It's not the whole story, but it indicates an underlying philosophy.
And of course, languages almost always fall somewhere on the continuum of the paradigm spectrum. Even many Lisp dialects have become multi-paradigm nowadays. "Functional" simply means that a language supports functional programming well.
A short time ago I read an article (can't find it sadly) where some guy ranted about how everyone thinks FP is about first class functions, but this feature was the least important.