embedded firmware programming
This depends on what you want to learn from embedded programming.
You can learn about 8-bit microcontrollers. Small systems with little RAM and basic functions. Most have serial port communication, some have USB (Device!!!) or ethernet. This can be used for smaller (OS-less) systems or when enough RAM is available, a small OS can be run on it (uClinux might be possible when enough RAM is available).
Good sources for development boards:
http://www.olimex.com (AVR, MSP430, PIC, ARM, ...): broad selection of boards with programming tools (everything you need)
http://www.ethernut.de (AVR and ARM based boards): active community with a small RTOS. a good start if you want networking.
(ARM boards are actually 16/32 bit, depending on the mode. They are a bit more advanced than the other controllers and will probably have a larger learning curve)
Then there are the more advanced 32-bit single board computers with enough RAM to run a decent Operating system. These boards can run Linux (sometimes WinCE). On most boards you can also run smaller RTOSses (eCOS or RTEMS).
Good sources for development boards:
http://www.embeddedarm.com (with their ARM single board computers) (they have an active yahoo user group community)
http://www.glomationinc.com (intersting boards, no idea what single quantity prices are)
and a good source for JTAG (only needed when doing low level development (bootloader, other RTOS) is:
http://www.amontec.com (then seem to have a new tiny jtagkey (fast JTAG) for 29 euro's)
Regards,
Antharax