Записки автоматизатора. Профессиональная исповедь
Шрифт:
– Ты издеваешься?
– Нет, я серьезно.
– Хорошо.
Я в раздражении швыряю трубку, открываю текст задания и… задумываюсь. На всякий случай лезу в Интернет, потом благодарю Бога, что у меня есть умный и спокойный программист, и записываю в задании:
ДРОБН:= А – ЦЕЛОЕ (А)
ЕСЛИ ДРОБН < 0,25 ТО ДРОБН:= 0
ИНАЧЕ ЕСЛИ ДРОБН < 0,75 ТО ДРОБН:= 0,5
ИНАЧЕ ДРОБН:= 1
ОКРУГЛ05 (А) = ДРОБН + ЦЕЛОЕ (А)
Дело в том, что не существует никакого «общего» способа округления до полтинников. Его нужно было записать в задании явно.
Про дополнительное оборудование (история, рассказанная Александром Ройзнером за 15 лет до предыдущей). Мы пытались формализовать действия, которые во время поездки должен совершать машинист локомотива, чтобы в дальнейшем правильность этих действий оценивала автоматизированная система. По этому поводу с начальником одного из локомотивных депо произошел следующий диалог:
– По правилам при проверке тормозов нужно после появления тормозного эффекта и снижения скорости на 10 км/ч в грузовом груженом, грузопассажирском, пассажирском поезде и на 4-6 км/ч в грузовом порожнем поезде произвести отпуск тормозов. Снижение скорости мы определить можем. А как определить «эффект торможения»?
– А эффект торможения каждый машинист задницей чувствует.
– Значит, нам надо включить в измерительную систему задницу?
Кстати, прекрасные образцы для подражания в постановке задач имеются в Книге Левит Ветхого Завета:
«скажите сынам Израилевым: вот животные, которые можно вам есть из всего скота на земле:
всякий скот, у которого раздвоены копыта и на копытах глубокий разрез, и который жует жвачку, ешьте;
только сих не ешьте из жующих жвачку и имеющих раздвоенные копыта: верблюда, потому что он жует жвачку, но копыта у него не раздвоены, нечист он для вас;
и тушканчика, потому что он жует жвачку, но копыта у него не раздвоены, нечист он для вас,
и зайца, потому что он жует жвачку, но копыта у него не раздвоены, нечист он для вас;
и свиньи, потому что копыта у нее раздвоены и на копытах разрез глубокий, но она не жует жвачки, нечиста она для вас» (Левит 11: 2–7).
Вот настоящий пример Божественной формализации: сначала описано общее правило, а потом еще дано несколько примеров, подтверждающих, что в общем правиле условия, подлежащие проверке, соединены логическим «и», а не «или».
Обычно постановщики-фантазеры гнездятся в компаниях-разработчиках, но иногда встречаются и внутри производственных и торговых предприятий. Бойтесь их.
При описании бизнес-процессов фантазия постановщика становится очень большим недостатком. Правило здесь есть только одно, но оно не допускает отклонений.
Если какие-то части бизнес-процесса вам не известны точно, то их нужно узнать, а не выдумать.
Здравый смысл и логику в такие моменты лучше оставлять дома. Иначе в системе будут реализованы решения красивые, логичные, но абсолютно не соответствующие
«По логике вещей это должно быть так». По логике, может, и так, но кто вам сказал, что бизнес-процессы подчиняются хоть какой-то логике? А если логика и есть, то она совершенно не обязана быть айтишной, аристотелевой или даже женской. Самое ужасное, что бизнес-процесс создается совместными стараниями людей, может быть, и разумных, но преследующих самые разные цели. Есть закон, основанный на думной логике, подзаконные акты, основанные на смеси нескольких ведомственных логик (к примеру, налоговой, милицейской и железнодорожной), бизнес-правила ваших крупных контрагентов, которые вы не в состоянии поменять или не применять, жгучее желание вашего хозяина, противоречащее не менее жгучему желанию его компаньона, а напоследок ограничение по количеству кнопок, на которые младший бухгалтер может нажать, не ошибаясь слишком часто.
Вот может измениться сумма денег в зависимости от количества накладных, по которым продан товар? «По логике вещей» нет.
А теперь возьмите карандаш и запишите варианты, в которых это не так, исходя из вашего опыта, не поглядывая в то, что я написал ниже.
Теперь давайте сравним.
Округлениестоимости по каждой из двух накладных даст не тот же результат, что округление по одной накладной.
Фиксированная сумма на накладную: за оформление и/или доставку одного заказа берется фиксированная плата. Если накладных две, то эту сумму возьмут дважды.
Скидки, зависящие от позиции товара в накладной. Правила розничной продажи могут включать скидки, зависящие и от общей стоимости покупки, и от количества предметов в покупке, и даже от порядка следования строк в накладной («при покупке на сумму свыше 1000 рублей скидка 3 %», «купите два товара и получите третий бесплатно», «на второй товар скидка 5 %, на третий – 10 %, на четвертый и последующие – 15 %» и т. д.).
Рассчитываемая стоимость доставки: в сумму накладной включена стоимость перевозки товара. Тут Кафка отдыхает.
Вот выдержка из правил расчета стоимости перевозки мелких отправок железнодорожным транспортом:
«Минимальный расчетный вес отправки 10 кг. При исчислении провозной платы масса груза до 1000 кг округляется до полных 10 кг, а масса груза свыше 1000 кг округляется до полных 100 кг.
Количество груза определяется в м3, если масса 1-го м3 груза менее 200 кг.
Объем груза округляется до 0,05 м3».
Теперь вам понятно, что стоимость доставки 6 кг груза по двум накладным будет ровно в два раза больше, чем по одной, а вот стоимость доставки 1010 кг по одной накладной будет больше, чем по двум накладным на 500 и 510 кг.
Еще интереснее случай перевозки пенопластовых блоков и чугунных гирь. Включив и то и другое в одну накладную, вы заплатите за вес перевозимого, а оформив две накладные, за чугун будете платить по весу, а за пенопласт – по объему.
А теперь рассмотрим еще один вопрос.