What's the difference between hardware and software?
As time goes by, hardware get smaller, faster, and cheaper.
Software gets bigger, slower, and more expensive.
One of the things I like about my job is that I program for micros where size and speed actually matter. A typical machine I program for has less than a millionth the RAM of a typical desktop machine, and runs at about a thousandth of the speed.
It matters in other areas too, it's just that CS colleges are cranking out graduates who are taught that it doesn't. Typical grads today produce some of the most bloated, inefficient, and resource hungry crap code I've ever seen.
J2EE/Java = a plot by Sun to sell more hardware.
My current tasks are a mix of embedded Linux controlling a CAN network, GPS, 802.11b network, digital signal processing, mesh networking, ZigBee sensors, PIC microcontrollers and new actuators to couple/uncouple a train, control angle cocks and set/release handbrakes. The complete set of Linux OS plus applications has a disk footprint around 15 MB. CAN controllers have around 40 Kbytes of PIC code. It's takes a breadth of experience in embedded programming, datacomm, signal processing and electrical engineering at component level.
I've driven the PIC18F6585 down to 4 MHz clock speed with a 125 KHz CAN bus. The PIC plus transceiver draw is down to 14.5 mA. The factory configuration at 25 MHz was drawing 62.5 mA. Low power draw is critical for my project as it depends on power generated from a Timken bearing generator that provides 20 watts at 15 MPH to recharge the gel cell batteries on the freight rail car.
Grove giveth, and Gates taketh away.
-- Bob Metcalfe.