Microprogramming vs. Machine Language programming
Basically, microcode expands a limited CPU instruction set to contain higher level instructions that would be cumbersome to implement in hardware, but relatively easy to build with existing instructions.  Microcode allows a processor with a small instruction set to function like one with a larger instruction set.

Lets say you're working with a MARIE instruction set and you would like an Add x,y function, but the architecture only allows a Add x (which just adds what's currently in the register to x)  so you add a microcode instruction:

LOAD x //Load x into the register
ADD y //Add y to the value in the register


Now when your machine language code says:

ADD x,y


it looks up the ADD function you added to ROM (your microcode) and executes it.  This is great because it increases your instruction set, which allows more readable machine code, and since your microcode is stored in ROM, it's also a little faster than calling the LOAD and ADD from RAM.

I used to work at a company that actually wrote microcode to perform custom measurements at very high speeds on their older systems.  However, with the advances in FPGAs they have switched over to those, which are much faster (since you actually are implementing the "custom instructions" in hardware instead of ROM).