Сложность в понимании ибо это зачастую сложнее всего (так же каждый язык по своему сложный есть и похожие языки).
ТУТ подходит фраза(если посветить дохера времени какой либо фигне то в этой фигне ты достигнешь нефиговых результатов).
- Есть стандарт языка с формальным описанием синтаксиса/поведения программы.
- Есть набор того, что принято называть "паттернами". Паттерн - это совет типа "не забивайте гвозди в стену отверткой, пораниться легко. Для решения таких-то задач можно пойти такими, такими и такими путями, а вот такими лучше не идти, потому что может произойти то-то и то-то".
Научиться языку - это значит осознать паттерны для него и привыкнуть к ним.
Если новичок, то в том, что не до конца знаешь и/или помнишь функции и конструкции. Постоянно проскакивают банальные ошибки в синтаксисе.
Если миддл и выше, то ни в чем. Это просто вопрос времени, а не сложности.
В изучении и абстрагировании. Когда ты дойдешь до темы абстрактных классов, интерфейсов и делегатов, ты поймешь о чем я. Или вот пример проще: контактинация -ты только вдумайся в эту лексему ))) Или, как тебе такое: массивы, массивов, массивов?