Working on my toy functional language in Ruby [1]. Gives constant-space recursion, true higher orderism and homoiconicity in a Ruby environment. I've used it to create a static site generator, which I use to post snippets of code I've been working on [2]. It's a tad rough around the edges, but I hope to have it pretty usable soon!
You understand a usage of monads well, ie. using them to handle failing error states. However, in practice they are also used to deal with other side-effecting functionality such as state, IO, etc. If I was you, I'd look up the Monad instances for State, List, and a few others to get a grip on how you can model your own problem solutions using monads.
I'm new to this site, but hopefully I can give some insight. I'm in Ireland and I'm in my fourth year of CS, but I've also worked at some startups because they frankly aren't mutually exclusive. I've had the pleasure of working with both self-taught and formally-educated programmers, and when it comes down to the daily grind of work the lines between us are pretty blurry.
What I'd miss if I dropped out isn't any notion of a foundation, I'd be able to get it all from the resources mentioned on this page. What I'd miss (as in, it's absence would sadden me) is being able to discuss compiler design and other areas that may not be of interest to most working programmers with respective experts in the field. I'd also miss the impact the piece of paper would have on any potential greencard application but that's another story.
Whenever you want to see the value of x, replace it with traceShow x x