Развитие или замедление ИТ?

в 6:30, , рубрики: информационные технологии, История ИТ

Прогресс человечества за последние три-четыре сотни лет был экспоненциальным. Под прогрессом человечества я понимаю здесь суммарный вклад всех наук и технологий: математики и физики, биологии и химии, инженерных дисциплин, архитектуры и промышленности. Появилось множество новых областей, таких как космонавтика и микроэлектроника, генная инженерия и информатика. Но каждая конкретная отрасль развивается неравномерно и не имеет экспоненциального характера.

image

В некоторых отраслях может наблюдаться замедление развития и даже стагнация. В этой статье я пытаюсь размышлять о выходе на плато развития в ИТ.

Рассмотрим, например, автомобильную промышленность. Можно сходить на выставку автомобилей и в принципе, увидеть, что никаких значительных изменений в автомобилях нет. Да, развиваемые скорости увеличились, да, стало удобнее, появились всякие АБС (антибуксировочная система), климат-контроль, нагревание сидений, обзорные видеокамеры и прочее, но это всё относится во многом к дополнительным аксессуарам и дизайну. Это не революционные изменений. Машины остались примерно теми же, что и 30-50-70 лет назад. Нет летающих машин, нет шагающий на ножках машин или машин, построенных на других принципах (не считая Tesla и self driving car от Google, конечно).

Похожая ситуация и с космической отраслью. Наша страна является историческим лидером в плане космических технологий: первыми запустили спутник, первыми отправили человека, на нашей космической станции полно космонавтов из других стран. Но в последнее время тоже нет революционных изменений: ракеты основаны на тех же принципах, что и 50 лет назад. Марс не заселили, даже на луне до сих пор не видно яблоневых садов. Люди в 60-е годы думали, что мы уже всю солнечную систему заселим и выйдем за её пределы. Но у нас до сих пор ракеты со спутниками падают в океан.

Представляется логичным, что развитие наук и инженерных дисциплин носит скачкообразный характер – появляется новая революционная теория, например, теория Ньютона, пересматривается мировоззрение и наука выходит на новый уровень. На котором она развивается медленно до следующего революционного скачка – например, теории Эйнштейна. Происходит смена парадигм и последующий экспоненциальный рост. Который неизбежно выходит на плато насыщения.

image

Замедление развития после скачка обусловлено тем, что это последующее развитие представляет в основном различные оптимизации и улучшения. Со временем, после того, как все простые улучшения уже применены, количество и характер этих оптимизаций становятся очень сложными. Часто они гораздо сложнее, чем сама идея. Например, в автомобилях изначальная идея не менялась более сотни лет, но каждый год выходят новые модели, с различными новыми автоматическими системами: автоматической коробкой передач, системами экономия топлива и прочее. И все сложные системы теперь могут проводить самодиагностику и выдавать ошибки.

Это же касается и процессоров. К изначальной идее добавились три уровня кэширования, конвейеры, суперскалярность, предсказательные системы ветвлений и прочее.

В конце концов сложность и стоимость внедрения новых оптимизаций будет превышать потенциальной пользу – все низковисящие фрукты будут уже сорваны – и технология выйдет на плато до следующего скачка. Скачки называются научно-техническими революциями. Эти скачки могут быть вызваны гениальными идеями конкретного человека (например, фон Неймана или Алана Тьюринга), взаимным влиянием систем, социальными, экономическими, или какими-то иными факторами.

Кроме того, чем старше становится наука, чем больше открытий в ней было свершено и чем больше экспериментального опыта и знаний она накопила, тем больше всего необходимо изучить, тем сложнее молодым ученым начать изобретать что-то новое (поскольку, чтобы создать что-то новое, необходимо вначале ознакомиться и понять всё, что было создано до тебя). Именно этим объясняется постоянное и значительное увеличение возраста Нобелевских лауреатов.

Очевидно, что в настоящий момент времени информационные технологии проходят стадию экспоненциального роста. Сколько осталось? Благодаря чего мы видим такую скорость развития ИТ? Чем вызван такой рост?

Причины, на мой взгляд, следующие:

Во-первых, на развитие ИТ повлиял вклад других инженерных областей – микроэлектроники, что вызвало снижение стоимости и рост мощности железа. Почему процессоры стали мощнее? Изобретены полупроводниковые транзисторы, затем появились технологии фотолитографии, сверхбольшие интегральные схемы. Прекратит ли действовать закон Мура в ближайшие годы – тема отдельной статьи.

Вторая причина: вливание денег.

  • Вливание денег физлицами. Массовость – компьютеры появились у всех. Смартфоны появились у всех. Люди платят деньги за железо, за софт, оставляют деньги на различных интернет-сервисах.
  • Вливание денег в ИТ со стороны коммерческих компаний. Это и разработка программ для них, и создание сайтов и вложения в контекстную рекламу. Конечно, любая программа требует сопровождения. Коммерческие фирмы вынуждены покупать обновления, многие пользуются моделью SaaS (Software as a service), когда ежемесячно взимается абонентская плата. Таким образом, разумеется вливание денег со стороны фирм продолжится. Это касается и рекламы в интернете и в мобильных приложениях.
  • Инвестиции в стартапы. И большие фонды, и просто богатые люди, которые стали пафосно называть себя «бизнес-ангелами» вкладывают большие деньги, полученные из других отраслей, в стартапы.

Развитие или замедление ИТ? - 3

Все эти вливания денег дают возможность оплачивать огромную армию разработчиков, которые и создают миллионы приложений. Я думаю, что вскоре тут произойдёт насыщение: компьютеры теперь меняют реже, чем раньше, корпорации уже написали свой софт, а что касается заката стартапов – про это тоже можно говорить отдельно.

Интересное и парадоксальное наблюдение: несмотря на такое колоссальное увеличение мощности процессоров, я не вижу столь же значительных изменений в скорости выполнения и задачах, которые я решаю. Например, нет большой разницы между вордом и экселем 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, паттерны и рефакторинг Накладные расходы на менеджмент и организацию из-за увеличившегося количества разработчиков, работающих над проектом

Спасибо за внимание!

Автор: holyhope

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js