Мой друг прислал мне ссылку на это видео. Оно длинное (если хотите посмотреть, сделайте это на двукратной скорости). Однако подытожу для вас — новый софт глючит, производительность инженеров резко упала, никто не работает над сложными/интересными проблемами. Мы все умрем, и цивилизация рухнет.
В обычном случае я бы, наверное, просто пожал плечами. К сожалению, всегда есть паникеры и люди, для которых стакан наполовину пуст.
Однако в последнее время я достаточно часто натыкаюсь на такое ощущение. И думаю, что было бы неплохо ответить.
Пара примечаний:
- Я уже не юноша, поэтому я часто жалуюсь. Многие из моих жалоб прозвучат для молодого поколения как «старые добрые времена». И часто, когда я смотрю такие видео, я узнаю одни и те же нотки. Люди (в том числе и я) склонны сначала принимать эмоциональное решение (раньше все было лучше), а уже после находить интеллектуальную базу, чтобы доказать это.
- Я признаю, что многие люди, которые говорят о ниспровержении индустрии (включая Джонатана Блоу в видео выше), умнее, авторитетнее и начитаннее меня (ну… это еще не значит, что аргумент правильный).
Есть три из четырех главных аргументов, которые я слышу снова и снова в разных местах.
Программное обеспечение стало глючить
Это прекрасно вписывается в категорию «Старые добрые времена».
Подскажите когда софт не глючил? Давайте перемотаем наши часы на 25 лет назад. Тогда мы были молоды. Некоторые из моих читателей, вероятно, еще даже не родились.
Только что вышла Windows 95. Нужно ли напоминать вам, насколько хорошо она работала?
Если вы еще вернетесь назад во времени, вы все равно будете находить ошибки то там, то тут.
Вот статья о некоторых самых известных ошибках.
У этой проблемы есть еще одно измерение. Текущее программное обеспечение (например, веб-приложения) предоставляет гораздо больше функциональных возможностей, чем многие программы того времени. Например, я помню какой-то софт для библиотек, который сейчас эквивалентен 3–4 веб-страницам (индекс + поиск, создание, обновление, удаление). Текущую версию такого программного обеспечения могут использовать (одновременно) сотни тысяч пользователей, на компьютерах всех видов и размеров (с разными процессорами), по всему миру, с автоматическим резервным копированием, обновлением и т.д.
Да, возможно, в исходной версии такого программного обеспечения, выпущенной в 1985 году, было меньше ошибок, но по нынешним стандартам оно считалось бы бесполезным.
Ожидания пользователей в отношении программного обеспечения выросли. Одно и то же библиотечное программное обеспечение должно иметь доступ на основе ролей, предварительный просмотр, сложный поиск, резервирование и сотни других функций, чтобы быть жизнеспособным на рынке. Этот рост требований пользователей происходил так постепенно, что большинство людей даже не заметили этого.
В результате странно говорить что-то вроде: «Эй, в мое время бумажные самолетики летали с первого раза, а теперь на исправление всех ошибок в новом Боинге уходят десятилетия».
Что такое сложная/захватывающая проблема?
Каким-то образом многие люди (особенно старшее поколение) сосредотачиваются на одном и том же списке вещей, которые они считают сложными/интересными проблемами: дизайн ОС, дизайн компилятора, игровой движок (рендеринг), взаимодействие с оборудованием.
Не поймите меня неправильно. Все это сложные и интересные задачи. Однако это НЕ единственные сложные и захватывающие проблемы во Вселенной. Кроме того, рынок достаточно насыщен ОС и языками программирования.
Требования рынка изменились, и это нормально. Сейчас в Apple App Store миллион игр. Так что, может быть, это уже не очень захватывающе, но на это есть огромный спрос (и, кстати, этот рынок настолько насыщен, что спрос переместился на что-то другое).
Честно говоря, я бы предпочел, чтобы инженеры вкладывали время в то, что пользуется спросом (даже если это выглядит упрощенно), а не в создание вещей, которые были великолепны три десятилетия назад.
И для тех, кто говорит, что новых интересных/сложных направлений нет. Да ладно. Машинное обучение, ИИ, квантовые вычисления, робототехника, криптография. Это огромные волны, которые стали реальностью только в последние пять лет.
Производительность разработки снижается
Прежде всего, я написал статью «Есть много серебряных пуль» о вещах, которые повышали производительность труда инженеров большую часть последних нескольких десятилетий.
Самая главная вещь, которая сбивает людей с толку, — это путаница между краткосрочной продуктивностью (насколько быстро вы можете запустить редактор и создать что-то) и долгосрочной продуктивностью (сколько ценности/денег это может принести).
Ага. Кратковременная производительность при выполнении некоторых задач может и снизилась. Вроде «Еще вчера я мог заархивировать свое приложение, загрузить его на сервер и бум — мы закончили. А теперь мне нужно написать файл докера, создать конфигурацию развертывания K8S, настроить группы безопасности и т.д. чтобы запустить его».
Как я указал выше. Очевидный недостаток заключается в том, что производительность этой краткосрочной операции каким-то образом приравнивается к общей производительности.
Да, вы будете писать этот Dockerfile и K8S. И да, вам, вероятно, придется потратить время на его изучение. Однако в течение срока действия проекта это сэкономит вам время.
Достигнута максимальная сложность, с которой мы можем справиться
Это самый интересный аргумент. Пирамида технологий, которые мы используем для создания ценности, становится все выше и выше.
Классическая картинка из комиксов XKCD:
Вы можете легко стоять на миллионах строк кода, когда пишете свой Hello world (я имею в виду ОС, веб-сервер, компилятор или интерпретатор, виртуализацию и т.д.).
И любой проект среднего размера использует огромное количество открытого исходного кода, взаимодействует с некоторыми сторонними сервисами и т.д.
И если вы работали с большим и сложным программным обеспечением, вы знаете, что оно постепенно становится неуправляемым зверем (пока не появится преемник, чтобы убить старого дракона и стать новым).
Мы постепенно наблюдаем этот процесс разрушения сложных вещей и замены их более простыми модульными. Однако я думаю, что и здесь есть некоторый предел.
С одной стороны, я думаю, что мы все еще достаточно далеки от достижения максимальной сложности, с которой могут справиться люди (по-видимому, мы довольно прилично абстрагируемся). Тем не менее, я вижу, как отрасль постепенно заходит в один из двух тупиков.
- Мы достигнем максимальной сложности, с которой мы можем справиться (еще далеко).
- Мы начнем создавать инструменты, которые мы не понимаем — это уже происходит. Люди понимают, как обучать нейронную сеть, но понятия не имеют, почему она возвращает одно значение, а не другое, кроме слов «о… из-за весов и смещений».
Вроде как резюме
Я не согласен с тем, что программное обеспечение находится в упадке. Просто посмотрите на количество компаний, идей, денег и вовлеченных людей. Я думаю, что это борьба (а не упадок).
Я знаю, что индустрия пошла не туда, куда, думали люди, она пойдет 30 лет назад. Однако это жизнь.
И, наконец, я вижу некоторые трещины в стенах (особенно в отношении сложности и управления открытым исходным кодом). Было бы интересно посмотреть, куда это зайдет.