Увеличение сложности систем неуклонно, угнетающе и в конечном итоге наносит вред. Для меня, программиста старшего поколения, это также сильно разочаровывает.
Я программирую уже более 40 лет, написав код на 50-100 различных языках или диалектах, и стал экспертом в 5-10. Причина, по которой я могу утверждать так много, состоит в том, что в основном это один и тот же язык, с настройками. Твики добавляют сложности, делая каждый язык немного отличающимся.
Я реализовывал одни и те же алгоритмы бесчисленное количество раз: коллекции, преобразования, сортировка и поиск, кодирование / декодирование, форматирование / анализ, буферы и строки, арифметика, память, ввод / вывод. Каждая новая реализация добавляет сложность, потому что каждая немного отличается.
Я удивляюсь волшебству, сотворенному высокоразвитыми художниками трапеции веб-фреймворков и мобильных приложений, и тому, как они могут создавать что-то такое прекрасное в столь короткие сроки. Затем я понимаю, как много они не знают, сколько им нужно будет узнать о данных, коммуникациях, тестировании или потоках, или что-то еще, прежде чем их действия станут полезными.
Я изучил свое мастерство в эпоху языков четвертого поколения, где мы искренне верили, что мы создадим последовательность языков более высокого и более высокого уровня, чтобы постепенно охватывать все больше повторяющихся частей программного обеспечения для написания. Так как же это получилось?
Microsoft и IBM убили эту идею, вернувшись в C для написания приложений для Windows и OS / 2, в то время как dBase / Foxpro и даже Delphi томились. Затем веб сделал это снова с конечным набором языков ассемблера: HTML, CSS и JavaScript / DOM. Оттуда все было под гору. Всегда больше языков, больше библиотек, больше фреймворков и больше сложности.
Мы знаем, что должны делать это по-другому. Мы знаем о CoffeeScript и Dart, о Less и Sass, о шаблонах, чтобы избежать необходимости писать HTML. Мы знаем, и мы делаем это в любом случае. У нас есть наши фреймворки, полные неплотных абстракций, и мы видим, какие чудеса могут сделать те немногие избранные, кто изучает тайные заклинания, но мы и наши программы попали в ловушку решений, принятых в прошлом. Слишком сложно изменить или начать все сначала.
В результате вещи, которые должны быть легкими, не легки, а вещи, которые должны быть возможными, почти невозможны из-за сложности. Я могу оценить стоимость внесения изменений для реализации новой функции в установленной кодовой базе и быть уверенным, что я буду прав. Я могу оценить, но я не могу оправдать или объяснить это. Это слишком сложно.
Отвечая на ваш последний вопрос, я бы настоятельно советовал молодым программистам начинать как можно выше на слоеном пироге и погружаться только в нижние слои, когда потребность и желание дают импульс. Я предпочитаю языки без циклов, с небольшим или отсутствующим ветвлением и явным состоянием. Лисп и Хаскелл приходят на ум. На практике я всегда заканчиваю с C # / Java, Ruby, Javascript, Python и SQL, потому что именно там находятся сообщества.
Заключительные слова: сложность - главный враг! Удар, и жизнь становится проще.