Re: Difference among ICD, ICE, Programmer and simulator.
Not common today because in-circuit debugging (ICD) is quite powerful and SMT sockets are generally not desired, an emulator (or ICE) is an external device/pod that replaces the on-board uP/uC (through a socket, plug-in pod, and cable). It emulates the device while providing full debugging and usually trace capability. I haven't used one in almost 30 years.
ICD uses debug capability built into the device along with a 2-4 wire serial test connection. Virtually all debuggers today (including Microchip's RealICE) do this, using either JTAG or similar interfaces (such as Microchips ICSP).
When people say emulator today, I think 99% of the time they mean ICD.
A simulator is either a pure software, or a hardware assisted software emulation of the device.
A programmer just programs (usually bare chips), although because in-circuit debuggers are also in-circuit programmers, often "programmer" really refers to the ICD pod.