Программирование в наши дни – это гонка, в которой программисты стремятся выстроить самую масштабную и защищенную от идиотов программу, а Вселенная пытается произвести все больше идиотов. Пока что Вселенная побеждает.
Я готов превозносить инженеров и программистов, однако должен признать, что они лгут, и лгут часто. Возможно, ложь – необходимое условие для создания великой инновации, потому что куча людей норовят сказать новатору о том, что его идея нереализуема или никому не нужна. Однако если новатор знает, что они лгут, это никак его не заденет.
• «Я ничего не знаю о маркетинге».
Эта ложь продиктована ложной скромностью. На самом деле человек думает: «Я ничего не знаю о маркетинге, но неужели он более сложен, чем мое нынешнее занятие? Надеюсь, все эти ребята с MBA смогут создать хоть что-то достойное моей прекрасной программы». Впрочем, эта ложь довольно безобидна: как только разработчик начнет пропускать сроки завершения одного этапа работ за другим, то сам поймет, что проблемы серьезнее, чем ему казалось.• «Мы собираемся начать бета-тестирование».
Это заявление не имеет никакого смысла, потому что срок начала бета-тестирования вообще не важен. Единственное, что имеет значение, – это когда бета-тестирование будет завершено (главное жесткое и эффективное правило проведения бета-тестирования в наши дни гласит, что оно заканчивается, когда заканчиваются деньги). В старые добрые времена альфа-тестирование означало «все свойства в наличии, однако не всегда работают штатным образом», а бета– «в программе нет повторяющихся багов». В наши дни бета значит: «Мы уже пропустили все мыслимые сроки вывода продукта на рынок, обещанные инвесторам».• «Я сделаю в программе комментарии, чтобы следующий человек, работающий над ней, понял, что к чему».
Эта ложь вызвана добрыми намерениями. Программист действительно намеревается дополнить программу комментариями, но, когда срок сдачи продукта приближается, его приоритеты резко меняются. И тогда он ставит перед руководством вопрос: «Вы хотите, чтобы я занялся комментированием программы или же скорейшим завершением работы на ней?» Угадайте, каким бывает ответ? К счастью, отсутствие комментариев обычно не имеет никакого значения, потому что программа написана настолько ужасно, что в течение года ее приходится переписывать с нуля.• «Наша архитектура может масштабироваться».
Эта ложь нравится мне больше всех остальных. Обычно эту фразу говорит тот, кто никогда не занимался вопросами производства продукта, после того как создает прототип в Visual Basic. В более пространной версии эта ложь звучит следующим образом: «Наша архитектура более масштабируема, чем архитектура Google. Их система позволяет одновременно обрабатывать 25 миллионов поисковых запросов. Мы же легко можем обрабатывать миллиард». К счастью, в большинстве случаев принятие продукта происходит медленнее, чем в самых «консервативных» прогнозах CEO, поэтому проблема масштабируемости никогда не проявляется в полном объеме.• «Программа соответствует всем стандартам отрасли».
Это почти правда, которая требует небольшого уточнения: «Программа соответствует всем стандартам отрасли, с которыми я согласен». Программист принимает личное решение игнорировать стандарты, которые ему не нравятся, например стандарты, навязываемые Microsoft. С его точки зрения, это не столь важно: ведь потребители никогда об этом не узнают.• «У нас есть эффективная система отчетов о багах».
Чаще всего эта ложь строится на уверенности в том, что система почти не имеет багов и поэтому их база будет довольно незначительной по размерам. Однако практика показывает, что если количество задокументированных багов не превышает 1000, то компания просто не умеет их отслеживать.• «Мы можем сделать все то же самое быстрее, дешевле и лучше, если возьмем на работу команду офшорных программистов из Индии».
Эту ложь редко можно услышать из уст рядовых программистов – куда чаще ее произносят главные инженеры. Почему-то многие уверены, что каждый программист в Индии профессионален, быстро работает и стоит копейки, а каждый программист в США некомпетентен, медленно работает и много просит. На самом деле это совсем не так.