whybother said:
Mathematica-it's treatment of abstract datatypes is VERY poor (lists are vectors, not lists!)
Are you referring to the fact that addition of lists and multiplication of a list by a scalar are defined ? I don't see how this is a drawback, since you can choose not to use this feature.
-the interface looks awful and is not very helpful (lack of use of indentation is horrible)
I like the universality of the interface, it allows me to combine text, equations, code, and graphical output in a single document. It is a very fast tool for students doing homework or for professionals writing papers (it has great LaTeX export).
Also, if you prefer to use a text editor like emacs to creat .m scripts and then load them into mathematica through the shell then you can certainly do that. If you want a 'visual studio' type of environment then look at Wolfram Workbench.
-no concept of orders of growth and optimzation becomes basically impossible (also speed comes back to the fact that lists are really vectors)
Mathematica is slow because it is interpreted rather than compiled. If you are working with rectangular homogenous lists or reals or integers (i.e. matrices with a well-defined dimension and the same data type for each element) then you can have mathematica treat these as machine-arithmetic arrays.
Also, I believe Don Knuth said that premature optimization is the root of all evil --- Mathematica is the ideal programming environment for students or for professionals with assorted mid-size computational tasks or who want to do rapid prototyping of simulations.
-also, you need a license
Yes, more than once I have felt some motivation to start a free clone of Mathematica, but if you look at Octave (free MATLAB clone) it still has a long way to go and Matlab is so primitive compared with Mathematica (from a mathematics / pure CS point of view).
Honestly, for brief uses of symbolic logic I like Mathematica fine. But it should never be anyone first "programming lanauge". EVER.
I think it is a good first language for physics students because it has immediate application in their coursework (e.g. they are more likely to practice iterative programs when it saves them from doing 12 integrals to "compute the first three terms of the Legendre polynomial expansion..." etc).
Physics students just don't have time for all that CS material about data types, delayed evaluation, functions vs procedures, pointers, lists vs arrays, machine instructions, run-time stack, sequence-decision-iteration, etc. The bright ones who go on to graduate school can learn this material in short order if they ever need to, preferably by taking a CS course.