Earlier quoted context omitted.
If you come from a programming background, just treat it as a Lisp with M-expressions rather than S-expressions. It all comes together quite quickly then. At it's core Mathematica is actually a rule rewriting engine. but except for more heavyweight uses you can view it as simply a Lisp with the worlds best standard library.
it's a great language, once you get past the fact that writing code in the notebook is a horrible experience. You get a great lisp, along with pattern matching and rule replacement. I can recommend the book by Paul Welling, as well as the books by Michael Trott (very meandering). Just funking things up in the notebook is the most fun I've been having in a long time. You just get sucked into trying more and more thing…
The notebook is a literate programming document. It contains my thoughts and process for creating an algorithm/piece of code along with tests and examples. This is very, very different from how people traditionally "program".
However, Mathematica has some very real, very strong deficiencies if you wanted to build an application end-to-end within it. It's dynamically typed, with everything-is-a-list mentality. So you will get type errors.
Unit testing (let alone combinator libraries like quick check) are only available at the higher price levels.
Warning personal opinions ahead!! Wolfram employees often have have strange views on how software is built outside of Wolfram Inc. Unit tests are alien, and type checking or datatypes (Say, to make sure that order your fancy Mathematica based trading system is going to make is sane) are seen as only things dumb rails programmers need. Rather than tools to make developers more powerful.
I would honestly recommend every programmer learn Mathematica. I'm sure they'll find that they can aim far higher when they have the right tools behind them. It's the same distance again from Python/Ruby as Python/Ruby are from C. Probably more.