Coming from a background of basic C++98 skills and trying to become proficient in C#, I am finding the language to be very tedious to learn. For every keyword in C++, there are 2 related keywords in C#, with very slight differences between them. For example, in C++ there is const, and in C# there is const and readonly, with the subtle difference being that readonly can be intialized at runtime. As another example, in C++ there is &, whereas in C# there is ref and out, subtly differentiated. Inferior for writing generalized algorithms. For example, it is impossible to create the equivalent of C++'s std::reverse because there is no natural concept of a bidirectional iterator. Stupid syntax for core data structures such as multidimensional arrays. I would like hear an justification for changing the [ ][ ] for defining arrays in almost every other language to [ , ] in C#. That's like MATLAB-style initialization, except you use the [ ] [ ] to actually access the elements. Confusing! Can't define sizes of arrays in parameters to a function. This is downright annoying. So much syntactic sugar that can actually cause major errors if you don't understand that it is syntactic sugar. LINQ reversing the position of the select statement in comparison to SQL queries, when the main reason people use LINQ is to hook it up to SQL databases. The language developers were trolling us with that one.