Я работаю агентом / менеджером по прокату в компании по прокату автомобилей, работающей по системе проката, написанной в 1972 году. Я решил, что, возможно, пришло время обновить информацию. Для некоторой предыстории, вот короткий пример безумия, с которым нам приходится сталкиваться из этой программы ежедневно:
Агент по прокату должен помнить, что для печати на одном экране используется поле «MXC» в поле ACT (все основано на коротких кодах), что озадачивающе обозначает «Отображение MaXimum в контракте», в то время как на другом оно требует PR (для PRint) в поле ДЕЙСТВИЕ, но на нескольких экранах используется Y в поле PT (для PrinT), еще один экран использует Y в поле PRT (для PRinT), и еще один экран требует, чтобы пользователь нажимал ввод (но не ввод рядом с буквы, так как это новый символ строки, это должно быть ввод на цифровой клавиатуре), а затем F8, другой, но связанный экран требует просто F8, некоторые экраны имеют поле, помеченное PRT, которое должно быть для PRinT, но поле фактически ничего не делает, и печать выполняется автоматически после прохождения нескольких запросов, и еще больше экранов имеют поле, помеченное PRINT Y / N,который по умолчанию безразличен к Y для операций, в которых другое место уже доставляет документы, и к N для операций, в которых другому дилеру понадобятся документы.
Я решил, что смогу справиться с этой работой лучше, поэтому решил связаться с человеком в компании, который примет решение обновить его. В конце концов я связался с вице-президентом по ИТ, который отвечает за эту программу. Я извлекаю из него немного информации и узнаю, что у моей компании по прокату автомобилей написана программа проката на ассемблере мэйнфреймов IBM с небольшим количеством COBOL. Он говорит, что в данный момент открытых вакансий нет, но я должен В любом случае, отправьте ему по электронной почте мое резюме (на случай, если что-то откроется).
Это приводит меня к моим вопросам.
Первый - технический. С идеей улучшения сопровождения в будущем я думаю переписать его на языке более высокого уровня, чем на ассемблере. Мой опыт работы в C ++, так что для меня это очевидный выбор. Компания остро нуждается в более простом способе обновления программы, так как я недавно прочитал статью, в которой говорится, что человек, с которым я говорил, говорит, что команда усердно работала, и они с гордостью сообщают, что в программе теперь есть поддержка 5 -значные коды местоположения (вместо 4) и 8-значные автомобильные номера (вместо 7). Моя философия в отношении обновлений, даже в таких тяжелых ситуациях, соответствует философии Джоэла: http://www.joelonsoftware.com/articles/fog0000000069.html короче говоря, переписывание должно быть постепенным, а не выбрасывать все, что было раньше и начать все заново.
Существует ли простой способ интеграции сборки IBM с C ++, и если да, то как мне это сделать? Я смутно осведомлен о ключевом слове asm, но я не знаю, лучше ли использовать это или сделать что-то еще. Является ли такой план необоснованным? Я делаю большую часть своей работы над Linux с использованием g ++ и GNU make, поэтому ответы на эти вопросы приветствуются, но определенно не обязательны (поскольку я понятия не имею, какой системы сборки у них нет, но я подозреваю, что почти нет).
Второй вопрос более политический. Как мне убедить эту компанию в том, что им нужно переключиться? Теоретическая экономия затрат огромна (по моим оценкам, компания тратит дополнительно около миллиона долларов в год, просто на увеличение затрат на обучение, чтобы научиться взаимодействовать с программой), но мои предложенные изменения, вероятно, поставят все текущие программисты без работы, если они будут приняты, так что существует большое структурное сопротивление изменениям.
редактировать: я должен объяснить, почему мне изменить то, что компания уже имеет, кажется лучшим решением для меня. Я все еще открыт для других предложений, потому что это монстр программы, однако. У меня никогда раньше не было работы по программированию, поэтому, пожалуйста, исправьте меня в любом неправильном анализе, который я могу дать.
Во-первых, это готовое решение.
Из моих бесед с несколькими менеджерами среднего звена о подобных вещах одной из главных проблем при переходе на новую систему является большое количество лояльных сотрудников, которые работают в компании десятилетиями и уже знакомы с системой. , Если бы у меня была возможность изменить то, что у нас есть, я мог бы поддерживать текущий интерфейс в своего рода «режиме совместимости». Пользователи уже должны войти в систему, чтобы использовать текущую систему, поэтому я мог бы добавить возможность активировать настройку, когда пользователи входят в систему «в первый раз» (после того, как я сделаю это изменение), где им предоставляется возможность использовать либо «классический» интерфейс или «новый» интерфейс. Я не найду готовое решение, которое позволяет это,
Моя компания также владеет программным обеспечением, которое мы используем; мы не лицензируем это. Это означает, что менеджмент, с которым я сейчас разговариваю, - это те же люди, которые могут на самом деле разрешить мне внести изменения. При использовании стороннего решения мне нужно было бы получить одобрение от моей компании в дополнение к обеспечению любых необходимых прав со стороны компании, которая разработала продукт, который мы используем, что добавляет дополнительное препятствие. Это также потребовало бы от компании убеждения отказаться от «своего» продукта и взять какой-то другой продукт, что кажется большим препятствием, чем попытка обновить то, что у нас есть, но я вполне могу ошибаться в этом вопросе.
Наконец, заглядывая в будущее, я не просто хочу улучшить пользовательский интерфейс и исправить несколько ошибок. После того, как я обновлю эти «срочные» вопросы, я надеялся обновить фундаментальный подход компании к технологии. Потратив 1-2 года на решение подобных проблем, я планировал вернуться к руководству и предложить более радикальные изменения. Есть много способов работы компании, которые могут быть существенно улучшены с помощью технологий, которые они просто не используют прямо сейчас. Например, каждый регион в значительной степени работает одинаково. Местный крупный аэропорт является центральным центром распространения автомобилей. Они в основном отправляются по мере необходимости. Тем не менее, аэропорт используется в качестве домашней базы для всех операций. Они отправят двух человек в одной машине ко мне, чтобы забрать у нас одну машину, которая нам не нужна, затем вернитесь в аэропорт с автомобилем, на котором они приехали, плюс то, что они забирают обратно (мы в 32 милях от аэропорта). Затем они приедут на расстоянии 5 миль от нас на двух машинах, чтобы отвезти одну из них, а затем вернутся на другой машине в аэропорт. Они делают это, даже если машина, которую мы отослали, - та же самая машина, которая им нужна рядом с нами. Я работаю в компании около двух лет, и мне кажется, что они отклоняются от этого только в самых экстремальных ситуациях нехватки автомобилей (примерно три раза). Я бы заменил 4 человек, работающих в каждом регионе, на автоматизированную систему планирования, которая определяет, куда едут машины, и постараюсь найти путь, который потребует наименьшего количества времени + мили + водителей, чтобы доставить все машины туда, где они должны быть, как пример исправлений более высокого уровня надеюсь когда-нибудь добавить.
Однако, прежде чем мне будет удобно предлагать все это, я чувствую, что было бы полезно получить контроль над компанией и базой кода, выполняя меньшие задачи, такие как обновление интерфейса. Такие решения, как аутсорсинг или иное, устранят эту возможность.
if (m_newInterface)
код спагетти начал появляться по всей базе кода. Разъединение и рефакторинг заняли достаточно много времени, и, когда это было сделано, большинство пользователей уже перешли на новый интерфейс (думаю, несколько лет).