The Real World Makes Programming Less Fun
Programming can be a great hobby. Anyone can do it, there are lots of good, free tools, and you can "scratch an itch" - write something that you need yourself. Hacking for fun is a great way to learn more about the computer you're using, and is just an interesting mental exercise.
Let's say you decide one day "I want to write a text editor". Sure, there are a thousand other text editors out there - but the reason all these editors exist is because a thousand other people said "I want to write a text editor" and did it. If the existing tools don't do exactly what you want, chances are there are other people like you, who aren't happy with the existing tools and will like what makes yours unique.
A text editor is a great example of where the Real World makes doing the job less fun.
So you start out with a character buffer. You're working in C++ so you have a linked list of pointer to char, an 8 bit type. You write code to let the use type characters and insert them into the buffer, track multiple lines, handle cursor movement. Handle PgUp, PgDn to move a page at a time. Cool stuff - you've got a marginally working editor. So you create a project at Google Code and post it.
Some users download it and start playing with it. A user in Montréal says when she reads in text files that have her city name in them with the accent, the accented character doesn't show up right. Uh oh.
So you find a copy of Joel's article on Unicode and read it. No problem - change that char buffer to wchar_t and you're good.
Well, better. Your new friend in Montréal is happy, but after a little while, you're getting email from some new friends in Turkey asking why their text doesn't look right. Googling around a bit, you find Michael Kaplan's blog, and reading it scares the pants off you and you give up and tell the user in Turkey that maybe they'd be happy with Notepad.
There are examples like this all over software development. Want to talk HTTP? Sure you can send GET /foo HTTP/1.1 and get stuff back most of the time, but handling every case is hard.
The best way for a hobbyist to handle these things is to reuse as much code as possible. If you're using the .NET framework to work with strings then you don't even have to think about most issues; they're handled for you by the framework. Same with HTTP. The Flex framework, the various Java frameworks - as much fun it sounds like it would be to implement HTTP, find a mailing list where implementers are talking about issues, see how much fun it really is once you're past the easy part.