May 22nd, 2008

nyaload

Armed Pig Pattern

При программировании, при тупом кодировании, при выборе имён переменных, при выборе места вставки очереднй заплатки вроде if (объект != NULL) - важно разобраться в себе, чего же ты на самом деле хочешь, понять законы вселенной в которой живёт предметная область, и сделать исправления именно в пространстве этой вселенной.

Может, не очень удачный пример, но предположим делаем мы симулятор бара. И предположим, геймдизайнер вставил нового персонажа, Дженифер, для которого игровая логика чуть отличается от остальных.

Важно понимать, где нам писать if (посетитель == Дженифер) и if (IsWoman(посетитель)) (а может на самом деле, мы хотели написать, if ( ПосетительОдетВЖенскуюОдежду(посетитель)) ?, не смотря на то что пока этот персонаж только один - это эквиваленты.

Программисты же новички часто пишут не то что хотят, а то что в данный момент является эквивалентом того что они хотят. А потом эта эквивалентность ломается. И они потом по всему коду всё равно заменяют на if (посетитель == Дженифер || посетитель == Барбара). Или наоборот, if (IsWoman(посетитель) && посетитель != Барбара). Хотя надо было в начале написать IsWoman(посетитель) и посетитель == Дженифер, и тогда при добавлении Барбары не пришлось бы менять код.

Кстати, часто это касается не программистов, а заказчиков/дизайнеров. Тогда надо разбираться не в себе, а в них и в их вселенных :)

updated:
Со свиньями был связан, кстати, ещё один баг, из-за которого игра падала
кенгуру, перегруппировавшись, появились из-за холма и выпустили тучу стингеров по злополучным вертолетам