Neugierige Perversionen aus der IT-Welt

Die Daily WTF sammelt seit 14 Jahren lustige, wilde und / oder traurige Geschichten aus der IT-Welt. Ich übersetzte mehrere Geschichten, die mir interessant erschienen. Alle Firmennamen und Namen wurden geändert.

Für 3.000 Meilen arbeiten


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

Vor vielen Jahrzehnten arbeitete das Verteidigungsunternehmen DefCon Inc für die US-Armee und versuchte, einen neuen Vertrag für die Erstellung einer im Kampf verwendeten Anwendung zu erhalten. Das Unternehmen wollte in seinem Vorschlag nachweisen, dass es über genügend Personal 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 Angebote studierte, sah eine Reihe neuer Mitarbeiter, die mit den erforderlichen Prozessen, Verfahren und Anforderungen völlig unbekannt waren, und übertrug den Vertrag auf ein anderes Unternehmen. Der Auftragnehmer seinerseits entließ all diese tausend Menschen.

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


Im Laufe von zwei Jahren wurde dies mehrmals wiederholt.

Nach alledem war dem Großteil des zur Einstellung verfügbaren Personals bereits der sehr kurze Einstellungsentlassungszyklus im Unternehmen bekannt, sodass der Auftragnehmer nur Neuankömmlinge anziehen konnte, die gerade ihren Abschluss an Bildungseinrichtungen gemacht hatten. Schließlich war ein Top-Manager beeindruckt von der Tatsache, dass all diese Leute, nur wegen des Schreibtisches, viel billiger waren als erfahrene Entwickler in den Mitarbeitern des Unternehmens, und diejenigen, die das Unternehmen anstellte, entlassen, um Verträge abzuschließen. Daher erließ 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 verdammt verärgert waren, konnte das Unternehmen seine fest angestellten Mitarbeiter aufstocken, ohne das Gehaltsbudget zu erhöhen. Sie konnte nur junge, unerfahrene Entwickler einstellen, um endlich einen Vertrag zu bekommen.

Leider hatten all diese jungen Entwickler nur sehr wenig Erfahrung und das Unternehmen hatte keine Leute mehr in den Gräben, die sie ausbilden konnten. Das Ergebnis ihres Zweijahresvertrags war daher dieses unzuverlässige Projekt, das oft abstürzte, sich unvorhersehbar verhielt und nicht geändert werden konnte. Solche Eigenschaften sind unerwünscht, wenn es sich um ein System handelt, das schießen und detonieren muss.

Irgendwann erkannte einer der leitenden Angestellten, was passiert war, zwang das Unternehmen, sich nicht mehr wie ein Elefant in einem Porzellanladen zu verhalten und hochbezahlte Berater einzustellen. Leider erinnerten sich hochbezahlte Berater gut an den Einstellungszyklus und wollten nichts mit der Organisation zu tun haben. Nach einiger Zeit musste das Unternehmen die Beschäftigungsbedingungen erheblich verbessern, bis sich schließlich mehrere erfahrene Mitarbeiter darauf einigten, eine Stelle 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: „Warten Sie ein bisschen, es gibt ein großes Loch in der Mitte dieses Projekts!“ Das Management antwortete, dass dieser Teil des Projekts klassifiziert wurde und nur von Personen mit Zugang zu Verschlusssachen und nur in einem Unternehmen in Kalifornien untersucht werden kann. Entsprechende Genehmigungen wurden angefordert und erhalten, wonach die erfahrenen Mitarbeiter für zwei Wochen in eine Einrichtung in Kalifornien geschickt wurden.

Bevor die Entwickler der Reise zustimmten, wollten sie wissen, wie sie nach dem Studium auf die Materialien zugreifen können. Schließlich ist der Zugang nur vor Ort in Kalifornien möglich, und alle Mitarbeiter leben und arbeiten in New Jersey. Ihnen wurde gesagt, dass sie die Details in Kalifornien erfahren würden.

Nun, sie flogen alle an die Westküste, checkten in Hotels ein und fuhren ins Büro.

In diesem Moment wurden sie über alle Probleme informiert, die angegangen werden müssen. Am Donnerstag, der zweiten Arbeitswoche, wurde entschieden, dass ungefähr zwei Jahre Arbeit erforderlich waren, um alle erforderlichen Upgrades durchzuführen. 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 die nächsten zwei Jahre in Kalifornien bleiben würden. Ab nächsten Montag.

Aber warte, sie hatten keine Gelegenheit, dies mit der Familie zu besprechen! Wie wirkt sich die Abwesenheit von 90% der Zeit eines Elternteils auf die Kinder aus? Wollen sie zwei Jahre in Hotels und Flughäfen leben? Warum zum Teufel stellte das Unternehmen keine Mitarbeiter vor Ort in Kalifornien ein, sondern in New Jersey?

Es stellte sich heraus, dass das Personal, das er anstellt, auch dort registriert sein muss, da sich der Auftragnehmer in New Jersey befindet. Wenn dies vor der Beschäftigung gemeldet worden wäre, hätten sich die meisten Mitarbeiter (wenn nicht alle) geweigert, zu arbeiten. Wenn sie es wüssten, würde keiner der Arbeiter in das Flugzeug steigen und nach Kalifornien fliegen, um sich mit dem Projekt vertraut zu machen.

Man kann nicht einmal sagen, dass der Rest der Arbeit für die Manager auf die Notwendigkeit von Opfern für das Unternehmen gerichtet war, und die Entwickler fragten sich: "Was zum Teufel?" Der Donnerstagabend war mit endlosen Anrufen nach Hause beschäftigt. Am Freitagmorgen kündigten alle Mitarbeiter und gingen zum Flughafen, um nach Hause zurückzukehren.

Vertreter der Armee verhielten sich würdevoll und waren mit der Tatsache einverstanden, dass die Menschen ihre Häuser und Familien zwei Jahre lang nicht verlassen wollen. Sie wurden jedoch viel schwieriger, wenn es darum ging, mit dem Auftragnehmer zu sprechen und seine Versprechen zu erfüllen, erfahrene Mitarbeiter am Arbeitsplatz zu haben.

Infolgedessen wurde der Vertrag mit dem Auftragnehmer gekündigt und als Ersatz für den neuen Vertrag eingestellt.

Fehlerfall


[Original]

Bild

Am ersten Tag des neuen Jobs war Sebastian nicht besonders begeistert. Er hatte schon viel gesehen und Gleichgültigkeit und Pessimismus gewonnen. Diese neue Arbeit hätte nicht anders sein dürfen: eine Menge nerviger Kollegen, schlecht durchdachte Anforderungen, alte Codebasen, voller Spaghetti-Code. Aber sie zahlte gut, und er hatte seine alte Gruppe satt, er hatte die gleichen vertrauten Gesichter satt. Deshalb bereitete er sich intern auf leicht neue Schattierungen der gleichen Büropolitik und trostlosen Aufgaben vor.

Er war nicht besonders verärgert, als er in der IT-Abteilung nach seinen Anmeldeinformationen suchte und das Summen und Klicken alter Packard Bell-Server hörte. Sebastian senkte einfach seine Anforderungen an einen funktionierenden Computer auf mehrere Ebenen und kehrte in sein neues Büro zurück. Ja, seine Position bedeutete sein eigenes Büro und die entsprechende Zahlung. Dafür konnte er sich mit vielen anderen Dingen abfinden.

Sein Login funktionierte beim ersten Versuch, was eine angenehme Überraschung war. Er erwartete Windows XP; Als Vista hochfuhr, war er sich nicht sicher, ob er sich über das neuere Betriebssystem freuen oder entsetzt sein sollte, dass es Vista war. Durch das Abschließen der Administratorrechte und das Trimmen der Benutzerkontensteuerung konnte er sogar für eine Weile so tun, als wäre es eine "Sieben". "Es wird etwas mehr brauchen, um mich zu erschrecken" , dachte er und startete Outlook.

Im Posteingang befand sich bereits eine E-Mail: ein paar Begrüßungsschreiben mit Informationen für neue Mitarbeiter sowie die erste Aufgabe seines Managers. Er war, gelinde gesagt, beeindruckt von der Effizienz der Aufgabenverteilung und öffnete einen Brief seines neuen Leiters.

Der erste Brief war ungefähr so:

Hallo Sebastian, willkommen in unserem perfekt geschliffenen Arbeitsumfeld. Alles ist darin richtig gemacht. Beim Erstellen von Projektdokumenten arbeiten Sie mit Bonk-Word (der webbasierten Dokumentationsanwendung von IBM). Denken Sie daran, Ihre Arbeit oft zu speichern! Wenn Bonk-Word abstürzt, müssen Sie einen Brief an die IT-Abteilung schreiben, um es neu zu starten.

Das Unternehmen erstellt eine Konstruktionsdokumentation. Schreiben Sie alles mit passiver Stimme, verwenden Sie Violett, um Kapitelüberschriften anzuzeigen, und Grün, um Abschnittsüberschriften anzuzeigen. Die Dokumente werden täglich um 9 Uhr morgens vom Präsidenten des Unternehmens überprüft. Seien Sie also darauf vorbereitet. Fehler in den Kopfzeilen werden zu einer schwarzen Markierung in Ihrer persönlichen Datei.

Entwerfen Sie zunächst eine Lösung für das Macintosh-Schriftartenproblem, die wir seit vier Jahren nicht mehr lösen konnten. Morgen um 9 Uhr morgens sollten Sie ein fertiges Projektdokument mit sechs Seiten haben. Vielen Dank.

"Sechs Seiten für morgen?" - Sebastian machte sich Sorgen. „Ich habe mich wohl zu früh über die Effizienz gefreut. Zumindest wird es nicht langweilig . “Er knackte mit den Fingerknöcheln, öffnete Bonk-Word und begann sich mit sogenannten Schriftproblemen zu befassen.

Das erste, was er herausfand, war, dass der Manager nicht über das häufige Sparen scherzte. Am Ende des Tages machte er mental Wetten: Was zuerst fallen wird - Bonk-Word oder Vista selbst. Beide stürzten nach etwa jeder halben Stunde ab. Aber die Abflugstatistik auf einem Blatt Papier zu halten, beruhigte Sebastian aus irgendeinem Grund. Es erinnerte ihn daran, dass etwas anderes auf der Welt funktionierte. Die einfachsten mathematischen Operationen waren nicht beeindruckend, aber zuverlässig. Regelmäßig. Stabil.

Vielleicht war Sebastian in diesem Büro einsam. Aber er war ruhig und getrennt. Obwohl die ständigen Einsätze ärgerlich waren, bewegte sich Sebastian immer noch vorwärts. Er machte eine Pause bei der Arbeit, um eine Vielzahl von Literatur zum Rendern von Schriftarten zu studieren, einschließlich der Postscript-Spezifikation, der dazugehörigen Literatur zur Verwendung und der Informationszentren im World Wide Web, um die Weisheit der besten Köpfe der Branche in einem vertrauten und praktischen Frage- und Antwortformat zu sammeln . In dem Dokument "Erstellen eines Python-Programms zum Rendern jedes Zeichens" wurde ausführlich beschrieben. Er verbrachte zwei Seiten damit, zu beschreiben, was man auf den Punkt bringen 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 Lederunterwäsche roch) und ging langsam zu seinem „freien Parkplatz“ (ein weiterer Vorteil, der diese Arbeit in seinen Augen rechtfertigte). Langsam - weil der Parkplatz vollständig durch Rost korrodiert war und der Beton vielerorts vollständig abfiel und die Bewehrung des Bodens und der Säulen freilegte.

Am nächsten Morgen, genau um 9:00 Uhr, war Sebastian im Büro seines Managers und wartete auf die erste Überprüfung des Projekts durch den Präsidenten des Unternehmens, der telefonisch anrief. Sebastian fühlte sich mit dem direkten Gespräch mit dem Präsidenten unwohl, da 60 Mitarbeiter im Unternehmen waren, aber er musste es ertragen.

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

Eine Stunde später kehrte der gedemütigte und erschöpfte Sebastian in sein Büro zurück. Die absurde, aber grausame Kritik, die er erhielt, klingelte immer noch in seinen Ohren. Nach Angaben des Präsidenten waren seine Abschnittsüberschriften kaum „grünlich“ und nicht grün, wie das Unternehmen verlangte, und die Überschriften der Kapitel waren unverzeihlich „rötlich“ anstelle des erwarteten Purpurs. Außerdem wurde ihm ausdrücklich gesagt, dass es „unmöglich“ sei, Schriftarten mit Python zu debuggen. Stattdessen wurde Sebastian beauftragt, in C ++ zu arbeiten und die „wunderbaren“ Softwarebibliotheken des Unternehmens zu verwenden. Sebastians Manager wartete auf den Anruf des Präsidenten und lobte das Dokument, sagte aber während des Schecks kein Wort und schaute untrennbar auf die Mauer an seinem Schreibtisch.

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

"Na dann", sagte er laut im leeren Büro. "Schauen 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 die „wunderbaren“ Bibliotheken genau in der richtigen Schriftart mit einem ideal genauen Farbton mit den richtigen Kapitelüberschriften und Abschnittsnamen eingegeben werden. Aber die Dokumentation ... war nicht. Es gab viele Designdokumente mit perfekten grünen und lila Farben. Sie beschrieben jedoch nur die Bibliotheksentwicklungsmethode und sagten nichts über ihre Verwendung aus.

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

Er erlebte Horror, aber es gab keine große Überraschung: Die Bibliotheken bestanden aus schlecht gestalteten Wrappern von String-Funktionen aus der Standardbibliothek.

Trotz des ständigen Debakels hielt Sebastian den Schlag. Er wurde täglich zu einer weiteren Runde verbaler Einschüchterung gerufen. Vier Jahre lang konnte das Unternehmen dieses Schriftproblem nicht bewältigen. Dennoch passte keiner der von ihm vorgeschlagenen Vorschläge zum Präsidenten. Sebastian verließ seine eigene Bibliothek der Firma und begann, das Problem im bekannten Python zu lösen. am Ende, wenn sie immer noch Fäulnis verbreiten, warum dann tun, was sie Ihnen sagen? Aber was auch immer er benutzte: sein eigener Tester in Python oder ein Tester von Microsoft, Apple oder Adobe - die Schrift blieb ein völliges Chaos. 488 unausrottbar, unverbesserlich, unlösbar durch Design-Patches Fehler.

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

Nachdem Sebastian alle Möglichkeiten ausgeschöpft hatte, ließ er den Schlüssel für die rostige Garage auf dem Schreibtisch des Managers zusammen mit einem Rücktrittsschreiben zurück. Er verabschiedete sich von seinem süßen Büro und der höllischen Schreibmaschine, die sie als Computer ausgegeben hatten. Er holte tief Luft, spürte zum letzten Mal den trostlosen Hautgeruch und ging völlig und unwiderruflich.

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

Sie können von dieser Art der Gesundheitsversorgung krank werden.


[Original]

In jeder Branche gibt es Informationen, die zwischen inkompatiblen Systemen übertragen werden müssen. Wenn Sie das Leben der Gerechten gelebt haben, waren diese Systeme nur verschiedene Anwendungen auf derselben Plattform. Wenn Sie jedoch vom guten Pfad abweichen, wurden diese Systeme in verschiedenen Sprachen für verschiedene Plattformen geschrieben, die auf verschiedenen Betriebssystemen mit unterschiedlicher Bytereihenfolge ausgeführt werden. Stellen Sie sich eine Java-Anwendung in Safari unter einer Version von Mac OS vor , die mit einer Version von .NET unter einer Version von Windows kommunizieren muss, die wiederum mit einer Version von COBOL mit kommunizieren muss binäre EBCIDIC, die auf einem beliebigen Mainframe ausgeführt wird.

Lange bevor sich jemand einen solchen Albtraum hätte vorstellen können, haben wir mit SGML gearbeitet , das sich verschlechtert und zu XML entwickelt hat. Dies sollte eine trivial akzeptable Methode sein, um das Format und die Felder des Dokuments mit dem auf allen Plattformen verfügbaren Parser anzugeben, damit Informationen ausgetauscht werden können. Ich kenne nur DTD- und / oder Validierungs- und Parsing- Schemata .

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

Leider haben sie die Aufgabe nicht gemeistert.


In der Gesundheitsbranche haben einige Copen-Source-Mitarbeiter das (H) ealthcare (API) -Projekt ( HAPI) erstellt , das im Wesentlichen ein objektorientierter SMS-Parser für die Gesundheitsbranche ist. Leider schienen sie unter dem Syndrom Ich weiß nicht, wann ich aufhören soll“ zu leiden.

Anstatt einen verallgemeinerten Parser zu implementieren, der einfach eine begrenzte Zeichenfolge oder eine Zeichenfolge mit festem Format in eine Liste von Textfeldwerten aufteilt, implementiert die neueste Version 1205 verschiedene Parser, von denen jeder seine eigene Datenstruktur auf hoher Ebene hat. Die Strukturen auf höchster Ebene haben Dutzende von Unterstrukturen. Jeder Parser verfügt über eine oder mehrere Zugriffsmethoden für jedes Feld. Ein Feld kann eine einzelne Instanz oder eine Liste von Instanzen sein. In diesem Fall muss programmgesteuert festgelegt werden, welche Zugriffsmethode verwendet werden soll.

Dies ist eine API mit ungefähr 15.000 Methodenaufrufen! Was dachten diese Entwickler überhaupt?

Beispielsweise kann die Klasse: EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO aus null oder mehr Produktservice- Abschnitten bestehen. Also denke ich sofort über eine Art Array oder Liste nach. Deshalb statt so etwas:

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

... wir müssen eines davon tun:

  // Holen Sie sich die Unterstruktur
     EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
	
     // Holen Sie sich den integrierten Produktservice aus der Unterstruktur

     // ... wenn wir sicher wissen, dass er nur eine Nachricht hat:
     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 dies
     }}

     // ... oder du kannst sie einfach greifen 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 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.

Sie können sagen: "Komm schon, alles ist nicht so schlimm" ; Verwenden Sie einfach das, was Sie brauchen. Dann stellen Sie jedoch fest, dass einige dieser Datenstrukturen in zehn oder mehr Ebenen eingebettet sind, jede Dutzende von Unterstrukturen und / oder Feldern aufweist und alle über mehrere Zugriffsmethoden verfügen. Außerdem haben alle sehr lange Namen.Und dann stellen Sie fest, dass die HAPI-Entwickler die Eingabe von Text satt haben und Datenstrukturen wie LA1, ILT und PCR für die Abkürzung verwenden.

Die API versucht nützlich zu sein: Wenn sie nicht die erwartete in dem Feld findet, dessen Analyse Sie anfordern, löst sie eine Ausnahme aus, und Sie müssen selbst herausfinden, was schief gelaufen ist. Dies bedeutet natürlich, dass Sie bereits wissen, was im Datenstrom an Sie übertragen wird.

Anonymarbeitete im Gesundheitswesen und unterstützte die Bibliothek rund um HAPI. Durch einfaches Parsen eines zusätzlichen Feldes wurden ihm regelmäßig Aufgaben übertragen (für die es mehrere Wochen dauerte). Nachdem er viel Zeit damit verbracht hatte, an API-Dokumentationsvolumes zu kauen, schrieb er einen gemeinsamen Parser aus einer Klasse von 300 Zeilen mit mehreren Split-, Teilzeichenfolgen-, parseDate- und parseInt-Elementen als Ersatz für die gesamte Schnittstelle.

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

Source: https://habr.com/ru/post/de431394/


All Articles