For a slightly more advanced level do take a look at these two free books:
Mathematic Programming: an advanced introduction, by Leonid Shifrin
Power Programming with Mathematica: The Kernel, by David Wagner.
The second book is again old, but very useful. It was released for free recently.
Regarding the natural language (Wolfram|Alpha) integration, I'd say forget about it if you want to do serious work. I find it useful in two ways: if you're a beginner, you can try to type in something in Engish and have the system translate it to a program Mathematica expression. That will be a starting point for you to
find and to
learn the correct syntax. I also find it useful to retreive data from Wolfram|Alpha, but that's not really Mathematica programming, just querying for data.
To learn, use the tutorials I linked, and browse the main active Mathematica forums (this one and
Mathematica.SE).