A few months ago Franklin told me why C# is fundamentally complicated and one of the reasons had to do with function pointers messing up the core paradigm of the language, I didn't understand function pointers before so I kept using the language as I had no reason not to use it.
Now I see Franklin's view, that a language should always stick to its core paradigm. Take C# and Java for example,
Java is a much better language, why? Java sticks to its core object-oriented paradigm, this makes code in Java mostly simple and readable. It also makes Java easy to learn and use. C# doesn't stick to its core object-oriented paradigm, this obviously makes code look much more complicated and unreadable. C# is hard to learn because there are so many useless things in it that programmers feel the need to learn.
One example of this is local variable type inferencing, this feature is pointless for a statically typed language like C# fundamentally is, this makes code hard to understand.
There are also other examples I haven't dug into much including structs in C#, intuitively, this sounds like a useless feature.