Ich arbeite als Vermieter / Manager für eine Autovermietung, die auf einem Mietsystem läuft, das 1972 geschrieben wurde. Ich entschied, dass es vielleicht Zeit für ein Update war. Hier ist ein kurzes Beispiel für den Wahnsinn, mit dem wir uns täglich aus diesem Programm beschäftigen müssen:
Ein Vermieter muss sich daran erinnern, dass für das Drucken auf einem Bildschirm im Feld ACT "MXC" verwendet wird (alles basiert auf Funktionscodes), was verblüffend für "Maximale Anzeige auf einem Vertrag" steht, während für ein anderes PR (für PRint) in erforderlich ist Das Feld AKTION, aber mehrere Bildschirme verwenden ein Y im Feld PT (für PRINT). Ein weiterer Bildschirm verwendet ein Y im Feld PRT (für PRINT). Bei einem weiteren Bildschirm muss der Benutzer die Eingabetaste drücken (nicht jedoch die Eingabetaste neben dem Feld Buchstaben, da dies ein neues Zeilenzeichen ist, muss es die Eingabe auf dem Nummernblock sein) und dann F8, ein anderer, aber verwandter Bildschirm erfordert einfach F8, einige Bildschirme haben ein Feld mit der Bezeichnung PRT, das für PRinT sein sollte, aber das Feld tatsächlich Es wird nichts unternommen und der Druckvorgang wird automatisch ausgeführt, nachdem mehrere Eingabeaufforderungen durchlaufen wurden. Auf weiteren Bildschirmen befindet sich ein Feld mit der Bezeichnung PRINT Y / N.Die Standardeinstellung lautet Y für Vorgänge, bei denen ein anderer Standort bereits Papierkram liefert, und N für Vorgänge, bei denen ein anderer Händler Papierkram benötigt.
Ich entschied, dass ich einen besseren Job als diesen machen könnte, also machte ich mich daran, die Person in der Firma zu kontaktieren, die die Entscheidung treffen würde, dies zu aktualisieren. Irgendwann komme ich zum VP of IT, der für dieses Programm verantwortlich ist. Ich bekomme ein bisschen Informationen von ihm und erfahre, dass mein Autovermieter sein Vermietungsprogramm in IBM Mainframe Assembler mit ein wenig COBOL geschrieben hat. Er sagt, dass derzeit keine Stellen offen sind, aber das sollte ich Schicken Sie ihm trotzdem meinen Lebenslauf per E-Mail (falls sich etwas öffnet).
Das führt mich zu meinen Fragen.
Das erste ist technisch. Mit dem Gedanken, die Wartbarkeit in Zukunft zu verbessern, ist es mein Gedanke, sie in einer höheren Sprache als der Assemblersprache neu zu schreiben. Mein Erfahrungsbereich liegt in C ++, das ist für mich die naheliegende Wahl. Das Unternehmen braucht dringend eine einfachere Möglichkeit, das Programm zu aktualisieren, da ich kürzlich einen Artikel gelesen habe, in dem der Mann, mit dem ich gesprochen habe, mit den Worten zitiert wird, das Team habe hart gearbeitet, und sie sind stolz darauf, bekannt zu geben, dass das Programm jetzt Unterstützung für 5 hat -stellige Ortscodes (anstelle von 4) und 8-stellige Autonummern (anstelle von 7). Kurz gesagt, meine Philosophie zu Updates, auch in solchen Situationen, stimmt mit der von Joel überein: http://www.joelonsoftware.com/articles/fog0000000069.html. Neuschreibungen sollten inkrementell sein, anstatt alles, was es zuvor gab, wegzuwerfen und neu anfangen.
Gibt es eine einfache Möglichkeit, IBM Assembly in C ++ zu integrieren, und wenn ja, wie soll ich das tun? Das Schlüsselwort asm ist mir vage bekannt, aber ich weiß nicht, ob es das Beste ist, das zu verwenden oder etwas anderes zu tun. Ist ein solcher Plan nicht gut beraten? Ich mache den größten Teil meiner Arbeit unter Linux mit g ++ und GNU make, daher sind Antworten darauf willkommen, aber definitiv nicht erforderlich (da ich keine Ahnung habe, welche Art von Build-System sie haben, aber ich vermute, dass es fast keine gibt).
Die zweite Frage ist politischer. Wie soll ich dieses Unternehmen davon überzeugen, dass es den Wechsel vornehmen muss? Die theoretischen Kosteneinsparungen sind enorm (meiner Schätzung nach verschwendet das Unternehmen etwa eine Million Dollar pro Jahr, nur um zu lernen, wie man mit dem Programm interagiert), aber meine vorgeschlagenen Änderungen würden wahrscheinlich die Gesamtkosten senken Aktuelle Programmierer haben keine Arbeit, sollten sie in Kraft treten, so gibt es einen großen strukturellen Widerstand gegen Veränderungen.
edit: Ich sollte erklären, warum es für mich die beste Lösung ist, das zu ändern, was das Unternehmen bereits hat. Ich bin immer noch offen für andere Vorschläge, da dies jedoch ein Monster eines Programms ist. Ich hatte noch nie zuvor einen Programmierjob. Bitte korrigieren Sie mich bei einer falschen Analyse.
Zunächst gibt es die Standardlösung.
Nach meinen Gesprächen mit einigen mittelständischen Managern über diese Art von Dingen ist eines der Hauptprobleme beim Umstieg auf ein neues System die große Anzahl loyaler Mitarbeiter, die seit Jahrzehnten im Unternehmen sind und mit dem System inzwischen vertraut sind . Wenn ich in der Lage bin, das, was wir haben, zu ändern, könnte ich die aktuelle Schnittstelle in einer Art "Kompatibilitätsmodus" beibehalten. Benutzer müssen sich bereits anmelden, um das aktuelle System zu verwenden, sodass ich die Möglichkeit hinzufügen kann, eine Einstellung zu aktivieren, wenn Benutzer sich zum ersten Mal anmelden (nachdem ich diese Änderung vorgenommen habe), wobei sie die Option haben, eine der beiden Optionen zu verwenden "klassische" Schnittstelle oder die "neue" Schnittstelle. Es gibt keine Möglichkeit, eine Standardlösung zu finden, die dies ermöglicht.
Mein Unternehmen besitzt auch die von uns verwendete Software. Wir lizenzieren es nicht. Das bedeutet, dass das Management, mit dem ich gerade spreche, die gleichen Personen sind, die mich tatsächlich zu einer Änderung ermächtigen könnten. Bei einer Lösung eines Drittanbieters müsste ich zusätzlich zu den Rechten, die für das Unternehmen, das das von uns verwendete Produkt entwickelt hat, erforderlich sind, die Genehmigung meines Unternehmens einholen, was eine zusätzliche Hürde darstellt. Dies würde auch erfordern, das Unternehmen zu überzeugen, "sein" Produkt aufzugeben und ein anderes Produkt zu nehmen. Dies scheint eine größere Hürde zu sein, als zu versuchen, das, was wir haben, zu aktualisieren, aber ich könnte in diesem Punkt durchaus falsch liegen.
Schließlich möchte ich in die Zukunft blicken und nicht nur die Benutzeroberfläche verbessern und ein paar Fehler beheben. Nachdem ich diese "dringenden" Probleme aktualisiert hatte, hoffte ich, die grundlegende Funktionsweise des Unternehmens in Bezug auf Technologie zu aktualisieren. Nachdem ich ein bis zwei Jahre mit diesen Themen verbracht hatte, war mein Plan, zum Management zurückzukehren und dramatischere Änderungen vorzuschlagen. Es gibt viele Möglichkeiten, die das Unternehmen durch Technologien, die es derzeit einfach nicht nutzt, grundlegend verbessern könnte. Zum Beispiel funktioniert jede Region so ziemlich auf die gleiche Weise. Der lokale Großflughafen ist der zentrale Knotenpunkt für die Verteilung von Autos. Sie werden in erster Linie nach Bedarf gesendet. Der Flughafen wird jedoch als Basis für alle Operationen verwendet. Sie schicken zwei Leute in einem Auto zu mir, um ein Auto von uns abzuholen, das wir nicht brauchen. Dann kehren Sie mit dem Auto zum Flughafen zurück, mit dem Sie gekommen sind, plus dem, was Sie zurücknehmen (wir sind 32 Meilen vom Flughafen entfernt). Dann werden sie mit zwei Autos zu dem Ort kommen, der 5 Meilen von uns entfernt ist, um eines von ihnen abzustellen, und dann mit ihrem anderen Auto zum Flughafen zurückkehren. Sie tun dies auch dann, wenn das Auto, das wir zurückgeschickt haben, dasselbe Auto ist, das sie in unserer Nähe benötigen. Ich bin jetzt seit ungefähr zwei Jahren in der Firma und es scheint, als ob sie nur in den extremsten Notfällen von Autoknappheit davon abweichen (also ungefähr dreimal je). Ich würde die 4 Leute, die in jeder Region arbeiten, durch ein automatisiertes Planungssystem ersetzen, das festlegt, welche Autos wohin fahren, und versuchen, den Weg zu finden, der die geringste Zeit + Kilometer + Fahrer benötigt, um alle Autos dort abzuliefern, wo sie sein müssen Beispiel für die höheren Korrekturen, die ich hoffe, eines Tages hinzuzufügen.
Bevor ich dies alles vorschlage, halte ich es jedoch für hilfreich, sich durch kleinere Aufgaben wie das Aktualisieren der Benutzeroberfläche einen Überblick über das Unternehmen und die Codebasis zu verschaffen. Lösungen wie Outsourcing oder auf andere Weise würden diese Möglichkeit aufheben.
if (m_newInterface)
überall auf der Codebasis Spaghetti-Code auf. Das Entkoppeln und Umgestalten dauerte lange genug, bis die meisten Benutzer bereits auf die neue Benutzeroberfläche migriert waren (denken Sie an mehrere Jahre).