Leonid has presented a nice overview of some of MMA's weak and strong points. I'll present here some arguments why Python might be worth learning next. These are based on personal experience, since I did not get the point of Python until after I attended this workshop.
Go with Python. You'll be surprised how quickly it's possible to get some things done.
Python is a well designed object oriented general purpose dynamically typed scripting language. Apart from OOP it supports procedural and limited functional programing, so you will be able to practice a different way of writing programs.
Python currently has a lot of momentum in the scientific computing community: (see here, here, here for some nice introductions). The core scientific packages are Numpy, Scipy and matplotlib. But then there is a rich ecosystem for almost anything from HDF5 to antigravity:)
For most stuff Python is fast enough. Critical parts can easily be written in Cython or by hand in any low level language capable of producing a DLLlevel language capable of producing a DLL.
Python is open-source and cross-platform.
Regarding MMA integration: I have no personal experience here. But there are options.
I'll sign off with a classic xkcd:
On dark nights I sometimes regret my thesis code is not written in Python (but in MMA). Why you might ask?
I'm doing some numerical stuff on large vector arrays ($10^7$ of 2D points). Somewhere deep down MMA unpacks them for a short while and eats GB of RAM. Loading a 40MB text file takes 3 GB. There is no real pass-by-reference (can be faked with HoldFirst
), so I never know when copies are made. It's not open source or widely used, which makes the code I publish along with any article less attractive.
Don't get me wrong, MMA is the second language I learned (with Object Pascal being first) and I like it. But if I knew then what I know now, I'd go with Python.