Pracuję jako agent / kierownik wypożyczalni w firmie wynajmującej samochody, która działa w systemie wynajmu napisanym w 1972 roku. Zdecydowałem, że może nadszedł czas na aktualizację. Dla odrobiny tła, oto krótki przykład szaleństwa, z którym mamy do czynienia codziennie w tym programie:
Agent wypożyczający musi pamiętać, że drukowanie na jednym ekranie używa „MXC” w polu ACT (wszystko opiera się na krótkich kodach), co kłopotliwie oznacza „MaXimum wyświetlanie na umowie”, podczas gdy na innym wymaga PR (dla PRint) w w polu AKCJA, ale kilka ekranów używa litery Y w polu PT (dla PrinT), jeszcze inny ekran używa litery Y w polu PRT (dla PRinT), jeszcze inny ekran wymaga naciśnięcia przez użytkownika klawisza Enter (ale nie klawisza obok litery, ponieważ jest to nowy znak linii, musi to być znak na klawiaturze numerycznej), a następnie F8, inny, ale powiązany ekran wymaga po prostu F8, niektóre ekrany mają pole oznaczone PRT, które powinno być dla PRinT, ale pole to w rzeczywistości nic nie robi, a drukowanie odbywa się automatycznie po przejściu kilku monitów, a jeszcze więcej ekranów ma pole oznaczone DRUKUJ T / N,która niesamowicie domyślnie ma wartość Y dla operacji, w których inna lokalizacja już dostarcza dokumenty, oraz N dla operacji, w których inny dealer będzie potrzebował dokumentów.
Zdecydowałem, że mogę wykonać lepszą robotę, więc postanowiłem skontaktować się z osobą w firmie, która podejmie decyzję o aktualizacji. W końcu docieram do wiceprezesa działu IT odpowiedzialnego za ten program. Wyciągam od niego trochę informacji i dowiaduję się, że moja wypożyczalnia samochodów ma program wypożyczania napisany w asemblerze komputerów mainframe IBM z domieszką odrobiny COBOL. Mówi, że obecnie nie ma żadnych otwartych pozycji, ale powinienem mimo to wyślij mu moje e-mailem (na wypadek, gdyby coś się otworzyło).
To prowadzi mnie do moich pytań.
Pierwszy jest techniczny. Z myślą o poprawie łatwości konserwacji w przyszłości, moim pomysłem jest przepisanie go w języku wyższego poziomu niż w języku asemblera. Moje doświadczenie obejmuje C ++, więc jest to dla mnie oczywisty wybór. Firma pilnie potrzebuje łatwiejszego sposobu aktualizacji programu, ponieważ niedawno przeczytałem artykuł, w którym cytowany mężczyzna mówi, że zespół ciężko pracował i z dumą ogłaszają, że program obsługuje teraz 5 - cyfrowe kody lokalizacji (zamiast 4) i 8-cyfrowe numery samochodów (zamiast 7). Moja filozofia aktualizacji, nawet w tak trudnych sytuacjach, jest zgodna z zasadą Joela: http://www.joelonsoftware.com/articles/fog0000000069.html w skrócie, ponowne zapisywanie powinno być przyrostowe, zamiast wyrzucać wszystko, co było wcześniej i zaczynać od nowa.
Czy istnieje prosty sposób na zintegrowanie zestawu IBM z C ++, a jeśli tak, to jak mam to zrobić? Nie jestem w pełni świadomy słowa kluczowego asm, ale nie wiem, czy najlepiej go użyć, czy zrobić coś innego. Czy taki plan jest niewłaściwy? Większość pracy w Linuksie wykonuję przy użyciu g ++ i GNU make, więc odpowiedzi na te pytania są mile widziane, ale zdecydowanie nie są wymagane (ponieważ nie mam pojęcia, jakiego rodzaju systemu budowania nie mają, ale podejrzewam, że prawie żadnego).
Drugie pytanie jest bardziej polityczne. Jak powinienem przekonać tę firmę, że muszą dokonać zmiany? Teoretyczne oszczędności kosztów są ogromne (na podstawie moich szacunków firma marnuje dodatkowy milion dolarów rocznie, tylko na zwiększone koszty szkolenia, aby nauczyć się, jak wchodzić w interakcje z programem), ale moje proponowane zmiany prawdopodobnie spowodowałyby wszystkie obecni programiści bez pracy, jeśli zostaną uchwaleni, więc istnieje duża strukturalna odporność na zmiany.
edycja: Powinienem wyjaśnić, dlaczego modyfikowanie tego, co już ma firma, wydaje mi się najlepszym rozwiązaniem. Nadal jestem otwarty na inne sugestie, ponieważ jest to jednak potwór programu. Nigdy wcześniej nie miałem pracy programistycznej, więc poprawcie mnie na podstawie jakiejkolwiek niepoprawnej analizy.
Po pierwsze, istnieje gotowe rozwiązanie.
Z moich rozmów z kilkoma menedżerami średniego szczebla na ten temat, jednym z głównych problemów związanych z przejściem na nowy system jest duża liczba lojalnych pracowników, którzy pracują w firmie od dziesięcioleci i do tej pory czują się dobrze z systemem . Jeśli mam możliwość modyfikowania tego, co mamy, mógłbym utrzymać obecny interfejs w rodzaju „trybu zgodności”. Użytkownicy muszą się już zalogować, aby korzystać z obecnego systemu, więc mógłbym dodać możliwość aktywowania ustawienia, gdy użytkownicy logują się po raz pierwszy (po wprowadzeniu tej zmiany), w przypadku gdy mają opcję użycia albo „klasyczny” interfejs lub „nowy” interfejs. Nie ma mowy, żebym znalazł gotowe rozwiązanie, które na to pozwala,
Moja firma jest również właścicielem oprogramowania, którego używamy; nie udzielamy licencji. Oznacza to, że kierownictwo, z którym obecnie rozmawiam, to te same osoby, które mogą faktycznie upoważnić mnie do wprowadzenia zmian. Dzięki rozwiązaniu innej firmy musiałbym uzyskać zgodę mojej firmy, oprócz zapewnienia wszelkich praw, które byłyby konieczne od firmy, która opracowała produkt, którego używamy, co stanowi dodatkową przeszkodę. Wymagałoby to również przekonania firmy, by zrezygnowała z „swojego” produktu i wybrała inny produkt, co wydaje się większą przeszkodą niż próba aktualizacji tego, co mamy, ale bardzo dobrze mogę się mylić w tej kwestii.
Wreszcie, patrząc w przyszłość, nie chcę tylko poprawić interfejsu użytkownika i naprawić kilka błędów. Po zaktualizowaniu tych „pilnych” problemów miałem nadzieję zaktualizować podstawowy sposób działania firmy związany z technologią. Po spędzeniu 1-2 lat na tego rodzaju sprawach, moim planem było wrócić do zarządzania i zaproponować bardziej dramatyczne zmiany. Istnieje wiele sposobów działania firmy, które można zasadniczo ulepszyć dzięki technologii, której po prostu obecnie nie używają. Na przykład każdy region działa w ten sam sposób. Największe lokalne lotnisko jest centralnym punktem dystrybucji samochodów. Są one wysyłane przede wszystkim według potrzeb. Jednak lotnisko jest wykorzystywane jako baza macierzysta dla wszystkich operacji. Wyślą dwie osoby w jednym samochodzie do mojej lokalizacji, aby odebrać od nas jeden samochód, którego nie potrzebujemy, potem wróć na lotnisko z samochodem, do którego przyjechali, plus to, co zabierają (jesteśmy 32 mile od lotniska). Następnie przybędą do miejsca oddalonego o 5 mil od nas dwoma samochodami, aby wysadzić jeden z nich, a następnie powrócić drugim samochodem na lotnisko. Robią to, nawet jeśli samochód, który odesłaliśmy, jest tym samym rodzajem samochodu, którego potrzebują w pobliżu. Jestem w firmie od około dwóch lat i wydaje mi się, że odbiegają od tego w najbardziej ekstremalnych przypadkach niedoborów samochodów (około trzy razy w historii). Zastąpiłbym 4 osoby pracujące w każdym regionie zautomatyzowanym systemem planowania, który określa, dokąd jadą samochody i staram się znaleźć ścieżkę, która wymaga najmniej czasu + mil + kierowców, aby dostarczyć wszystkie samochody tam, gdzie powinny być, jako przykład poprawek na wyższym poziomie Mam nadzieję, że kiedyś dodam.
Jednak zanim poczuję się swobodnie, proponując to wszystko, uważam, że pomocne byłoby uzyskanie pewności w firmie i bazie kodu, wykonując mniejsze zadania, takie jak aktualizacja interfejsu. Rozwiązania takie jak outsourcing lub w inny sposób wyeliminowałyby tę możliwość.
if (m_newInterface)
zaczął pojawiać się kod spaghetti w całej bazie kodu. Oddzielenie i refaktoryzacja zajęło wystarczająco dużo czasu, a kiedy to zrobiono, większość użytkowników już przeprowadziła migrację do nowego interfejsu (pomyśl o wielu latach).