Записки автоматизатора. Профессиональная исповедь
Шрифт:
Есть немало навязчивых программистских «услуг», которые обычно совсем не нужны пользователю. Один из классических примеров – это сортировка в большой таблице, которую редактирует пользователь, производимая не по нажатию какой-нибудь кнопки, а в момент обнаружения системой измененной информации. Программеру кажется, что он сделал все правильно и оперативно, а бедняга пользователь никак не может понять, куда делась с экрана строчка, в которой он только что был (а она убежала упорядочиваться). Еще более сильный эффект достигается, когда пользователь заменяет блок информации, захватывающий несколько соседних строк: после выполнения команды «Вставить» соседние строки разбегаются по таблице, как тараканы.
К той же категории шуток относится выполнение отчета, имеющего параметры, ровно в тот момент, когда пользователь
Постоянные конфликты, возникающие из-за различия менталитета айтишников и юзеров, потребовали озвучить еще одно общее правило: если вам кажется, что прибамбас, о котором вас никто не просил, окажется для пользователей системы очень полезным и удобным, то добавьте его так, чтобы он не проявлялся при установке рабочего места с параметрами по умолчанию. В крайнем случае, так, чтобы его можно было при желании отключить.
Финишная кривая
Давным-давно, когда я работал преподавателем, один из моих студентов отчитался по результатам своей работы так: «Программа уже работает, но пока дает неверные результаты». С тех пор эта фраза вошла в классику программистского фольклора.
Однако по сей день однозначного ответа на вопрос, что же такое работающая программа, на мой взгляд, не получено и вряд ли когда-нибудь будет получено. То, что во всех больших программах всегда содержатся ошибки, общеизвестно. Хотя неизвестно, что такое ошибка (этот вопрос долго и нудно приходится обсуждать с разработчиком при каждом составлении договора, а потом не менее долго и не менее нудно доказывать ему, что предъявленные результаты работы системы говорят об ошибке, и в тысячный раз выслушивать бред типа «Это не ошибка, раз вы не можете ее повторить…»).
На эту тему написаны сотни умных книг и тысячи еще более умных статей, в том числе с применением теорий вероятностей и массового обслуживания (вывод моей студентки, воспользовавшейся одной такой книгой, я прочитал в ее дипломном проекте: «Таким образом, еще через два часа эксплуатации в программе будет выявлена последняя ошибка»).
Не залезая в очередной раз в теоретические дебри, берусь утверждать, что в вашей системе ошибки есть сейчас и будут всегда. Хотя бы потому, что в качестве операционной системы хотя бы некоторых рабочих мест у вас стоит небезызвестный Виндоуз небезызвестной мелко-мягкой корпорации.
Но, даже зная это, вы должны решить, когда же можно начинать внедрение. И ваше руководство совершенно не будет волновать, что этот вопрос теоретически неразрешим.
Единственный ответ, который я знаю: внедрение надо начинать в тот момент, когда у вас появится уверенность, что это заработает (хотя бы основные функции). Если такая уверенность не появляется слишком долго, надо сменить базовый софт, бригаду программистов или профессию. Впрочем, о последнем позаботится ваше начальство.
Итак, равнение на Гейтса, и – вперед!
Здесь можно дать несколько советов, позволяющих если не провести внедрение безболезненно, то хотя бы минимизировать его разрушительную силу.
• Всегда разбивайте работы на небольшие фрагменты, результат которых можно увидеть. Иначе мы уподобимся менеджерам проекта, которые, глядя на график работ, неизменно видят, что работы «выполнены на 80 %» (они всегда будут выполнены на 80 %, пока за день до сдачи системы не выяснится, что работы… выполнены на 80 %).
• Внедрять лучше небольшие функциональные модули, поэтапно. Ввод всей системы в один момент недаром именуется в западной литературе методом «большого взрыва». Плюсы поэтапного внедрения очевидны – с одной стороны, вы ограничиваете масштаб возможного бедствия, с другой – сразу получаете некий результат. Не стоит забывать о том, что вероятность успеха внедрения
обратно пропорциональна сложности системы – поэтапный ввод позволяет эту сложность сократить.• Всегда определяйте реальные приоритеты реализации функциональности. Да, это будет непросто, и придется много додумывать самому (если это отдать на откуп пользователю, то наивысший приоритет приобретет любая ерунда). Зато, если это получится, при неблагоприятных обстоятельствах пользователь будет просто недоволен, но при этом предприятие не прекратит свое функционирование.
• Всегда выбирайте для старта развертывания системы момент с наименьшей загрузкой (чаще всего таковой имеется). Сбой системы, обеспечивающей процесс продаж под Новый год, – совсем не то же самое, чем сбой системы в октябре (разумеется, в каждой компании свои периоды пиковой загрузки).
Предусматривайте резервные пути жизни компании в случае сбоя. Понятно, что построение таких мостов – это дополнительное время, но если «ой» произойдет, время все равно будет затрачено (только работать в этом случае придется почему-то и днем, и ночью, да еще вдобавок компания может понести значительные потери). Процесс возведения резервных механизмов и временных процессов (а иногда и систем) называется управлением рисками, и о нем много любят говорить, но на практике предпочитают почему-то бороться с проблемами, а не предотвращать их. – Д. К.
Я здесь не совсем про то, о чем вы подумали. Интеллект по людям распределяли, конечно, неравномерно, но совсем не по гендерному признаку. И женщин, понимавших и решавших задачи своей компании гораздо лучше мужчин, я встречал немало.
Тем не менее женщины от мужчин все-таки отличаются. Например, у них гораздо лучше обоняние. Поэтому, чтобы внедрить что-либо в женских коллективах, вы должны обеспечить как минимум ежедневную чистку зубов, мытье под душем, смену носков и трусов всеми сотрудниками, которые обследуют и обслуживают соответствующие подразделения. Нужно также провести разъяснительную работу и с мужчинами, обливающимися пахучими лосьонами, поскольку с такими тоже очень трудно находиться в одном помещении долго.
Если вам не удалось сделать ваших внедренцев невонючими, не удивляйтесь, когда услышите, что внедряемое решение работает плохо, медленно и неправильно, а ваши сотрудники не в состоянии внятно объяснить, как всем этим пользоваться. Впрочем, последнее утверждение верно во всех случаях: воняющий человек может донести до окружающих ровно один месседж.
Я умышленно не написал «опытную», потому как давно перестал понимать, что это такое. Этот термин, может, и был хорош – но только для внедрения автоматизированной системы «с чистого листа», взамен системы управления с бумажными документами и способами расчетов на калькуляторах или счетах, что сейчас можно встретить разве что в небольшом магазинчике, но уж никак не в крупной фирме.
Опытная эксплуатация системы в этом случае подразумевала сохранение бумажного документооборота и хранение документов на бумажных носителях. А что имеется в виду под опытной эксплуатацией, если одна автоматизированная система заменяет другую? Параллельная эксплуатация двух разных автоматизированных систем?
До первой попытки я тоже считал, что это можно и нужно сделать. Но при внимательном изучении вопроса выяснилось, что:
1. Вычислительные мощности для обслуживания сразу двух систем нужно увеличить вдвое, а обслуживающий персонал – чуть ли не в три раза. После опытной эксплуатации лишний персонал нужно уволить так, чтобы у вас сохранилась информация хотя бы в одной из информационных систем. Что делать с лишней вычислительной техникой, мне совсем не понятно;
2. Результаты работы систем практически невозможно сравнить:
– в новой системе используется другой справочник товаров, а в результате инвентаризации, с которой начинается внедрение, были ликвидированы последствия пересортицы: некоторые товары, фигурировавшие в старой системе под разными названиями, признаны одним и тем же, а другие товарные позиции разделены на несколько;
– в старой системе товар при резервировании списывался со складского остатка, а в новой он остается на складе, но не может быть отпущен;