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.