Все сильнее ускорявшиеся процессоры привели к появлению раздутого софта, но физические ограничения могут заставить нас вернуться к более скромному варианту кода, которым мы пользовались в прошлом

Давно, ещё в 1960-х, Гордон Мур, один из основателей компании Intel, заметил, что количество транзисторов, которые можно уместить на кремниевом чипе, удваивается примерно каждые два года. Поскольку количество транзисторов связано с вычислительной мощностью, это означало, что, по сути, вычислительная мощность удваивается каждые два года. Так родился закон Мура, обеспечивший для работающих в компьютерной индустрии людей – по крайней мере, для тех, кому ещё нет сорока – такую же надёжную основу, какую ньютоновские законы движения обеспечили для инженеров-механиков.
Но у него, однако, есть одно отличие. Закон Мура – это всё же просто эмпирическая корреляция, за которой наблюдали в определённый период времени, и мы, наконец, подходим к пределу её применимости. В 2010 году сам же Мур предсказал, что законы физики остановят это экспоненциальное увеличение. «Что касается размеров транзисторов, — сказал он, — видно, что мы приближаемся уже к размеру атомов, представляющих собой фундаментальный барьер, однако до этого момента ещё сменится два-три поколения – однако дальше предсказывать развитие событий мы не в состоянии. У нас есть ещё 10-20 лет до того, как мы дойдём до фундаментального предела».
И вот мы дошли до 2020 года, и идея о том, что у нас всегда будет достаточно мощное вычислительное оборудование, подходящее для всё расширяющихся потребностей, начинает казаться слишком самоуверенной. И поскольку для тех, кто занимается этим бизнесом, это было очевидно уже несколько десятилетий, было проведено множество исследований, касающихся хитроумных способов запихивания в машины всё больших вычислительных мощностей, к примеру, многоядерные архитектуры, в которых у CPU есть два или более отдельных вычислительных модулей, или «ядер». Всё это делалось в надежде отложить тот ужасный день, когда у кремниевых чипов закончится место для манёвра (к примеру, новый Apple Mac Pro работает на 28-ядерном процессоре Intel Xeon). И, естественно, бешеными темпами развиваются исследования квантовых компьютеров, что, в принципе, может стать эпохальным прорывом.
Но для вычисления требуется комбинация из железа и ПО, и одно из предсказуемых последствий закона Мура заключалось в том, что он сделал программистов ленивыми. Написание ПО – это сложное ремесло, и некоторым оно даётся лучше, чем другим. Они пишут более элегантный, и, что важнее, более проворный код, который и исполняется быстрее. В ранние дни, когда железо было относительно примитивным, мастерство программиста имело большое значение. К примеру, когда Билл Гейтс был ещё пацанёнком, он написал интерпретатор BASIC для одного из самых первых микрокомпьютеров TRS-80. Поскольку у машины была крохотная по размеру ROM, Гейтсу пришлось уложить всю программу в 16 Кб. Он писал её на ассемблере, чтобы увеличить эффективность и сэкономить место; есть даже легенда, что многие годы спустя он мог процитировать всю программу по памяти.
И в ранних годах вычислительных систем можно найти тысячи подобных историй. Но с воцарением закона Мура необходимость в экономном, бережливом коде постепенно исчезала, и мотивация изменялась. Программирование превратилось в промышленную дисциплину для «инженеров ПО». Создание таких популярных программных экосистем, как операционные системы и коммерческие программы, требовало участия больших команд разработчиков; на этом основании выросла бюрократия из менеджеров проектов и исполнительных директоров. Крупные программные проекты превратились в марши смерти, которые ярче всего описал Фред Брукс в своей знаменитой книге "Мифический человеко-месяц", опубликованной в 1975 году, и с тех пор всё время переиздающейся по весьма уважительной причине – она до сих пор актуальна. А в процессе всего этого ПО раздувалось и становилось неэффективным.
Но это не имело значения, ведь железо всегда выдавало новые вычислительные мощности, скрывавшие проблему раздутого программного обеспечения, или bloatware. Добросовестных программистов это часто бесило. «Единственным следствием появлен��я мощного железа, которое я наблюдаю, — писал один из них, — является то, что программисты пишут на нём программы, раздувающиеся всё сильнее и сильнее. Они становятся ленивее, и поскольку железо достаточно быстрое, они не пытаются изучать алгоритмы или оптимизировать код. Это безумие!»
Так и есть. В лекции 1997 года Натан Мирволд, бывший однажды главным инженером у Билла Гейтса, вывел свои четыре закона программного обеспечения:
- ПО – как газ, оно расширяется, чтобы заполнить всю ёмкость.
- ПО растёт, пока не достигнет пределов, заданных законом Мура.
- Рост ПО делает возможным закон Мура – люди покупают новое железо, поскольку того требует ПО.
- ПО ограничено только человеческими амбициями и ожиданиями.
В то время, когда власть закона Мура подходит к концу, из законов Мирволда следует, что у нас есть только два варианта. Либо мы приструним свои амбиции, либо мы вернёмся к написанию более экономного и эффективного кода. Иначе говоря, назад в будущее.
