Just about everything these days has a computer of some sorts in it. Your VCR, your car and even your washing machine or toaster may have a microcontroller or microcomputer in it to control it. These computer based systems are often referred to as Embedded Systems, because they have a computer embedded within something. Programming embedded systems requires a different set of skills from standard PC programming, because you need to know a bit about the hardware (electronics and mechanical systems) that your program is running on or controlling. You often have to be very aware of what resources (such as memory, speed etc.) your program can use. A large percentage of this work is done in C, using an operating system, but some requires assembly language. The subset named "firmware" will also include programming FPGA devices (Field Programmamble Gate Array).