Basically, CUDA only works for NVIDIA cards, whereas OpenCL supports all. In theory. To my knowledge the only usable implementation for OpenCL is by AMD; NVIDIA also implemented OpenCL for their cards, but didn't put a lot effort into it.
CUDA only is more powerful than the more generalized OpenCL standard. However, OpenCL is technically not limited to GPUs, e. g. there is a PGI OpenCL compiler for multicore ARM CPUs (see
http://en.wikipedia.org/wiki/The_Portland_Group[
^])
I suggest you check wikipedia on both:
http://en.wikipedia.org/wiki/OpenCL[
^] ,
http://en.wikipedia.org/wiki/CUDA[
^]
As to using them in (any kind of) programming, I suggest you read up on parallel programming - that is a way too extensive topic to be answered here.