Антигерой программирования
Я только что выпустился из колледжа, был молод и наивен. Мы как раз переходили к стадии бета-версии моего первого профессионального проекта — игры для PC конца 90-х. Это было увлекательное катание на американских горках, как часто происходит с проектами. Весь контент уже был готов, и игра выглядела неплохо. Однако мы нашли одну проблему: не удавалось уместиться в объём доступной памяти.
Поскольку бóльшая часть памяти была занята моделями и текстурами, мы с художниками стремились как можно сильнее снизить занимаемый ими объём. Мы уменьшали масштаб изображений, упрощали модели и сжимали текстуры. Иногда художники нам помогали, иногда противились всеми силами.
Мы урезали мегабайт за мегабайтом, и через несколько дней безумного напряжения достигли точки, в которой сделать было ничего уже невозможно. Хоть мы и урезали часть важного контента, освободить больше памяти мы никак бы не смогли. Измученные, мы замерили текущий объём используемой памяти. Он был на полтора мегабайта больше предельно допустимого!
В этот момент один из самых опытных программистов нашей команды, переживший многолетний опыт разработки в «старые добрые времена», решил взять решение в свои руки. Он позвал меня в свой офис и мы начали работу, которую я сначала представлял ещё одним выматывающим марафоном для освобождения памяти.
Вместо этого он открыл файл исходника и показал мне эту строку:
static char buffer1024*1024*2;
«Видишь?» — спросил он меня. И тут же удалил её одним нажатием. Готово!
Наверно, он увидел ужас в моих глазах, поэтому объяснил, что сам выделил эти два мегабайта памяти в самом начале разработки. По своему опыту он знал, что почти никогда невозможно уложиться в нужный объём памяти, и что многие проекты из-за этого проваливались. Поэтому он всегда выделяет приличный блок памяти, чтобы освободить его при необходимости.
Он вышел из офиса и объявил, что снизил объём памяти до необходимого, и все чествовали его как героя проекта.
Как ни был я тогда шокирован таким «варварским» подходом, должен признать, что сейчас полностью поддерживаю его. Пока я не дошёл до такого образа мышления, при котором способен буду его использовать, но вижу, что оказавшись в сложной ситуации, никогда не лишне иметь в запасе немного памяти «на чёрный день». Интересно, как время и опыт меняют наши взгляды.