Basically in circuit programming (aka in system programming) is a way of reprogramming devices while they are already on the board. For instance, if you have a regular "classic" eprom, you have to pull out of the socket on the board, stick it into a uv eraser to clear the fuses, then put it into a programmer to load the code into it. Finally, you put the part back on the board and test again. ISP requires you to add a few components to your board (usually a header and a few resistors). Then you can just plug a cable into your header and download new software to the chip while it is still on the board. It is a very efficient way to speed up the test/edit/compile/download development cycle. In addition, you can have the boards built, the parts attached directly to the board and then program them after assembly is complete. Many AVRs, PICs, and FPGAs (and other devices) support this type of programming.