How to start programming your own Bitcoin client?
I don't believe anyone has published a detailed spec anywhere if that is what you are hoping for.  There is some information on the bitcoin wiki, but your best option is to review the existing implementations.

Check out BitCoinJ (a from scratch bitcoin implementation in Java) and BitCoinSharp (a C# port of BitCoinJ).  They are not full implementations yet, but they are very far along and can do most of the tasks of a bitcoin client. 

No matter what language you plan to create your implementation in, looking at these is very valuable because they are very thoroughly commented and much easier to understand than the official C++ client.