Kluczowym problemem związanym z utrzymaniem starszych systemów jest brak ludzi, którzy a) są na bieżąco z tymi systemami ib) są skłonni do ich dalszego utrzymywania.
Niedawno zadałem pytanie podobne do tego, czy młodsi programiści w ogóle interesują się komputerami mainframe. Konsensus skłaniał się ku nie.
Utrzymanie starszych systemów postrzegane jest jako samobójstwo zawodowe. W wielu firmach, w których panuje bezwładność, niewiele jest inwestycji w szkolenie personelu, aby utrzymać się nad tymi systemami, co prowadzi do pojedynczych punktów awarii po stronie personelu. Wiele osób, które znam na podobnych systemach, szuka dróg, ponieważ nie widzą w nich długoterminowej przyszłości i widzą jedynie pogorszenie kariery.
W niektórych branżach przepisy dotyczące przechowywania danych mogą być kluczowym czynnikiem zapewniającym rozsądną kontrolę starszych systemów. Myślę, że jest to szczególnie problem branży finansowej. Przepisy te - o ile mi wiadomo - są na ogół ograniczone czasowo.
Myślę jednak, że w praktyce nastąpi:
Nastąpi punkt na wykresie, w którym koszt przejścia na bardziej nowoczesny system, który pozwala omijać wady starszego systemu, spadnie poniżej kosztów utrzymania starszego systemu, ponieważ jest on tańszy.
IBM sprzedaje obecnie wiele komputerów mainframe i ciężko pracują, aby ich duże maszyny nie odcięły rzeszy młodszych profesjonalistów. Ale nie sądzę, żeby to wystarczyło na tym etapie. Mają niektóre USP pod względem śladu węglowego i faktycznej mocy przetwarzania.
Jednak na każdą osobę, która kupi komputer mainframe IBM, ponieważ możesz na nim uruchomić Linuksa, kosztuje mniej energii elektrycznej i jest bardzo wydajna, będziesz mieć kilku innych, którzy wybiorą farmę serwerów, ponieważ są bardziej zaznajomieni z tym światem podobnie jak wielu innych programistów.
Ostatecznie wiele zależy od branży. Pracuję w konkretnej branży, która od lat jest bardzo zależna od komputerów mainframe i są one nadal szeroko stosowane. Jednak hostowane rozwiązania stają się coraz bardziej popularne, co pozwala na konsolidację umiejętności w większych firmach - usuwa to niektóre problemy, z jakimi borykają się poszczególne firmy pod względem punktów awarii - a ponadto niektórzy dostawcy bardzo mocno patrzą na rozwiązania nie oparte na komputerach mainframe za problemy związane z tą branżą.
Podsumowując, wydaje mi się, że ogólnie rzecz biorąc, nastąpi przejście do migracji ze starszych systemów, gdy tylko ekonomiczny punkt utrzymania kontra migracja przemówi na korzyść migracji. Będzie to jednak w dużej mierze niewidoczne dla wielu osób, ponieważ nie jest nowe i funky i nie ma bardzo publicznej twarzy, tak jak robi to kolejna wielka rzecz. Migracja ta może dotyczyć dostawców usług lub nowszych technologii (szczególnie tam, gdzie bezpośrednio dotyczy to dostawców usług).
Moje doświadczenie - szczególnie w sieciach - polega na tym, że istnieje możliwość usunięcia polegania na starszych systemach.
Większość firm nie wie już o technicznym zadłużeniu i nawet nie zdaje sobie sprawy, że rzeczy są złe, dopóki dosłownie nie upadnie wokół nich i nie doprowadzi ich do bankructwa (jeśli kiedykolwiek dojdzie do tego punktu). Faktycznie widziałemtak się stało i nie było ładne; co pogorszyło to fakt, że wielokrotnie starałem się uświadomić właścicielom firm o rosnącym zadłużeniu technicznym i że będzie musiał zostać naprawiony, a za każdym razem był odrzucany z powodu niechęci do poświęcenia wymaganego czasu i środków na naprawę to. Efektem końcowym było po ponad 10 latach, że system ostatecznie zawiódł katastrofalnie (po moim odejściu) i nie mogli się zregenerować i stracili interes, ponieważ byli zbyt głupi, aby zdać sobie sprawę z tego, że przez te dziesięć lat wydawali trochę pieniędzy na naprawienie problemu byłoby lepsze niż całkowite zignorowanie go. Mogłem godzinami gadać o absurdalnej głupocie tej firmy, a najbardziej bolało mnie to, że można było jej całkowicie uniknąć, gdyby właściciele nie byli tylko po to, aby szybko zarobić, wycinając wszystko inne.
Niezwykle trudno jest powiedzieć firmie, czy jej systemy są źle napisane i wymagają poważnego refaktoryzacji (jeśli nie całkowitego przepisania, co zwykle ma miejsce, ponieważ jest tak źle). Przez większość czasu po prostu cię zastrzelą, nawet jeśli ostrzeżesz ich, że trudno jest wprowadzać zmiany lub dodawać nowe funkcje (we właściwy sposób, to znaczy nie tylko nakładać więcej bzdur na stos), a nawet uważają cię za ze szkodą dla firmy, ponieważ występują problemy z systemem w jego obecnym stanie.
Doszedłem do wniosku, że to przegrana bitwa, która nie jest warta walki. Ludzie wystarczająco inteligentni, aby wiedzieć o długach technicznych, nie muszą o tym dwukrotnie mówić i są świadomi niebezpieczeństw od samego początku, a wszyscy inni nie będą słuchać żadnego powodu ani ostrzeżenia, dopóki i tak nie będzie za późno. Najlepszą (i oczywiście najbardziej nierealistyczną) opcją byłoby wpuszczenie naturalnej selekcji i wymarcie ignoranckich ludzi, pozostawiając tylko inteligentnych. Nie znam żadnego bardziej przyziemnego sposobu radzenia sobie z tym, ponieważ wszystko, co osobiście próbowałem w przeszłości, zostało całkowicie zignorowane, zmniejszyło moją wartość w oczach firmy (za „narzekanie”), a nawet spowodowało moje wypowiedzenie, ponieważ byłem „zbyt skoncentrowany” na naprawianiu „tego, co nie zepsuty i nikt inny nie miał odpowiedniego stanu umysłu, aby zobaczyć, że jest zepsuty.
źródło
Dla anegdoty ten sam argument wysunięto w Paryżu w XVI-XVII wieku. Pod nim wykopano tyle otworów i tuneli (oprócz naturalnych otworów ze względu na geologię tego obszaru), że od czasu do czasu zawaliłby się budynek.
Zanim całe bloki miasta zapadły się w ziemię, wydano wytyczne, aby wypełnić niepotrzebne dziury i tunele żwirem i kośćmi (mieli też problemy z zatłoczonym cmentarzem). Miasto przetrwało do momentu wynalezienia betonu.
Chodzi mi o to, że wiele organizacji ma tendencję do czekania na ostatnią chwilę, aby wykonać konserwację oprogramowania, ale koderzy (podobnie jak inżynierowie) często wykonują zadanie szybko i dobrze.
Przeżyliśmy błąd Y2k. Błąd Y2036 zmusi wiele organizacji do aktualizacji sprzętu i oprogramowania. Świat może zakończyć się w 2012 roku. Ale informatycy nie są socjologami ani krytykami literackimi .
Aha, a tymczasem mówi się: napisz kod, jakby następny opiekun był okrutnym psychopatą, który wie, gdzie mieszkasz.
źródło
Zapomniałem, co obecnie uważamy za starszy kod? Kod z zeszłego roku, kod z ostatniej dekady czy kod z ubiegłego wieku?
Pieniądze prowadzą dyskusję na temat konserwacji starszych systemów. Dług techniczny ma formę zwiększonego kosztu zmiany systemu.
Pracowałem ze źle zaprojektowanymi i inteligentnie zaprojektowanymi systemami. Co ciekawe, koszty ich utrzymania nie różnią się tak bardzo. Największymi problemami są niepoprawne architektury dla bieżącego użycia, które zwykle pojawiają się w problemach ze skalowaniem lub gdy wymagana jest poważna zmiana. Nie łatwo przekonwertować główny obszar kodu z jednowątkowego na wielowątkowy.
Najważniejsze problemy, jakie napotykam, to używane języki programowania. Starsze systemy są napisane w językach, które są dziś mniej popularne, więc musisz albo trenować więcej, albo zatrudniać bardziej doświadczonych (drogich) i rzadkich zasobów. W obu przypadkach, z powodu mniejszej puli, masz również trudności ze znalezieniem wykwalifikowanych osób, które zwykle prowadzą tyle problemów, ile rozwiązań.
Co do obiecanego przepisywania, większość systemów, które miały ogromne inwestycje, nie uzasadnia przepisywania. To niesamowite, jak długo oprogramowanie może działać i być ulepszane. Zmiany sprzętu (niektóre systemy obsługiwane przez moją firmę używają specjalistycznego sprzętu) są naszym największym problemem. Możliwość ulepszenia jest często ograniczona tylko przez mechanizmy integracji starszego kodu z nowymi funkcjami.
źródło
To już duży problem. I nie wykazuje żadnych oznak zmiany.
W latach 60. i 70. duże instytucje wszelkiego rodzaju przeszły od rachunkowości na papierze do rachunkowości na systemach komputerowych. W zdecydowanej większości wybrali COBOL. Większość nadal korzysta ze zaktualizowanych wersji tych systemów COBOL. Zobacz http://cis.hfcc.edu/faq/cobol, aby uzyskać statystyki na ten temat
Co jakiś czas otrzymujemy losowe przypomnienia, na przykład gdy Arnold Schwarzenegger odkrył kilka lat temu, że nie może po prostu obniżyć wynagrodzenia 200 000 pracowników państwowych bez pierwszych 6 miesięcy rozwoju (patrz http: //www.infoworld). com / d / developer-world / californias-cobol-conundrum-067 do weryfikacji).
Biorąc pod uwagę ryzyko zmiany, bardzo trudno jest uzasadnić zmianę tych systemów. Zawsze. Tak było przez całe moje życie. Ale nie widzę powodu, aby fakt ten zmieniał się w życiu moich dzieci. Albo życie ich dzieci.
Mam przyjaciół, którzy utrzymali kod starszy niż oni. Mam przyjaciółkę, która wróciła do firmy 30 lat po tym, jak tam pracowała po raz pierwszy, i przekonała się, że jej programy wciąż działały bez zmian w języku , którego nawet nie pamiętała!
Zakończę prawdziwą historią tego, co może się wydarzyć.
W latach 70. firmazostała założona, aby zapewnić rynek internetowy dla handlowców. PDP-11 było dla nich dobre dopasowanie cena / wydajność, więc wybrali to. Przekraczali granice wydajności maszyny, więc napisali swój system w wysoce zoptymalizowanym zestawie PDP-11. Kilka lat później PDP-11 przestał być sprzedawany. Jakkolwiek interesy były świetne, maszyny trwały, a wymiana używanych maszyn była łatwa do zdobycia. Trzymali platformę. Kilka lat później zastąpienie stało się trudniejsze. Wykonano duży projekt mający na celu zastąpienie platformy transakcyjnej. Nie powiodło się. Spróbowali ponownie. I znów się nie udało. Główną przyczyną niepowodzenia było to, że nikt nie wiedział, jak działa system handlu i nikt nie mógł już czytać zestawu PDP-11. Potem zbawienie uderzyło. Ktoś stworzył asembler PDP-11 działający w systemie Linux.
Tak więc w 2000 r. Transakcje o wartości miliarda dolarów rocznie trafiały do maszyn z systemem Linux, za pośrednictwem mostka Ethernet-deknet, do emulacji maszyn PDP-11, które realizowały transakcję na systemie oprogramowania napisanym w wysoce zoptymalizowanym systemie PDP- 11 montaż. Dla prędkości.
W ciągu ostatniej dekady nie miałem żadnego związku ze wspomnianą firmą. Nie mogę więc powiedzieć, czy nadal działają na emulowanych PDP-11. Wiem, że dziesiątkowanie boleśnie ściskało ich marginesy, więc podjęli kolejny wysiłek migracji. (Nauczyłem się tej historii tylko dlatego, że przeprowadziłem wywiad z kilkoma osobami, które zostały stamtąd zwolnione i zapytałem, co się stało.) Jednak biorąc pod uwagę wcześniejsze niepowodzenia, dałbym to lepiej niż nawet szanse, że nie zastąpiły tego systemu.
źródło
Z punktu widzenia użytkownika brzmi to bardzo poważnie. Aby zgniliznę można było opóźnić lub lepiej uniknąć, oprogramowanie to musi być wolne od kajdan. Wydawcy powinni uwolnić kod źródłowy lub zajmować się utrzymywaniem i aktualizowaniem źródeł, dopóki ostatni użytkownik nie przestanie go używać. W przeciwnym razie istnieje bardzo duża szansa, że wycofają się z działalności z powodu podobnych zgnilizny w świecie biznesu, pozostawiając w ten sposób całkowicie otwarte oprogramowanie.
To znaczy, że okres obowiązywania praw autorskich do oprogramowania i ograniczania licencji powinien być bardzo krótki, na końcu którego oprogramowanie i jego baza kodu wejdzie do domeny publicznej i pozostanie tam. Dzięki temu użytkownik może ciągle aktualizować źródła lub zatrudnić kogoś, kto to zrobi, opóźniając i / lub unikając zepsucia.
Lub, jeśli jesteś nieco otwarty na ideę wolnego oprogramowania, możesz pisać swoje programy na podstawie bezpłatnej licencji, takiej jak AGPL lub GPL, lub innych licencji wolnego oprogramowania. Z tego, co widziałem, gdy źródła oprogramowania nie są już zainteresowane programistami w celu ulepszenia go z jakiegokolwiek powodu, baza źródłowa zostaje poddana kanibalizacji i zaczyna nowe życie. O ile widziałem, pakiety w systemie operacyjnym Debian mają tendencję do podążania za tym cyklem życia.
źródło
Wspierając różnorodne aplikacje rządowe i prywatne, powiedziałbym, że większość firm, a przynajmniej rząd Stanów Zjednoczonych, zdaje sobie sprawę z niebezpieczeństw związanych z zepsuciem kodu i nie nadążaniem za najnowszymi trendami bezpieczeństwa.
Regularnie musimy certyfikować nasze oprogramowanie pod kątem różnych podatności, a większość rządowych systemów elektronicznych, nawet starych, otrzymuje regularne aktualizacje, aby zapewnić ich bezpieczeństwo.
Oczywiście są wyjątki i hakerzy zawsze są w ruchu, ale ogólnie myślę, że ludzie są świadomi, że nie możesz po prostu czegoś wyrzucić i nigdy więcej tego nie dotykać.
źródło
Ostrzeżenie: będzie to trochę swobodne ...
Myślę, że istnieją 2 sposoby spojrzenia na twoją obawę.
Jeśli się nad tym zastanowić, niektóre promy kosmiczne i satelity uruchomiły ten sam kod, który je pierwotnie uruchomił. Z drugiej strony niektóre zostały zaprojektowane do aktualizacji, nawet jeśli są (bardzo) zdalne.
Liczy się środowisko. Oczywiście, dopóki nie zmodyfikujesz środowiska, twój kod nie stanie się przestarzały. W tym przypadku zgnilizna kodu tak naprawdę nie istnieje: sam kod (lub wytworzony plik binarny) nie może zgnić. Może się złamać, jeśli zaczniesz atakować go z zupełnie innej strony. Nie chodzi o to, że gnije, ale nie dostosowuje się do otoczenia. Pomyśl o tym jak o problemie ewolucyjnym.
Ale nasze środowisko się zmienia. I w jakiś sposób kluczem do twojego problemu jest również rozwiązanie. Nasze środowisko zmienia się tak szybko, że w dzisiejszych czasach nie spodziewalibyśmy się, że oprogramowanie nie ewoluuje z czasem. Pomijamy projekty oprogramowania, które nie były aktualizowane w ubiegłym roku, i jęczymy na temat produktów i obsługi klienta, które nie dają jasnego planu działania. I nawet jeśli to się powiedzie - otrzymujesz przejrzystą mapę drogową, dobre wsparcie, regularne aktualizacje ... - zawsze jest szansa, że pojawi się pretendent, z wykładniczym wzrostem. Często popełniamy błąd myśląc, że duże firmy o ustalonej pozycji zawsze będą dominować, właśnie dlatego, że dominują. Jednak w ten sam sposób, w jaki dominujący element w stadzie się starzeje, super-ogromne oprogramowanie / sprzęt / cokolwiek sprzedawca się starzeje. Lub po prostu trochę leniwy. Wchodzi pretendent, który obraca rzeczy jeszcze szybciej, niż ustalona dominanta mogłaby to zrobić 5 lub 10 lat wcześniej. Lub dominujący po prostu dobrze sobie poradzi, ledwo przetrwa, podczas gdy widzimy zakłócenia na rynku (z ekonomicznego punktu widzenia, z oddziaływaniem na różne dziedziny), a potem wszystko potoczy się dalej. Może to wygląda na niedoskonałe, ale samo w sobie jest procesem organicznym.
Tak więc z punktu widzenia użytkownika problem nie jest tak duży. Zgnilizna kodu nie nastąpi z punktu widzenia użytkownika, ponieważ będzie on mógł użyć alternatywy (być może z płynnym przejściem / migracją ... mam nadzieję).
Zakładając, że nie widzimy rzeczy z punktu widzenia użytkownika, lub że mówimy o systemie, który jest odporny - z nieznanych przyczyn, rozwoju rządu, podróży kosmicznych itp. - na konkurencję i jest naprawdę przypuszczalny aby zostać zbudowanym tak, by żyć / przetrwać przez bardzo długi czas, musimy spojrzeć na teksty, do których się odwołujesz. I prawdopodobnie trochę więcej literatury na temat niezawodnych systemów i systemu odpornego na uszkodzenia. Chociaż prawdopodobnie chcemy posunąć się dalej. Chcemy nie tylko tolerancji na uszkodzenia, ale systemów ewolucyjnych.
Problem z ewolucją polega na tym, że wprowadza zmiany, a zmiany wprowadzają punkty awarii. Spójrzmy teraz na to i co możemy zrobić, aby się z nimi zmierzyć.
W tym czasie możemy nadal polegać na metaforze infrastruktury / architektury / inżynierii (w końcu wszyscy sami jesteśmy inżynierami oprogramowania, choć prawdopodobnie nie ma czegoś takiego jak inżynieria oprogramowania ... na razie). Jest powód, gdy system rur jest nadal aktywny (z pewnymi usterkami), podczas gdy Big Ben nadal działa (z pewnymi usterkami) lub Wieża Eiffla wciąż stoi. To dlatego, że robimy z istotnymi (lub nie tak istotnymi) elementami infrastruktury, co powinniśmy robić również z oprogramowaniem: ciągła kontrola. Podmioty te niekoniecznie zostały zaprojektowane tak, aby przetrwały tak długo, ale skorzystały ze stałego nadzoru oraz terminowych ulepszeń i napraw, gdy były potrzebne. Nazwij to swoimi poprawkami, jeśli chcesz.
Z drugiej strony niektóre projekty miały trwać i działać bez przerwy, nawet wiedząc, że ciągła kontrola nie będzie możliwa. W tym przypadku zwracamy się w stronę dobrego wzornictwa i formalnych modeli. Elementy niezawodności (dostępność, niezawodność, bezpieczeństwo, integralność, konserwacja) można określić ilościowo - dla danego środowiska. Statystyki zajmą się resztą, aby zaplanować resztę i przyszłość. Co nasuwa pytanie: czy w ogóle możliwe jest zbudowanie systemów, które będą ewolucyjne, w prawdziwym tego słowa znaczeniu?
źródło
Jeff Langer w Clean Code zadaje podobne pytanie ... bez odniesienia do rur parowych:)
Według Kenta (w Extreme Programming Explained) projekt jest „prosty”, jeśli spełnia następujące zasady:
Aby przeprowadzić wszystkie testy ... potrzebujemy testów do przeprowadzenia, a to jeden wielki wskaźnik zadłużenia technicznego. Na przykład, jeśli w systemie takim jak Mercury Quality Center znajduje się 10 000 przypadków testowych i żaden z tych testów nie jest zautomatyzowany, jest to jeden wyraźny wskaźnik narastającego zadłużenia technicznego.
I tu właśnie pojawia się Feathers i jego książka „Efektywnie współpracujący ze starszym kodem”.
źródło