Стечение обстоятельств. Сверх низкий порог вхождения в разработку в сочетании с крайне высоким уровнем абстракций используемых в языковых конструкциях. Вот и получается что писать могут все а понимать что они пишут не больше 5%.
Да сейчас в любом языке есть профессиональный уровень (тесты-библиотеки-фреймворки), а есть дилетантский. Но скажем в Kotlin и Android очень сложно быть идеальным профессионалом и чувствовать себя им, и наоборот, реально жесткому дилетанту сложно вообще подступиться к нему. В C++ профессионалом быть относительно просто, но... их почти нет, потому что C++ мало где применяется (не считая применений, которые больше похожи на Си). В C# (особенно WinForms) тонка грань между профессионалом и дилетантом. Ни тебе MV* толком, ни чего. Здесь нет всех этих новомодных излишеств, но и нет таких архаизмов, как в C++, JavaScript. А вот в Web как раз полно и дилетантов и профессионалов. При этом, однако, никакие профессиональные средства (как, впрочем, и везде) не позволяют ускорить и облегчить работу так, чтобы все делалось в одно лицо, или два. Поэтому в командах часто есть дедовщина, и дилетантизм джуниора - хороший предлог чтобы гнобить его, поработить, и продолжать это по инерции даже тогда, когда он научится выдавать не только объем, но и качество. Тимлид и сеньоры все равно будут очень неохотно замечать его успехи, потому что им не хочется их видеть, им удобнее, чтобы он вывозил на себе всю команду.