Microcontrollers and electronics
I've found amateur hardware design and microcontroller programming to be a natural extension to software development. Designing the circuits is kind of like putting a GUI together, but with different rules. With modern microcontrollers and IC's, it's pretty much putting building blocks together and making the right connections.
On the software design side, the major difference is that there is no underlying OS to hinder or to help you. Even though interacting with the microcontroller's peripherals is kind of like making API calls, you still have keep things like the clock frequency and how long your code takes to execute in mind, because there is no multitasking.
On the other hand, you can accomplish some pretty cool stuff with microcontrollers. This page is dedicated to my learning efforts in this area.
Projects
A list of the projects I have completed or abandoned, some with circuit diagrams and code.
Useful tidbits
Some tips that might help you get started on your own electronics projects. Includes stuff on basic electronics circuits, microcontrollers and peripherals, and PIC assembly language.