следующим образом: «Нет ни одного открытия ни в технологии, ни в методах управления, одно только использование которого обещало бы в течение ближайшего десятилетия на порядок повысить производительность, надежность, простоту разработки программного обеспечения». В более расширенной формулировке (из статей самого Брукса и рассуждений других видных деятелей computer science) можно утверждать, что разработка ПО (и вообще работа в софтверном окружении) всегда будет оставаться деятельностью с непредсказуемой эффективностью и неизвестным результатом. Причем Брукс был уверен (собственно, и до сих пор уверен), что «серебряная пуля» (средство сделать упомянутый процесс эффективным и предсказуемым) не только не существует, но и принципиально не может быть создана.
Однако помимо бруксовой на этот вопрос всегда существовали альтернативные точки зрения. По большому счету весь прогресс технологий разработки ПО (и вообще «софтовых» технологий) можно представить как поиск этой самой мистической серебряной пули; а то, что прогресс до сих пор не стоит на месте (и еще как не стоит!), можно считать косвенным свидетельством того, что серебряной пули как не было, так и нет.
Конечно, сегодняшнее обезсеребрянопуленное состояние совсем не то, что во времена выхода упомянутой статьи: другие масштабы задач, другое соотношение провальных и удачных проектов, другая структура «массы пользователей» и «массы разработчиков» и т. п. Тем не менее все это лишь следствие накопления опыта; опытных разработчиков стало больше, накопленных ими «практических приемчиков, которые могут сработать» - намного больше; а вот общая прозрачность системы не изменилась ни на йоту - по-прежнему практически невозможно понять, что происходит уровнем ниже или уровнем выше, отделом правее или отделом левее тебя.
А значит, продолжаем искать серебряную пулю.
Можно констатировать, что весь процесс поиска заветного боеприпаса - это попытка дать гарантированный ответ на два вопроса: будет ли достигнут результат и будет ли он корректным (приемлемым)? [Некоторые считают, что есть еще и третий вопрос: когда будет достигнут результат? Но в тех случаях, когда он действительно важен, это всего лишь подмножество первого вопроса: будет ли результат достигнут настолько быстро, что он еще будет иметь смысл?] Начиная решать любую софтверную задачу в лоб (будь то создание новой ОС или поиск нужной html-странички), мы не можем заранее знать ответа ни на один из них. А если нет никакого ответа, то нельзя и предпринять заранее меры, чтобы сделать ответ более приемлемым (например, добавить в команду программистов или докупить оборудование). То есть, даже собрав в одной команде три десятка лучших в мире специалистов по разработке ОС, нельзя предсказать, что и когда у них получится и получится ли вообще.
Во времена наивной юности компьютерных наук (лет за десять-пятнадцать-двадцать до написания статьи «No Silver Bullet») было принято считать, что все эти вопросы можно разрешить одним махом: всё должен делать компьютер. Это самое «всё» по минимуму означало автоматизированную проверку корректности (формальная верификация программ, ключевые имена - Хоар и Дийкстра), а по максимуму в идеале - пресловутый Искусственный Интеллект (ключевые имена - от Алана Тьюринга и далее - легион), где человек уже не «решает задачи с помощью компьютера», а лишь «ставит задачи», а вопросы о достижимости и корректности результата являются самоприменимыми (то есть можно поставить компьютеру задачу «определи, можно ли получить решение задачи Х»). По причинам достаточно сложным и неплохо изученным «счастья для всех и даром» не наступило, и дальнейшие поиски «silver bullet» стали концентрироваться на частных решениях. Да и по сию пору концентрируются.
Проанализировав тенденции и основные направления этих поисков, можно с некоторой долей уверенности сделать выводы о текущем и последующем прогрессе софтовых технологий.
Предположим, мы начинаем амбициозный софтверный проект. Что нужно, чтобы быть уверенным в том, что проект будет успешно завершен? Ответ здесь зависит от того, кто такие «мы» - маленький стартап из трех студентов или большой Мicrosoft? [Это, естественно, крайности - зато удобные для иллюстрирования точки зрения] В первом случае «успешно завершен» означает «мы допишем его до того, как нам надоест, и сделаем все настолько cool, чтобы разом уесть всех возможных конкурентов»; во втором - «проект не завалится под собственной тяжестью и будет закончен хоть когда-нибудь». Другими словами, первых куда больше интересует эффективность используемых инструментов-технологий-подходов, а вторых - надежность (при этом первые готовы пойти на некоторые компромиссы в области надежности, а вторые - пожертвовать некоторой эффективностью). Все дальнейшее - следствия этой дихотомии.
С тех пор как мэйнфрейм размером с пару приличных офисов не является «единственным доступным компьютером на двести километров в округе», эффективность работы в некоторой программной среде означает, что рабочее время человека-пользователя (а не машины-компьютера) должно расходоваться эффективно. Именно этот резон и стимулирует развитие большого количества современных технологий - как софтверных, так и железных.
Адепты «теории заговора производителей» любят задавать саркастические вопросы вроде: зачем Pentium 4 секретарше, которая использует только Word и пасьянс «Косынка»? Или: зачем 19-дюймовый монитор с 16 миллионами цветов кладовщику?
Ответ на эти вопросы прост: эффективность. В первом случае время разработчика Word было сэкономлено на оптимизации всех этих менюшек, смарт-тегов и бог-знает-чего-еще, предназначенного как раз для нашей секретарши. Все это, наверное, можно было бы реализовать и под IBM PC 386 + Windows 3.11 - чего там, пару сотен килобайт переписать на ассемблере, остальное на C, пооптимизировать пару лет - а «эти ламеры» поленились, выставили требования к железу повыше, зато и управились куда быстрее - с помощью высокоуровневых «крутых» инструментов и не задумываясь об оптимизации.
В случае с кладовщиком и его TFT-монитором ответ еще очевиднее: это всего лишь средство отобразить больше информации, сделать ее выразительнее (за счет цветов, анимации, градиентов и т. д. и т. п.) и в конечном счете - снова повысить эффективность работы, теперь уже - самого пользователя.
То есть технологии, которые развиваются в сторону эффективности работы пользователя, в основном увеличивают выразительность инструментов; будь то выразительность языка высокого уровня или выразительность интерфейса в стиле «модного» Web2.0, цель одинакова - больше информации помещается на экране, меньше рутинных действий приходится выполнять, более четкая связь между идеей и ее реализацией.
Наиболее радикально новые, «потенциально революционные» исследования связаны с попытками повысить эффективность процесса мышления как такового: представить информацию в таком виде, который «натолкнет» на правильную идею или позволит обнаружить неизвестные взаимосвязи. Заметим, что история такого рода исследований почти так же длинна, как история компьютеров вообще (классическая «декларация намерений» за авторством изобретателя мыши Дугласа Энгельбарта, под названием «Augmenting Human Intellect», вышла в 1968 году и была во многом связана с еще более классической статьей Ваневара Буша «As We May Think», 1945), и сегодняшний их вектор направлен в сторону не улучшения жизни единичного пользователя, а роста эффективности работы группы людей (когда группа становится «умнее» суммы ее членов). По сути, именно этому вектору мы обязаны и появлением Web, и Википедией, и многими другими достижениями сегодняшнего computer science [И тот же пресловутый Web2.0 декларирует как одну из своих ценностей «накопление информации через взаимодействие пользователей»] .
Изобретателями технологий, существенно повышающих эффективность работы, чаще всего являются этих технологий основные потребители - талантливые одиночки/небольшие группы, работающие в условиях «куча гениальных идей, побыстрее бы все реализовать!» [Отсюда - довольно распространенное мнение, что в IT все сколько-нибудь стоящее изобретается талантливыми и малоизвестными одиночками; см., например, недавнюю статью Пола Грэма «Сила маргиналов» (Paul Graham, «The Power of the Marginal»;