Often when learning about .NET I run into things that hail from the COM world, or C/C++ (handles, gdi, interop, STA/MTA, etc., the list goes on!).
Would it be worth my time to go learn how to program in COM with C or C++, thus killing two birds with one stone?
Would this deepen my knowledge of developing with .NET? I am tired of the “This HAPPENS BY MAGIC” feeling!
Learning COM will help you understand certain portions of .NET better, but they are mainly the portions that deal with COM interop. It will not help (much) for general .NET development overall, other than in certain scenarios.
That being said, if your primary goal is to learn and be focused in .NET, I would focus on learning some of the newer .NET technologies. Between WCF, WPF, Silverlight, WF, EF, etc – there’s no way one person can become a true expert at all of the .NET technologies already existing, let alone others. Focusing on the main .NET based technologies that interest you may be a more productive use of your time.
If you want to try to expand your knowledge in general, then COM may be worth learning – but I’d probably personally recommend learning a new language, especially one that uses a very different paradigm than your main .NET language. For example, studying a functional programming language might really expand your view of programming and be a much better use of your time.