When I have to introduce Mathematica to someone who is/isn't a programmer, I usually have a hard time to provide a useful description. Stating that it is a
- high level programming language & symbolic computer algebra system
is often not enough for more sophisticated programmers. They ask various questions about stuff that most people using only Mathematica might never heard before, as it is designed not to burden the user with things that are specific for platforms but not for mathematics. It would be useful to have a reference list here listing most important properties/specifics that might be useful for others coming from different programming backgrounds. Like: Mathematica is weakly typed, non-declarative, and it allows for ragged lists, it has automatic garbage collection, it doesn't use pointers, it does not facilitate object-oriented programming (though it can be implemented), etc.
Is there a (more-or-less exhaustive) list of categories that partition the space of programming languages and in which Mathematica can be placed somewhat accurately according to its specifications?