Neugierige Perversionen aus der IT-Welt

Published on December 04, 2018

Neugierige Perversionen aus der IT-Welt

Ursprünglicher Autor: thedailywtf.com
  • Übersetzung
Die Daily WTF- Website sammelt seit 14 Jahren lustige, wilde und / oder traurige Geschichten aus der IT-Welt. Ich übersetzte mehrere Geschichten, die mir interessant erschienen. Alle Firmennamen wurden geändert.

3.000 Meilen zur Arbeit


Wahre Geschichte aus der persönlichen Erfahrung unseres Autors Snoofle. [Original]

Vor vielen Jahrzehnten arbeitete DefCon Inc, ein Verteidigungsunternehmen, für die US-Armee und versuchte, einen neuen Vertrag zu bekommen, um eine Art von Anwendung für den Kampf zu erstellen. Das Unternehmen wollte in seinem Vorschlag nachweisen, dass es über genügend Mitarbeiter verfügt, um dieses Projekt durchzuführen. Deshalb stellte sie mehr als tausend verschiedene Programmierer, Projektmanager, Manager usw. ein. Das Militär, das verschiedene kommerzielle Vorschläge studierte, sah eine Reihe neuer Mitarbeiter, die mit den erforderlichen Prozessen, Verfahren und Anforderungen völlig unbekannt waren, und übergab den Vertrag an ein anderes Unternehmen. Der Bauunternehmer entließ seinerseits die gesamten tausend Menschen.

Nach einigen Monaten kam ein ähnlicher Vertrag zustande. Das Unternehmen stellte erneut tausend Mitarbeiter ein, um zu beweisen, dass es Mitarbeiter hat. Einige Monate später wurde der Vertrag erneut an einen anderen Auftragnehmer übertragen, und das Unternehmen entließ erneut die gesamten Tausend.


Dies wurde zwei Jahre lang mehrmals wiederholt.

Nach alledem war der Großteil der für die Einstellung verfügbaren Mitarbeiter bereits über den sehr kurzen Kündigungszyklus im Unternehmen informiert, sodass der Auftragnehmer nur Neuankömmlinge anziehen konnte, die gerade ihre Ausbildung abgeschlossen hatten. Schließlich lag es an einem Top-Manager, dass all diese Leute wegen der Schreibtische viel billiger waren als erfahrene Entwickler in der Firma und diejenigen, die die Firma wegen Verträgen entlassen hatte. Deshalb gab er den Befehl, alle erfahrenen Mitarbeiter des Unternehmens durch billige junge Mitarbeiter zu ersetzen . Der Prozess dauerte zwei Jahre, aber es passierte immer noch.

Jetzt, da die Lohnkosten erheblich gesunken sind und alle erfahrenen Kandidatenentwickler verärgert wurden, konnte das Unternehmen sein festes Personal aufstocken, ohne das Lohnbudget zu erhöhen. Sie konnte nur junge, unerfahrene Entwickler einstellen, um endlich einen Vertrag zu bekommen.

Leider hatten alle diese jungen Entwickler sehr wenig Erfahrung und das Unternehmen hatte keine Leute mehr , die sich in den Gräben befanden, um sie zu schulen. Das Ergebnis ihres Zweijahresvertrags war daher dieses unzuverlässige Projekt, das häufig abstürzte, sich unvorhersehbar verhielt und nicht geändert werden konnte. Solche Eigenschaften sind unerwünscht, wenn es sich um ein System handelt, das feuern und explodieren muss.

Irgendwann merkte einer der Top-Manager, was passiert war, ließ das Unternehmen aufhören, sich wie ein Elefant in einem Porzellanladen zu verhalten, und stellte hochbezahlte Berater ein. Leider waren sich hochbezahlte Berater des Einstellungszyklus bewusst und wollten nichts mit der Organisation zu tun haben. Nach einiger Zeit musste das Unternehmen die Beschäftigungsbedingungen deutlich verbessern, bis sich schließlich einige erfahrene Mitarbeiter bereit erklärten, einen Job als Vollzeitbeschäftigte zu bekommen. Es ist in New Jersey passiert.

Nachdem das Management diese neuen Mitarbeiter dem Projekt zugewiesen hatte, um die Arbeit daran zu beschleunigen, sagten die neuen Mitarbeiter: "Moment mal, es gibt ein riesiges Loch in der Mitte dieses Projekts!"Das Management antwortete, dass dieser Teil des Projekts klassifiziert sei und nur von Personen mit Zugang zu Verschlusssachen und nur in einem Unternehmen in Kalifornien untersucht werden könne. Entsprechende Genehmigungen wurden angefordert und eingeholt. Anschließend wurden erfahrene Mitarbeiter für zwei Wochen zu einem Unternehmen in Kalifornien geschickt.

Bevor sie der Reise zustimmten, wollten die Entwickler wissen, wie sie nach dem Studium auf die Materialien zugreifen können. Der Zugang ist schließlich nur vor Ort in Kalifornien möglich, und alle Mitarbeiter leben und arbeiten in New Jersey. Man sagte ihnen, dass sie in Kalifornien mehr über die Einzelheiten erfahren würden.

Nun, alle sind an die Westküste geflogen, haben sich in Hotels niedergelassen und sind ins Büro gegangen.

In diesem Moment wurden sie über alle Probleme informiert, die behoben werden müssen. Am Donnerstag, der zweiten Arbeitswoche, wurde beschlossen, dass es ungefähr zwei Jahre dauern würde, bis alle erforderlichen Upgrades abgeschlossen waren. Die Entwickler fragten erneut: „Wie erhalten wir Zugang zu Materialien aus New Jersey?“ Die Manager antworteten, dass alle Arbeiten vor Ort durchgeführt werden sollten und sie für die nächsten zwei Jahre in Kalifornien bleiben würden. Ab nächsten Montag.

Aber warte, sie hatten keine Gelegenheit, dies mit ihren Familien zu besprechen! Wie wirkt sich die Abwesenheit von 90% der Zeit eines Elternteils auf Kinder aus? Würden sie zwei Jahre in Hotels und Flughäfen leben wollen? Was zum Teufel hat das Unternehmen nicht vor Ort in Kalifornien angestellt, sondern in New Jersey?

Da sich der Auftragnehmer in New Jersey befindet, muss auch das von ihm eingestellte Personal dort registriert werden. Wenn dies vor der Beschäftigung gemeldet würde, würde sich natürlich die Mehrheit der Beschäftigten (wenn nicht alle) weigern zu arbeiten. Wenn sie wüssten, hätte keiner der Arbeiter das Flugzeug betreten und wäre nicht nach Kalifornien geflogen, um sich mit dem Projekt vertraut zu machen.

Man kann nicht sagen, dass der Rest der Arbeit für die Manager mit der Notwendigkeit von Opfern für das Unternehmen zu tun hatte, und die Entwickler fragten sich: „Was zur Hölle?“ Der Donnerstagabend war mit endlosen Heimanrufen beschäftigt. Am Freitagmorgen kündigten alle Mitarbeiter und gingen zum Flughafen, um nach Hause zurückzukehren.

Die Vertreter der Armee verhielten sich würdevoll und reagierten verständnisvoll auf die Tatsache, dass die Menschen ihre Häuser und Familien für zwei Jahre nicht verlassen wollen. Es wurde jedoch viel schwieriger, mit dem Auftragnehmer zu sprechen und sein Versprechen zu erfüllen, erfahrenes Personal am Arbeitsplatz zu haben.

Infolgedessen wurde der Vertrag mit dem Auftragnehmer gekündigt, und an seiner Stelle wurde beauftragt, eine neue Bestellung wiederherzustellen.

Fehlerfall


[Original]

Bild

Am ersten Tag des neuen Jobs war Sebastian nicht besonders begeistert. Er hat schon viel gesehen und Gleichgültigkeit und Pessimismus gewonnen. Diese neue Arbeit sollte nicht anders sein: eine Menge nerviger Kollegen, schlecht durchdachter Anforderungen, alter Code voller Spaghetti-Code. Aber sie war gut bezahlt, und er hatte genug von seiner alten Gruppe, er hatte genug von denselben vertrauten Gesichtern. Deshalb bereitete er sich intern auf etwas neue Nuancen der gleichen Bürorichtlinie und trostlosen Aufgaben vor.

Er war nicht einmal sehr verärgert, als er seine Anmeldeinformationen in der IT-Abteilung abholte und das Summen und Klicken der alten Packard Bell-Server hörte. Sebastian senkte einfach seine Messlatte für Computeranforderungen auf mehrere Ebenen und kehrte in das neue Büro zurück. Ja, seine Position bedeutete sein eigenes Büro und die angemessene Bezahlung. Dafür konnte er sich mit vielen anderen arrangieren.

Sein Login funktionierte beim ersten Versuch, was eine angenehme Überraschung war. Er erwartete Windows XP; Beim Booten von Vista war er sich nicht sicher, ob er ein neueres Betriebssystem verwenden sollte, oder war entsetzt, dass es Vista war. Nachdem er die Autorität des Administrators erhalten und die Benutzerkontensteuerung eingeschränkt hatte, konnte er sogar eine Weile so tun, als wäre dies eine „Sieben“. "Um mir Angst zu machen, ist etwas mehr nötig ", dachte er und startete Outlook.

Im Posteingang befand sich bereits eine Mail: ein paar Begrüßungsbriefe mit Informationen für neue Mitarbeiter sowie die erste Aufgabe von seinem Vorgesetzten. Er war beeindruckt von der Effizienz der Aufgabenverteilung und schlug einen Brief seines neuen Managers auf.

Der erste Buchstabe war wie folgt:

Hallo Sebastian, herzlich willkommen in unserem perfekt abgestimmten Arbeitsumfeld. Alles wird richtig gemacht. Bei der Erstellung von Projektdokumenten arbeiten Sie mit Bonk-Word (einer Webanwendung zur Dokumentation von IBM). Vergessen Sie nicht, oft zu sparen! Wenn Bonk-Word abstürzt, müssen Sie einen Brief an die IT-Abteilung schreiben, um es neu zu starten.

Das Unternehmen erstellt die Projektdokumentation. Schreiben Sie alles mit passiver Stimme, verwenden Sie lila für die Überschrift von Kapiteln und grün für Abschnittsüberschriften. Die Dokumente werden täglich um 9.00 Uhr vom Firmenpräsidenten überprüft. Seien Sie also darauf vorbereitet. Fehler in den Kopfzeilen werden zu einem „schwarzen Fleck“ in Ihrer persönlichen Datei.

Entwerfen Sie zunächst eine Problemlösung für Macintosh-Schriftarten, die wir seit vier Jahren nicht mehr lösen können. Morgen, um 9 Uhr, sollten Sie ein sechsseitiges Projektdokument haben. Danke.

"Sechs Seiten für morgen?", Fragte Sebastian besorgt. „Ich war wohl zu früh froh über die Effizienz. Zumindest wird es nicht langweilig “, knackte er, öffnete Bonk-Word und fing an, sich mit den sogenannten Problemen mit Schriften zu befassen.

Das erste, was er herausfand - der Manager scherzte nicht über die häufige Aufbewahrung. Am Ende des Tages machte er im Geiste Wetten: Was zuerst fallen wird - Bonk-Word oder Vista selbst. Beide stürzten ungefähr jede halbe Stunde ab. Aber aus irgendeinem Grund beruhigte es Sebastian, die Statistiken im Fluge zu halten. Es erinnerte ihn daran, dass auf der Welt etwas anderes funktioniert. Die einfachsten mathematischen Operationen waren nicht beeindruckend, aber zuverlässig. Regelmäßig. Stabil.

Vielleicht fühlte sich Sebastian in diesem Büro einsam. Aber er war still und getrennt. Lassen Sie sich die ständigen Abfahrten ärgern, doch Sebastian rückte noch vor. Er verbrachte seine Zeit mit dem Studium einer Vielzahl von Schriften, einschließlich der Postscript-Spezifikation, der Begleitliteratur mit Empfehlungen zu deren Verwendung und der Informationszentren im World Wide Web, die erstellt wurden, um die Weisheit der besten Köpfe der Branche in einem vertrauten und praktischen Frage- und Antwortformat zu sammeln . Er beschrieb ausführlich in dem Dokument "Erstellen eines Python-Programms zum Rendern jedes Zeichens". Er verbrachte zwei Seiten damit, zu beschreiben, was mit zwei Worten gesagt werden konnte.

"Wenn sie sechs Seiten brauchen, bekommen sie sechs Seiten ", dachte Sebastian.

Der erste Tag erwies sich als seltsam, aber Sebastian sah, dass er es mindestens einige Jahre aushalten konnte. Er beendete die Arbeit, verließ das Gebäude (das verdächtig nach alter Lederwäsche roch) und näherte sich langsam seinem „freien Parkplatz“ (ein weiterer Vorteil, der diese Arbeit in seinen Augen rechtfertigte). Langsam - weil die Baustelle vollständig durch Rost erodiert war und der Beton an vielen Stellen vollständig abfiel und die Boden- und Säulenverstärkung sichtbar wurde.

Am nächsten Morgen, genau um 9:00 Uhr, war Sebastian im Büro seines Managers und wartete auf die erste Bestätigung des Projekts durch den Präsidenten des Unternehmens, der telefonisch anrief. Sebastian fühlte sich unwohl, wenn er direkt mit dem Präsidenten sprach, da 60 Angestellte im Unternehmen waren, aber er musste es ertragen.

„Ich habe getan, wie gewünscht, und zwar in der richtigen Menge. Höchstwahrscheinlich ist dies nur eine Formalität, nach der ich mich an die Arbeit machen kann. “

Eine Stunde später kehrte Sebastian gedemütigt und erschöpft in sein Büro zurück. Die absurde, aber grausame Kritik, die er in seinen Ohren erhielt, klingelte immer noch. Laut dem Präsidenten waren seine Abschnittsüberschriften kaum „grünlich“ und nicht grünlich, wie es die Firma verlangte, und die Überschriften der Kapitel sind unentschuldbar „rötlich“ anstelle der erwarteten violetten. Darüber hinaus war er unmissverständlich darüber informiert, dass es unmöglich ist, Schriften mit Python zu debuggen. Stattdessen wurde Sebastian angewiesen, in C ++ zu arbeiten und die „wundervollen“ Softwarebibliotheken des Unternehmens zu verwenden. Während Manager Sebastian auf den Anruf des Präsidenten wartete, lobte er das Dokument, sagte aber während der Inspektion kein Wort und starrte gespannt auf die Ziegelmauer an seinem Schreibtisch.

Sebastian schloss die Bürotür und schloss sich vom Rest der Firma ab. Er setzte sich in seinen luxuriösen Ledersessel und starrte auf den kaum funktionierenden Computerbildschirm. Er öffnete sein Dokument erneut und startete das Auto neu, weil Vista sich entschied, hinauszufliegen. Als der Computer wieder hochfuhr, überprüfte er sein Bankkonto, dachte über Hypothekenzahlungen nach und biss die Zähne zusammen.

„Na gut“, sagte er laut in einem leeren Büro. "Sehen Sie sich diese Bibliotheken an."

Das erste, wonach er suchte, war Dokumentation. Natürlich sollte in einem solchen Unternehmen, das von Dokumenten besessen ist, die Dokumentation für „wundervolle“ Bibliotheken genau mit der richtigen Schriftart und einem absolut korrekten Farbton mit den richtigen Überschriften von Kapiteln und Abschnittsüberschriften getippt werden. Aber es gab keine Dokumentation ... Es gab viele Projektdokumente mit perfekten grünen und lila Blüten. Sie beschrieben jedoch nur die Entwicklungsmethodik der Bibliothek und sagten nichts über ihre Verwendung aus.

"Verliere ich den Verstand?", Fragte sich Sebastian, als das Auto zum dritten Mal neu startete. "Vielleicht ist der Code selbst dokumentiert ..."

Er war erschrocken, aber nicht besonders überrascht: Die Bibliotheken bestanden aus schlecht durchdachten Wrappern für Zeichenfolgenfunktionen aus der Standardbibliothek.

Trotz des ständigen Fiaskos schlug Sebastian weiter zu. Er wurde täglich zu einer weiteren Runde verbalen Mobbings aufgerufen. Das Unternehmen konnte dieses Schriftartenproblem seit vier Jahren nicht mehr bewältigen. nichtsdestotrotz passte keines der vorgeschlagenen Dinge zum Präsidenten. Sebastian gab seine eigene Firmenbibliothek auf und fing an, das Problem in dem bekannten Python zu lösen. am Ende, wenn sie immer noch rot verbreiten, warum dann tun, was sie dir sagen? Aber was auch immer er benutzt: seinen eigenen Python-Tester oder Microsoft-Tester oder Apple oder Adobe - die Schrift blieb ein völliges Chaos. 488 nicht behebbare, nicht behebbare, konstruktive Fehler, die nicht behoben werden können.

Der Präsident lehnte es kategorisch ab, die Wahrheit zuzugeben. Er behauptete, es sei Sebastians Schuld, weil er die hervorragenden C ++ - Bibliotheken nicht benutzt.

Nachdem er alle Möglichkeiten ausgeschöpft hatte, überließ Sebastian den Schlüssel für die verrostete Garage auf dem Schreibtisch des Managers zusammen mit einem Kündigungsschreiben. Er verabschiedete sich von seinem hübschen Büro und seiner teuflischen Maschine, die für den Computer ausgestellt worden war. Er atmete tief ein, als er das letzte Mal den trostlosen Geruch der Haut spürte und ging, endlich und unwiderruflich.

Aus irgendeinem Grund bezweifelte er, dass er die Firma vermissen würde.

Sie können von einer solchen Gesundheitsversorgung krank werden.


[Original]

In jeder Branche gibt es Informationen, die zwischen inkompatiblen Systemen übertragen werden müssen. Wenn Sie das Leben eines Gerechten gelebt haben, dann waren diese Systeme einfach verschiedene Anwendungen auf derselben Plattform. Wenn Sie jedoch vom guten Weg abgewichen sind, wurden diese Systeme in verschiedenen Sprachen für verschiedene Plattformen geschrieben, die unter verschiedenen Betriebssystemen mit unterschiedlicher Bytereihenfolge ausgeführt werden. Stellen Sie sich vor jeder Java-basierte Anwendung in Safari unter einer beliebigen Version von Mac OS , die Sie mit jeder Version des kommunizieren wollen .NET unter einer beliebigen Version von Windows , die wiederum müssen mit jeder Version von kommunizieren COBOL mit EBCIDIC- Binärcode, der auf einem Großrechner ausgeführt wird.

Lange bevor jemand einen solchen Alptraum vorstellen konnte, haben wir gearbeitet von SGML , die degradiert in entwickelte sich der XML , die sein sollte trivial akzeptable Weise in Dokumentformat und Felder angeben auf allen Plattformen Parser zur Verfügung, so dass Informationen ausgetauscht werden können, ohne etwas anderes als eine DTD und / oder ein Schema für die Validierung und Analyse zu kennen. Wir hofften

nicht auf das Beste, um die Arbeit zu vereinfachen, sondern schrieben über die XML-Wrapper-Bibliothek.

Leider haben sie die Aufgabe nicht gemeistert.


In der Gesundheitsbranche haben einige Kinder, die mit Open Source arbeiten, ein (H) ealthcare (API) -Projekt oder HAPI erstellt , das im Wesentlichen ein objektorientierter Textnachrichten-Parser in der Gesundheitsbranche ist. Leider scheinen sie unter dem Syndrom gelitten zu haben, dass sie nicht wissen, wann sie aufhören sollen .

Anstatt einen generischen Parser zu implementieren, der einfach eine Zeichenfolge mit Trennzeichen oder eine Zeichenfolge mit festem Format in eine Liste von Textfeldwerten aufteilt, wird die neueste Version verwendetEs implementiert 1205 verschiedene Parser, von denen jeder eine eigene Datenstruktur auf hoher Ebene hat. Strukturen der obersten Ebene haben Dutzende von Unterstrukturen. Jeder Parser hat eine oder mehrere Methoden, um auf jedes Feld zuzugreifen. Ein Feld kann eine einzelne Instanz oder eine Liste von Instanzen sein. In diesem Fall muss programmgesteuert bestimmt werden, welche Zugriffsmethode verwendet werden soll.

Dies ist eine API mit ca. 15.000 Methodenaufrufen! Woran haben diese Entwickler gedacht?

Beispielsweise kann die Klasse: EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO null und mehr Produktserviceabschnitte enthalten . Daher beginne ich sofort, über ein Array oder eine Liste nachzudenken. Deshalb anstelle von so etwas:

    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
    List <EHC_E15_PRODUCT_SERVICE_SECTION> prodServices = info.getProductServices ();
    // iteriere

... wir müssen einiges davon tun:

    // Holen Sie sich die Unterstruktur
    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
    // Hole den eingebetteten Produkt-Service aus der Unterstruktur
    // ... wenn wir sicher sind, dass nur eine Nachricht enthalten ist:
    EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION ();
    // ... wenn wir nicht wissen, wie viele es sein werden:
    int n = infos.getPRODUCT_SERVICE_SECTIONReps ();
    für (int i = 0; i <n; i ++) {
        EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION (i);
        // benutze es
    }
    // ... oder du kannst sie einfach nehmen und iterieren
    List <EHC_E15_PRODUCT_SERVICE_SECTION> allSvcs = info.getPRODUCT_SERVICE_SECTIONAll ();

... und Sie müssen die gewünschte Methode aufrufen, sonst riskieren Sie eine Ausnahme. Wenn es jedoch viele Möglichkeiten gibt, eine einzelne Aufgabe über die API auszuführen, gibt es viele Möglichkeiten, sie im Code mithilfe der API auszuführen, was unweigerlich zu Problemen führt.

Man kann sagen: "Nun, alles ist nicht so schlimm" ; genug, um zu verwenden, was Sie brauchen. Dann stellen Sie jedoch fest, dass einige dieser Datenstrukturen in zehn oder mehr Ebenen aufgebaut sind, jede über Dutzende von Unterstrukturen und / oder Feldern verfügt und alle über mehrere Zugriffsmethoden verfügen. Ja, alle haben sehr lange Namen. Und dann merkt man, dass die Entwickler von HAPI es satt haben, Text zu tippen, und begann, Abkürzungen für das Ganze mit so eindeutigen Namen für Datenstrukturen wie LA1, ILT und PCR zu verwenden.

Die API versucht, nützlich zu sein: Wenn sie in dem von Ihnen angeforderten Feld nicht das Erwartete findet, löst sie eine Ausnahme aus und Sie müssen herausfinden, was schief gelaufen ist. Dies setzt natürlich voraus, dass Sie bereits wissen, was Ihnen im Datenstrom übermittelt wird.

Anonymous arbeitete im Gesundheitswesen und unterstützte die Bibliothek rund um HAPI. Er erhielt regelmäßig Aufträge (für die sie für mehrere Wochen vergeben wurden), indem er einfach ein zusätzliches Feld analysierte. Nachdem er viel Zeit mit dem Kauen der API-Dokumentationsbände verbracht hatte, schrieb er einen gemeinsamen Parser aus einer einzelnen Klasse von 300 Zeilen mit mehreren split-, substring-, parseDate- und parseInt-Werten als Ersatz für die gesamte Schnittstelle.

Danach dauerte das Hinzufügen eines neuen Feldes nicht länger als zehn Minuten.