[Из песочницы] Развитие или замедление ИТ?
Прогресс человечества за последние три-четыре сотни лет был экспоненциальным. Под прогрессом человечества я понимаю здесь суммарный вклад всех наук и технологий: математики и физики, биологии и химии, инженерных дисциплин, архитектуры и промышленности. Появилось множество новых областей, таких как космонавтика и микроэлектроника, генная инженерия и информатика. Но каждая конкретная отрасль развивается неравномерно и не имеет экспоненциального характера.
В некоторых отраслях может наблюдаться замедление развития и даже стагнация. В этой статье я пытаюсь размышлять о выходе на плато развития в ИТ.
Рассмотрим, например, автомобильную промышленность. Можно сходить на выставку автомобилей и в принципе, увидеть, что никаких значительных изменений в автомобилях нет. Да, развиваемые скорости увеличились, да, стало удобнее, появились всякие АБС (антибуксировочная система), климат-контроль, нагревание сидений, обзорные видеокамеры и прочее, но это всё относится во многом к дополнительным аксессуарам и дизайну. Это не революционные изменений. Машины остались примерно теми же, что и 30–50–70 лет назад. Нет летающих машин, нет шагающий на ножках машин или машин, построенных на других принципах (не считая Tesla и self driving car от Google, конечно).
Похожая ситуация и с космической отраслью. Наша страна является историческим лидером в плане космических технологий: первыми запустили спутник, первыми отправили человека, на нашей космической станции полно космонавтов из других стран. Но в последнее время тоже нет революционных изменений: ракеты основаны на тех же принципах, что и 50 лет назад. Марс не заселили, даже на луне до сих пор не видно яблоневых садов. Люди в 60-е годы думали, что мы уже всю солнечную систему заселим и выйдем за её пределы. Но у нас до сих пор ракеты со спутниками падают в океан.
Представляется логичным, что развитие наук и инженерных дисциплин носит скачкообразный характер — появляется новая революционная теория, например, теория Ньютона, пересматривается мировоззрение и наука выходит на новый уровень. На котором она развивается медленно до следующего революционного скачка — например, теории Эйнштейна. Происходит смена парадигм и последующий экспоненциальный рост. Который неизбежно выходит на плато насыщения.
Замедление развития после скачка обусловлено тем, что это последующее развитие представляет в основном различные оптимизации и улучшения. Со временем, после того, как все простые улучшения уже применены, количество и характер этих оптимизаций становятся очень сложными. Часто они гораздо сложнее, чем сама идея. Например, в автомобилях изначальная идея не менялась более сотни лет, но каждый год выходят новые модели, с различными новыми автоматическими системами: автоматической коробкой передач, системами экономия топлива и прочее. И все сложные системы теперь могут проводить самодиагностику и выдавать ошибки.
Это же касается и процессоров. К изначальной идее добавились три уровня кэширования, конвейеры, суперскалярность, предсказательные системы ветвлений и прочее.
В конце концов сложность и стоимость внедрения новых оптимизаций будет превышать потенциальной пользу — все низковисящие фрукты будут уже сорваны — и технология выйдет на плато до следующего скачка. Скачки называются научно-техническими революциями. Эти скачки могут быть вызваны гениальными идеями конкретного человека (например, фон Неймана или Алана Тьюринга), взаимным влиянием систем, социальными, экономическими, или какими-то иными факторами.
Кроме того, чем старше становится наука, чем больше открытий в ней было свершено и чем больше экспериментального опыта и знаний она накопила, тем больше всего необходимо изучить, тем сложнее молодым ученым начать изобретать что-то новое (поскольку, чтобы создать что-то новое, необходимо вначале ознакомиться и понять всё, что было создано до тебя). Именно этим объясняется постоянное и значительное увеличение возраста Нобелевских лауреатов.
Очевидно, что в настоящий момент времени информационные технологии проходят стадию экспоненциального роста. Сколько осталось? Благодаря чего мы видим такую скорость развития ИТ? Чем вызван такой рост?
Причины, на мой взгляд, следующие:
Во-первых, на развитие ИТ повлиял вклад других инженерных областей — микроэлектроники, что вызвало снижение стоимости и рост мощности железа. Почему процессоры стали мощнее? Изобретены полупроводниковые транзисторы, затем появились технологии фотолитографии, сверхбольшие интегральные схемы. Прекратит ли действовать закон Мура в ближайшие годы — тема отдельной статьи.
Вторая причина: вливание денег.
- Вливание денег физлицами. Массовость — компьютеры появились у всех. Смартфоны появились у всех. Люди платят деньги за железо, за софт, оставляют деньги на различных интернет-сервисах.
- Вливание денег в ИТ со стороны коммерческих компаний. Это и разработка программ для них, и создание сайтов и вложения в контекстную рекламу. Конечно, любая программа требует сопровождения. Коммерческие фирмы вынуждены покупать обновления, многие пользуются моделью SaaS (Software as a service), когда ежемесячно взимается абонентская плата. Таким образом, разумеется вливание денег со стороны фирм продолжится. Это касается и рекламы в интернете и в мобильных приложениях.
- Инвестиции в стартапы. И большие фонды, и просто богатые люди, которые стали пафосно называть себя «бизнес-ангелами» вкладывают большие деньги, полученные из других отраслей, в стартапы.
Все эти вливания денег дают возможность оплачивать огромную армию разработчиков, которые и создают миллионы приложений. Я думаю, что вскоре тут произойдёт насыщение: компьютеры теперь меняют реже, чем раньше, корпорации уже написали свой софт, а что касается заката стартапов — про это тоже можно говорить отдельно.
Интересное и парадоксальное наблюдение: несмотря на такое колоссальное увеличение мощности процессоров, я не вижу столь же значительных изменений в скорости выполнения и задачах, которые я решаю. Например, нет большой разницы между вордом и экселем 1996-годов и современными версиями. Как я смотрел фильмы 10 лет назад, так и теперь, только разрешение немного лучше и скачиваются быстрее (в несколько раз, но не в тысячи раз). Нет революционной разницы между Duke Nukem тогдашним и теперешним (именно революционной), многие до сих пор играют в Героев III.
Вот несколько конкретных примеров:
- На очень многих компах (по крайней мере в России) до сих пор установлена Windows XP 15 летней давности.
- Android — где революционная разница между Gingerbread и Marshmallow? Да, стал лучше дизайн, немного доработали GC и перешли с Dalvik на ART. Но нет принципиальной революционной разницы. В ядре нет значительных изменений. Всё те же activity, services, broadcast receivers, что и восемь лет назад.
- Я когда-то занимался lotus notes, которому уже лет 20. Они выпускают новые версии, следят за новейшими технологиями, но окошко свойств базы данных всё такое же, как в версии 10-летней давности. Структура базы та же.
Мне кажется, это происходит потому, что невозможно переписать с нуля такой огромный объем кода. Что есть вопросы обратной совместимости и прочего. Несмотря на все техники типа agile, модульности и прочего, изменять разработанное ПО намного, в десятки раз труднее, чем изначальная разработка. Но выбросить и написать всё с нуля невозможно. Да и зачем? Поэтому ядро систем уже практически не меняется, добавляются рюшечки и внешние вещи, изменяется GUI — то, что легко.
ИТ-отрасль достаточно молодая в двух смыслах, как говорил дядя Боб: ей не так много лет и средний возраст программистов очень небольшой — в районе 30 лет. Так происходит, потому что количество программистов быстро увеличивается за счёт прихода молодых людей — оно чуть ли не удваивается каждые 5 лет. Есть тренд, что программисты в возрасте идут на менеджерские позиции.
Парадоксально, что, хотя базовое ПО решает всё те же задачи, что и много лет назад, инструменты быстро меняются: языки совершенствуются, появляются новые фреймворки и библиотеки, новые подходы. Когда я начинал, я писал на обычном visual basic, на pascal, на Delphi. Сейчас звезда этих языков практически закатилась. В то время не было таких языков, как C# или Scala. Про функциональное программирование никто не говорил, это не было трендом. А ещё чуть раньше, наверное, не использовали Delphi и ООП, писали на фортране. Я помню время, когда люди пользовались DOS, не было интернета, не было google и facebook. Это было 20 лет назад.
Какой вывод можно сделать из следующих двух фактов: приходит больше новичков и всё время появляются новые модные языки, фреймворки, технологии? Программное обеспечение будут содержать множество ошибок и будет переусложнено. Конечно, появляется множество техник, которые призваны снижать сложность кода: непрерывная и гибкая разработка, TDD и модульное тестирование, системы контроля версий и код-ревью. Без системы контроля версий сложно обойтись, когда над кодом работает множество человек. Кода становится всё больше и больше. Десятки лет назад в сложных программах были десятки тысяч строк кода, сейчас — десятки миллионов строк кода. И новое ПО опирается, использует и тянет за собой сотни тысяч строк кода сторонних библиотек. Очень часто в проекте никто не понимает, как работает какой-то модуль. Бывает даже, что никто не понимает, как работает вся система. Кода очень много, он написан разными командами в разное время. Цели могли быть другими. Могли быть предпосылки, о которых просто забыли. Что-то сделали в расчете на будущее, но это что-то не понадобилось. Код стал очень сложным.
То есть объективная реальность такова: системы укрупняются, увеличиваются в размере, над ними работает всё больше и больше людей, кода становится больше, и он становится всё сложнее.
Таким образом, в будущем большинство программистов будут работать над поддержкой огромных монстров, а не писать что-то с нуля. И эта деятельность будет всё сильнее подчиняться правилам, потому что каким-то образом необходимо будет оставлять ПО работоспособным. Всё будет превращаться в четкие бюрократические процедуры. Самовольное нарушение порядка, например, изменение процедуры, будет недопустимо. И это фактор, способствующий замедлению ИТ.
Итого
Факторы развития | Факторы замедления |
---|---|
Увеличение производительности железа (временно) | Увеличивающаяся сложность систем |
Вливание денег (временно) | |
Увеличивающееся число программистов (временно) | Требование обратной совместимости |
Специализация (фронтэнд — бэкэнд) | У половины разработчиков стаж менее 5 лет — много ошибок и плохой код (временно) |
Распространились готовые фреймворки и библиотеки | Приходится тащить много стороннего кода |
Улучшенные языки и IDE, системы контроля версий | Постоянная смена технологий (временно) |
Улучшение методик разработки: TDD, DDD, Agile, паттерны и рефакторинг | Накладные расходы на менеджмент и организацию из-за увеличившегося количества разработчиков, работающих над проектом |
Спасибо за внимание!