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