I know you guys probably get this question a lot but I want to pick up programming in my free time and there are so many languages out there I'd like to know whats the best one to start out with.
It depends on how your mind works.
You could start with an imperative language like C or Pascal. If you choose C, read K&R.
You could start with a non-purely functional language like Scheme by reading SICP.
You could start by getting familiar with the underlying architecture of your CPU, by reading something like the Intel Processor manuals.
You should also read TAoCP at least partially.
I'd suggest you at least read SICP and K&R, then you can pick some more advanced languages like Common Lisp or Haskell, depending on your tastes.
If you want to be an ENTERPRISE codemonkey, you could pick a different path and just learn Java or C#, or even C++. Java and C# aren't that hard languages to learn, though if you already know C, they'll come around easier.
I wouldn't suggest you learn PHP, Perl, Basic first as they'll teach you bad habits, but they might end up useful for quick hackjobs.
Some other people would suggest learning something like Python first, but I think learning a Lisp instead would be more helpful, though some people hate Lisp' syntax, so you could choose Python if that's the case for you.
As long as you know all the fundamental paradigms (imperative, functional, object-oriented, metaprogramming) and static/dynamic typing systems, you should be able to pick up new languages up rather easily and fast.
if you want to know how a monad works ... Haskall
Monads are not specific to Haskell, and IME Haskellers do a shit job of explaining them Dan Piponi being the exception