From FunctionalProgrammingIsNotaParadigm...
Terms like Imperative Paradigm or Functional Paradigm are attempts to categorize languages on the basis of common features or an underlying abstract basis. But the fact that use of these terms turns into debates or inevitably leads to mention of examples that belong to multiple paradigms, or no clear paradigm, suggests that the terms are inadequate. Any serious discussion about language characteristics is not going to talk in terms of paradigms anyway; it is going to talk in terms of language features, such as whether or not there is support for first-class functions, encapsulation, procedures, logical inference, declarative syntax, inheritance, named parameters, higher-order functions, polymorphism, multiple dispatch, closures, blocks, continuations and so forth. Language features are less ambiguous and more easily recognized as being present or absent, unlike paradigm-hood which is invariably ambiguous and difficult to identify.
For example, imagine a language that implements all of the aforementioned features. It would be perfectly reasonable to compare such a language to other languages, but perfectly meaningless to describe it strictly in terms of either an OO or functional paradigm. Therefore, I suggest that the term "paradigm" be stricken from further discourse, and that "object oriented", "procedural", "functional", "imperative", and "declarative" be eliminated as well, as these are merely meaningless (in any rigorous sense) references to specific paradigms. Henceforth, speak in terms of presence or absence of given features, e.g., language X implements first-class functions and multiple dispatch, while language Y implements neither but implements continuations. And so on.
Another way to look at this is to focus on the HasA relationships a language has with the universe of language features, rather than the IsA relationship(s) a language has with some abstract definition.
I would encourage everyone to at least try this approach in future language discussions. I believe the result will be a general elevation in the level of discourse, and a reduction in petty and peculiar arguments that attempt to show (for example) that object oriented programming or functional programming or procedural programming -- in other words, some arbitrary collection of language features -- is somehow collectively better or worse than another random grouping of features (whether given a popular label or not), for some ill-defined notion of "better" or "worse." -- DaveVoorhis
Or we can agree to use the common English meaning of "paradigm". Then any paradigm is just another way to view reality. They have no special status. Programmers are free to use whichever views fit specific circumstances. Languages are free to enable multiple views of reality. It seems like all of the arguments come from two sources: ignoring common definitions of words and/or assigning special significance to the word "paradigm".
Perhaps, but I believe the arguments come from a single source: failure to agree on what a given <x> paradigm actually means. -- DaveVoorhis
Another way to look at this is to focus on the HasA relationships a language has with the universe of language features, rather than the IsA relationship(s) a language has with some abstract definition.
I would add that some of the most profound relationships a language has with the universe of language features are the Lacks relationships. I.e. math and descriptions of mathematical functions Lacks an imperative operator. A functional language or sub-language of any mold Forbids imperatives or instructions within the language proper, for then it wouldn't be a functional language; however, any language that supports the functional paradigm simply Has the necessary mechanisms to describe functions by their characteristic inputs and outputs instead of the processing steps needed to compute the function. (I think a great deal of confusion grows simply because people mix: <X-type language> with <language that supports X-type paradigm>, i.e. <An Algebraic Language for Mathematics> and <A Language that supports the Algebraic Paradigm when describing Math> describe very different concepts.) Similarly, one could use the Forbids relationship to discuss typecheckers; a TypeSafe language Forbids the use of language structures that aren't computationally meaningful, or that violate certain language principles and internal assumptions. Without Forbids and Lacks relationships, I don't believe the discussed approach will work to provide any profound insights. -- DB
Profound insights? Good heavens. Lacks and Forbids relationships are fine, but if you're tempted to define an, er, algebra of language discourse or something, you're probably missing the point. The intent of the paragraph was not to frame a mechanism for achieving "profound insights", but simply to informally suggest means to reduce LaynesLaw debates that result from differing interpretations of what a given paradigm means, when in fact it's generally more productive to speak in either informal terms about language features, or in formal or informal terms about the theoretical or mathematical underpinnings of those features. References to "paradigm <x>" rarely convey anything but the most general, and easily misinterpretable, meaning. -- DV
Alternatives?
People use these terms and most people in the field know more or less what the speaker is talking about. I don't see sufficient alternative terminology at this point to replace it. Imperfect communication is usually better than no communication (except in the nuclear launch control room).
See also ProgrammingParadigm http:wiki?search=Paradigm ThereIsNoSpoon