Я працюю агентом з оренди / менеджером в компанії з прокату автомобілів, яка працює за системою прокату, яка була написана в 1972 році. Я вирішив, що, можливо, настав час для оновлення. Для короткого перегляду, ось короткий приклад безумства, з яким нам доводиться стикатися з цієї програми щодня:
Агент з оренди повинен пам’ятати, що при друкуванні на одному екрані в полі ACT використовується "MXC" (все базується на коротких кодах), що здивовано означає "MaXimum display on the Contract", а на іншому вимагає PR (для PRint) у поле ДІЇ, але декілька екранів використовують Y у полі PT (для PrinT), ще один екран використовує Y у полі PRT (для PRinT), але інший екран вимагає від користувача натискання клавіші enter (але не введення поруч із літери, оскільки це новий символ рядка, він повинен бути введенням на цифровій клавіатурі), а потім F8, інший, але пов'язаний екран вимагає просто F8, на деяких екранах є поле з написом PRT, яке повинно бути для PRinT, але поле фактично нічого не робить, а друк виконується автоматично після проходження декількох підказок, і на інших екранах все ще є поле з написом PRINT Y / N,що шалено за замовчуванням для Y для операцій, в яких в іншому місці вже доставляється папір, і в N для операцій, в яких інший дилер потребує оформлення документів.
Я вирішив, що можу зробити кращу роботу, ніж це, тому вирішив зв’язатися з людиною в компанії, яка буде приймати рішення про оновлення цього. Я врешті-решт потрапляю до ВП ІТ, який відповідає за цією програмою. Я отримую від нього трохи інформації, і я дізнаюся, що моя компанія з прокату автомобілів має свою програму прокату, написану в асемблері IBM mainframe з трохи змішаним COBOL. Він каже, що зараз немає відкритих посад, але я повинен все-таки надішліть йому електронне резюме (на випадок, якщо щось відкриється).
Це призводить мене до моїх запитань.
Перший - технічний. Ідея поліпшити ремонтопридатність у майбутньому, моя думка полягає в тому, щоб переписати її мовою вищого рівня, ніж мовою збірки. Моя сфера досвіду - це C ++, тому це очевидний вибір для мене. Компанія гостро потребує більш легкого способу оновлення програми, тому що я нещодавно прочитав статтю, де чоловік, з яким я говорив, цитує, що команда наполегливо працювала, і вони з гордістю заявляють, що зараз програма підтримує 5 -значити коди локації (замість 4) та 8-значні номери автомобілів (замість 7). Моя філософія щодо оновлень, навіть у таких жахливих ситуаціях, відповідає Джоелу: http://www.joelonsoftware.com/articles/fog0000000069.html Коротше кажучи, переписування повинно бути поступовим, а не викидати все, що було раніше і починаючи свіжим.
Чи є простий спосіб інтегрувати збірку IBM із C ++, і якщо так, то як це зробити? Я чітко знаю ключове слово asm, але не знаю, чи найкраще це використовувати або робити щось інше. Такий план є необдуманим? Більшу частину своєї роботи в Linux я використовую за допомогою g ++ та GNU, тому відповіді, специфічні для цього, вітаються, але, безумовно, не потрібні (оскільки я поняття не маю, якої системи складання у них немає, але я підозрюю, що майже немає).
Друге питання - більш політичне. Як мені слід переконати цю компанію, що їм потрібно зробити перехід? Теоретична економія витрат величезна (виходячи з моїх оцінок, компанія витрачає зайвий мільйон доларів на рік, лише на збільшення витрат на навчання, щоб навчитися взаємодіяти з програмою), але мої запропоновані зміни, ймовірно, поклали б усі нинішні програмісти не працюють, якщо вони будуть прийняті, тому існує великий структурний опір змінам.
редагувати: Я повинен пояснити, чому мені модифікація того, що вже є компанією, здається найкращим рішенням. Я все ще відкритий до інших пропозицій, тому що це чудовисько програми. У мене ніколи не було роботи з програмування, тому, будь ласка, виправте мене щодо будь-якого неправильного аналізу, який я міг би дати.
По-перше, є рішення, що не є на полиці.
З моїх розмов з кількома менеджерами середнього рівня про подібні речі, однією з головних проблем при переході на нову систему є велика кількість лояльних співробітників, які вже десятиліттями працюють з компанією і дотепер комфортно працюють із системою. . Якщо у мене є можливість змінювати те, що ми маємо, я можу підтримувати поточний інтерфейс у вигляді «режиму сумісності». Користувачі вже мають увійти, щоб користуватися поточною системою, тому я можу додати можливість активувати налаштування, коли користувачі входять у перший раз (після внесення цієї зміни), де їм надається можливість використовувати або "класичний" інтерфейс або "новий" інтерфейс. Ні в якому разі я не знайду рішення про те, що це дозволяє,
Моя компанія також володіє програмним забезпеченням, яке ми використовуємо; ми не ліцензуємо це. Це означає, що керівництво, з яким я зараз говорю, - це ті самі люди, які насправді могли б дозволити мені внести зміни. Завдяки сторонній рішенню, я маю отримати схвалення від своєї компанії на додаток до забезпечення будь-яких прав, необхідних від компанії, яка розробила продукт, який ми використовуємо, що додає додаткових перешкод. Це також зажадає переконати компанію відмовитися від "свого" продукту і взяти якийсь інший товар, що здається більшим перешкодою, ніж спроба оновити те, що ми маємо, але я цілком можу помилитися з цього питання.
Нарешті, дивлячись у майбутнє, я не просто хочу вдосконалити інтерфейс користувача та виправити кілька помилок. Після того як я оновив ці "нагальні" проблеми, я сподівався оновити фундаментальний спосіб роботи компанії, пов'язаний з технологією. Провівши 1-2 роки на подібні питання, мій план полягав у тому, щоб повернутися до управління та запропонувати більш кардинальні зміни. Існує багато способів управління компанією, які можуть бути кардинально покращені за допомогою технології, яку вони просто зараз не використовують. Наприклад, кожен регіон працює майже однаково. Місцевий головний аеропорт є центральним вузлом для розповсюдження автомобілів. Вони в основному надсилаються за потребою. Однак аеропорт використовується як домашня база для всіх операцій. Вони відправлять двох людей в одному автомобілі до мого місця, щоб забрати одну машину у нас, яка нам не потрібна, потім повертайтеся до аеропорту з машиною, в яку вони приїхали, плюс те, що вони забирають назад (ми в 32 милях від аеропорту). Тоді вони приїдуть до місця в 5 милях від нас у двох автомобілях, щоб скинути одну з них, а потім повернутися в іншому автомобілі до аеропорту. Вони роблять це навіть у тому випадку, якщо машина, яку ми відправили назад, - це той самий автомобіль, який вони потребують біля нас. Я працюю з компанією вже близько двох років, і мені здається, що вони відхиляються від цього в самих надзвичайних надзвичайних ситуаціях з дефіцитом автомобілів (так приблизно втричі). Я б замінив чотирьох людей, що працюють у кожному регіоні, на автоматизовану систему планування, яка визначає, які машини їдуть куди, і спробуйте знайти шлях, який потребує найменшої кількості часу + миль + водіїв, щоб доставити всі машини там, де вони повинні бути, як Приклад виправлень вищого рівня, я сподіваюся, що колись додам.
Однак, перш ніж мені було б зручно пропонувати все це, я вважаю, що було б корисно отримати опору в компанії та базу коду, виконуючи менші завдання, як-от оновлення інтерфейсу. Такі рішення, як аутсорсинг або іншим чином, усунуть цю можливість.
if (m_newInterface)
спагеті-код почав з’являтися по всій базі коду. Розв’язка та рефакторинг зайняли досить багато часу, щоб, коли це було зроблено, більшість користувачів вже перейшли на новий інтерфейс (думаю, кілька років).