Zed Shaw writes about programming, web servers like Mongrel2, and his Learn X the Hard Way books.
HN commenters link his posts on Mongrel2's design and polling benchmarks, and his free Learn Python the Hard Way PDF as a way to start with Python.
Everyone's said this, I'll say it too: Awesome!
I fell into programming by accident at about 21, and I remember what it was like, it's much as you described. Fun times!
All the advice here is good, but nobody has recommended you read "The Pragmatic Programmer", which I found to be a bit enlightening. I still go back to it years later to read and ponder.
Good luck! You sound like you wont need it. It's a damn good career for those who enjoy it and are willing to put in some effort.
EDIT: I never did a CS degree, but considered doing it many times (if work dried up, it never did). I believe though that the people you meet and work with is a major part of doing a degree, so that'd be why I would go. I get to work with good people anyway. This article was posted on HN recently and I think is relevant:
http://sheddingbikes.com/posts/1275258018.html
I admit there are CS-type stuff I can't do (but I know where and who to ask) because I never did a degree. Saying that though, I have worked with people who have had CS degrees and couldn't code themselves out of a paper bag. If I were to go back in time to when I was your age, I'd do the degree, though.
If you are looking for something that is more front-end specific Paul Irish has put together a really great list of blogs, and made a google reader bundle out of them.
http://www.google.com/reader/bundle/user/11165870484951445324/bundle/frontend
Some standout blogs that I always read about programming are:
http://www.quirksmode.org/blog/ - Was writing about JS before it was cool, now it just has some of the most detailed coverage you can get of new things happening in js.
http://dailyjs.com/ - a great daily roundup of the news in the JS community
http://www.nczonline.net/ - A developer who lead many FE efforts inside of Yahoo, very outspoken about how JS should work.
http://www.joelonsoftware.com/ - Joels essays can be a bit cantankerous, but also paradigm changing.
http://sheddingbikes.com/ - pretty much everything that zed shaw does is fucking awesome. Take it with a grain of salt though.
UPDATE:
Oh, I almost forgot steve yegge, http://steve-yegge.blogspot.com/ - In a few essays from steve my programming world opened into one of ideas, and not just syntax.
Yeah, I think we'll migrate all our private stuff to http://gitlabhq.com/
The way GitHub reacted (blocking @homakov) is just wrong and destroyed all my confidence in them. Even more so when it was pointed out that @zedshaw crashed GitHub and didn't get blocked. http://sheddingbikes.com/posts/1306816425.html
Edit: Given that they have now stated that suspending @homakov was only temporary I no longer bear any ill will towards them.
I'm still disturbed by their security practices though. I expected better by the github guys and I don't like what this implies about the rest of their App.
(And yes I am using attr_accessible and not attr_protected since its inception)
Edit 2: See here http://news.ycombinator.com/item?id=3664839
My worst fear that GitHub is using unsafe mass assignment everywhere was NOT confirmed.
Check out http://sheddingbikes.com/posts/1289384533.html,
>Instead of one gigantic process that has to handle all of an application, you'd have a handful of little ones. Instead of scaling massive applications across a cluster, you just scaled each interface out as needed. Instead of upgrading the whole enchilada at once, you just upgraded each interface only if it needed it. Instead of worrying about migrating user's coroutines across upgrades you just did the "Erlang trick" and moved them over to the new deployments.
He goes on to describe Tir, the natural style, and Lua's coroutines. Great intro to a fun framework.
Ain't going to happen. An old-ish comment from the author on github:
"Before [fossil] I wanted to publish my stuff I had two choices: Give my data to services like github, bitbucket, launchpad and then deal with all the whiners who don't like whatever I chose like somehow that makes their tribe inferior."
He has some code on github, but see http://sheddingbikes.com/posts/1306816425.html where he explains that it's mostly because his collaborators prefer it.
Finally, read http://zedshaw.com/essays/why_i_gpl.html to see the author's view of people who request a license change. Basically, he doesn't like those people.
I would love to see "someone" do that benchmark; using epoll, accept as many sockets as possible, for the sake of argument let's stuff one byte down them, and then properly shut them down.
I'm curious how close to the limit of the underlying poll technology we're getting, because it seems like everyone is converging in roughly the same area, in an order-of-magnitude sense.
I also find myself wondering about the implications of these artificial benchmarks and the stuff Zed discussed here: http://sheddingbikes.com/posts/1280829388.html