The problem with programming (in C#, in 2008)
In C# there is one way to create objects: the new operator.
Now, one sentence in and I'm already telling lies. new is only the "normal" way to create objects. You can also call Activator.CreateInstance or use reflection to get a constructor reference and invoke it.
So normally you'll use new and that immediately puts you at odds with "best practices" for developing C# software in 2008. Constructors are bad because they create dependencies, especially when they have lots of arguments that also need to be constructed (creating objects to send into other objects to get a final result is known as "wiring".)
So a ton of Dependency Injection libraries have sprung up, which act as "object factories", creating object graphs for you. These libraries typically use CreateInstance, reflection, or even dynamically generate and cache IL for object creation.
But isn't that a slap in the face? new is pretty fundamental to C# style "object oriented" languages, and yet using it is considered a "code smell" to be worked around.