Синдром 2000-го года (Y2K)


В книге, которая содержит “технологию решения проблем” в своем подзаголовке, ценно упоминание об одной из величайших ловушек в программировании: преждевременная оптимизация. Каждый раз я выдвигаю эту концепцию, прежде всего, фактически все соглашаются с этим. Кроме того, каждый, как будто бы, резервирует в уме специальный случай “исключая тот случай, с которыми мне пришлось познакомиться, как с обычной проблемой.”

Причина, по которой я назвал это синдромом 2000-го года (Y2K), основывается на специальных знаниях. Компьютеры полны тайн для большинства людей, так что когда кто-либо заявляет, что эти глупые компьютерные программисты забыли оставить достаточно значащих цифр, чтобы запоминать даты года после 1999, то после этого все становятся компьютерными экспертами – “эти вещи не настолько сложные и выглядят, как обычная проблема”. Например, обычно я занимаюсь компьютерным инженерингом, а я начал заниматься встроенными компьютерными системами. В результате, я знаю, что многие встроенные системы не имеют представлении о дате и времени, и даже если они могут получить информацию о дате, они не используют ее в главных расчетах. И теперь я могу сказать, что нет неопределенности относительно устойчивости для всех встроенных систем на 1 января 2000 года. Насколько я могу сказать, единственная память, которая терялась, была о людях, предвещавших гибель – как будто они никогда не говорили подобной чепухи.

Дело в том, что очень легко попасть под влияние привычки, думая, что обычный алгоритм или кусок кода, который вы понимаете, в вашей системе может стать узким местом. Это происходит просто потому, что вы можете представлять себе, что остальные куски кода и все что вы придумаете должны каким-то образом быть намного менее эффективными, чем остальные куски кода, о которых вы не знаете. Но до тех пор, пока вы не запустите реальные тесты, обычно с помощью профайлера, вы реально не можете знать, что происходит. И даже если вы правы, что кусок кода очень неэффективен, помните, что многие программы тратят около 90% своего времени на выполнение 10% кода программы, так что пока кусок кода, о котором вы думаете, не попадет в эти 10%, это не важно.

“Мы должны забыть о маленькой эффективности, говорите 97% вашего времени: Преждевременная оптимизация - это корень всех бед. ”—Donald Knuth