The error handling is atrocious. The language isn‘t just untyped - everything that‘s not defined is symbolic, and builtins will silently operate on symbolic expessions even if you don‘t expect them to. Consider this:
myfunc[x_] := {2*x, 3*x};
myfnuc[5][[1]]
Without the 'fnuc' typo, this would create the list {10, 15} and take the first part, giving 10. With the typo, it returns 5 without warning. Why? myfnuc[5] is now treated symbolically, and the first part/argument is 5.
A similar problem comes from functions like Integrate, which become symbolic when Mathematica doesn‘t find a solution. So instead of a number, you might randomly get a symbolic expression. If you were trying to do a complicated computation with the result, this might now produce a symbolic result which is too big to fit your memory, filling up all RAM before the Mathematica kernel crashes.