Curieuses perversions du monde informatique

Le site Web Daily WTF recueille des histoires drôles, sauvages et / ou tristes du monde informatique depuis 14 ans. J'ai traduit plusieurs histoires qui m'ont paru intéressantes. Tous les noms et noms d'entreprises ont été modifiés.

Pour travailler pendant 3000 miles


Une histoire vraie tirée de l'expérience personnelle de notre auteur Snoofle. [Original]

Il y a plusieurs décennies, l'entrepreneur en défense DefCon Inc a travaillé pour l'armée américaine et a tenté d'obtenir un nouveau contrat pour créer une sorte d'application utilisée au combat. L'entreprise voulait démontrer dans sa proposition qu'elle disposait de suffisamment de personnel pour mener à bien ce projet. Par conséquent, elle a embauché plus d'un millier de programmeurs divers, chefs de projet, gestionnaires, etc. Les militaires, qui ont étudié diverses offres commerciales, ont vu un tas de nouveaux employés qui ne connaissaient pas complètement les processus, procédures et exigences nécessaires, ils ont donc transféré le contrat à une autre entreprise. L'entrepreneur, pour sa part, a licencié ce millier de personnes.

Quelques mois plus tard, un autre contrat similaire a vu le jour. L'entreprise a de nouveau embauché un millier de personnes pour montrer qu'elle a du personnel. Quelques mois plus tard, le contrat a de nouveau été transféré à un autre entrepreneur et l'entreprise a de nouveau licencié le millier entier.


En deux ans, cela a été répété plusieurs fois.

Après tout cela, la majeure partie du personnel disponible à la location était déjà au courant du très court cycle d'embauche-licenciement dans l'entreprise, de sorte que le contractant ne pouvait attirer personne, à l'exception des nouveaux arrivants qui venaient de terminer leurs études dans des établissements d'enseignement. Enfin, un gestionnaire de haut niveau a été frappé par le fait que toutes ces personnes simplement à cause du bureau étaient beaucoup moins chères que les développeurs expérimentés du personnel de l'entreprise, et ceux que l'entreprise avait embauchés, licenciés pour des contrats. Il a donc ordonné que tout le personnel expérimenté de l'entreprise soit remplacé par de jeunes employés bon marché . Le processus a duré deux ans, mais il s'est quand même produit.

Maintenant que les coûts salariaux ont considérablement baissé et qu'ils ont fâché tous les développeurs de candidats expérimentés, l'entreprise pourrait augmenter son personnel permanent sans gonfler le budget salarial. Elle ne pouvait embaucher que de jeunes développeurs inexpérimentés pour finalement obtenir un contrat.

Malheureusement, tous ces jeunes développeurs avaient très peu d'expérience, et l'entreprise n'avait plus de personnel dans les tranchées pour les former. Par conséquent, le résultat de leur contrat de deux ans a été ce projet peu fiable, qui s'est souvent écrasé, s'est comporté de manière imprévisible et n'a pas pu être modifié. De telles propriétés ne sont pas souhaitables lorsqu'il s'agit d'un système qui doit tirer et exploser.

À un moment donné, l'un des cadres supérieurs a réalisé ce qui s'était passé, a forcé l'entreprise à cesser d'agir comme un éléphant dans un magasin de porcelaine et à embaucher des consultants très bien payés. Malheureusement, les consultants hautement rémunérés se souvenaient bien du cycle d'embauche-licenciement et ne voulaient rien avoir à faire avec l'organisation. Après un certain temps, l'entreprise a dû améliorer considérablement les conditions d'emploi, jusqu'à ce que plusieurs employés expérimentés acceptent finalement d'obtenir un emploi à temps plein. C'est arrivé au New Jersey.

Après que la direction ait affecté ces nouveaux employés au projet pour accélérer le travail, les nouveaux employés ont dit: «Attendez un peu, il y a un énorme trou au milieu de ce projet!» La direction a répondu que cette partie du projet était classée et ne pouvait être étudiée que par des personnes ayant accès à des informations classifiées et uniquement dans une entreprise en Californie. Des approbations appropriées ont été demandées et reçues, après quoi les employés expérimentés ont été envoyés pendant deux semaines dans un établissement en Californie.

Avant d'accepter le voyage, les développeurs ont voulu savoir comment ils pourraient accéder au matériel après avoir étudié. Après tout, l'accès n'est possible que sur place en Californie, et tous les employés vivent et travaillent dans le New Jersey. On leur a dit qu'ils apprendraient les détails en Californie.

Eh bien, ils se sont tous envolés pour la côte ouest, se sont rendus dans les hôtels et se sont rendus au bureau.

À ce moment, ils ont été informés de tous les problèmes à résoudre. Jeudi, deuxième semaine de travail, il a été décidé qu'environ deux ans de travail étaient nécessaires pour effectuer toutes les mises à niveau nécessaires. Les développeurs ont de nouveau demandé: "Comment allons-nous avoir accès aux documents du New Jersey?" Les gestionnaires ont répondu que tous les travaux devraient être effectués localement et qu'ils resteraient en Californie pendant les deux prochaines années. À partir de lundi prochain.

Mais attendez, ils n'ont pas eu l'occasion d'en discuter avec la famille! Comment l'absence de 90% du temps d'un des parents affectera-t-elle les enfants? Veulent-ils vivre dans des hôtels et des aéroports pendant deux ans? Pourquoi diable l'entreprise n'a-t-elle pas embauché des employés localement en Californie, mais dans le New Jersey?

Il s'est avéré que, puisque l'entrepreneur est situé dans le New Jersey, le personnel qu'il embauche doit également y être enregistré. Bien sûr, si cela avait été signalé avant l'emploi, la plupart des employés (sinon tous) auraient refusé de travailler. S'ils le savaient, aucun des travailleurs ne monterait à bord de l'avion et ne se rendrait en Californie pour se familiariser avec le projet.

Vous ne pouvez pas dire que le reste du travail pour les gestionnaires a été frotté sur le besoin de victimes pour l'entreprise, et les développeurs se demandaient: "Qu'est-ce qui se passe?" Jeudi soir était occupé avec des appels interminables à la maison. Vendredi matin, tous les employés ont démissionné et se sont rendus à l'aéroport pour rentrer chez eux.

Les représentants de l'armée se sont comportés avec dignité et se sont montrés favorables au fait que les gens ne veulent pas quitter leur domicile et leur famille pendant deux ans. Cependant, ils sont devenus beaucoup plus durs lorsqu'il s'agit de parler avec l'entrepreneur et de tenir ses promesses d'avoir du personnel expérimenté sur le lieu de travail.

En conséquence, le contrat avec l'entrepreneur a été résilié et embauché pour en remplacer un nouveau.

Cas d'échec


[Original]

image

Le premier jour de son nouvel emploi, Sebastian n'était pas particulièrement enthousiaste. Il avait déjà vu beaucoup de choses et gagné l'indifférence et le pessimisme. Ce nouveau travail n'aurait pas dû être différent: un tas de collègues ennuyeux, des exigences mal pensées, d'anciennes bases de code, pleines de code spaghetti. Mais elle a bien payé, et il était fatigué de son ancien groupe, il était fatigué des mêmes visages familiers. Par conséquent, il s'est préparé en interne pour des nuances légèrement nouvelles de la même politique de bureau et des tâches mornes.

Il n'était pas particulièrement contrarié quand il est allé au service informatique pour ses informations d'identification et a entendu les bourdonnements et les cliquetis des anciens serveurs Packard Bell. Sebastian a simplement abaissé sa barre d'exigences pour un ordinateur fonctionnel à plusieurs niveaux et est retourné à son nouveau bureau. Oui, sa position signifiait son propre bureau et le paiement correspondant. Pour cela, il pourrait accepter bien d'autres choses.

Sa connexion a fonctionné du premier coup, ce qui a été une agréable surprise. Il attendait Windows XP; lorsque Vista a démarré, il n'était pas sûr de se réjouir du nouveau système d'exploitation ou d'être horrifié que ce soit Vista. En complétant les privilèges d'administrateur et en réduisant l'UAC, il pouvait même prétendre pendant un certain temps qu'il s'agissait d'un «sept». «Il me faudra quelque chose de plus pour m'effrayer», a-t- il pensé et a lancé Outlook.

Il y avait déjà du courrier dans la boîte de réception: quelques lettres de bienvenue avec des informations pour les nouveaux employés, ainsi que la première tâche de son manager. Impressionné pour le moins par l'efficacité de l'attribution des tâches, il a ouvert une lettre de son nouveau chef.

La première lettre ressemblait à ceci:

Bonjour Sébastien, bienvenue dans notre environnement de travail parfaitement affiné. Tout y est fait correctement. Lors de la création de documents de projet, vous travaillerez avec Bonk-Word (l'application de documentation Web d'IBM). N'oubliez pas de sauvegarder votre travail souvent! Si Bonk-Word tombe en panne, vous devrez écrire une lettre au service informatique pour le redémarrer.

L'entreprise établit la documentation de conception. Écrivez tout d'une voix passive, utilisez le violet pour indiquer les titres de chapitre et le vert pour indiquer les titres de section. Les documents sont vérifiés quotidiennement par le président de la société à 9 heures du matin, alors préparez-vous à cela. Les erreurs dans les en-têtes deviendront une marque noire dans votre dossier personnel.

Commencez par concevoir une solution au problème des polices Macintosh que nous n'avons pas pu résoudre depuis quatre ans. Demain, à 9 heures du matin, vous devriez avoir un document de projet préparé de six pages. Je vous remercie

"Six pages pour demain?" - Sebastian inquiet. «Je suppose que je me suis réjoui de l'efficacité trop tôt. Eh bien, au moins, ce ne sera pas ennuyeux », a-t-il craqué.

La première chose qu'il a découverte est que le directeur ne plaisantait pas sur l'épargne fréquente. À la fin de la journée, il a mentalement fait des paris: ce qui va tomber en premier - Bonk-Word ou Vista lui-même. Les deux se sont écrasés après environ toutes les demi-heures. Mais garder les statistiques des départs sur un morceau de papier rassura Sebastian pour une raison quelconque. Cela lui rappelait: quelque chose d'autre fonctionnait dans le monde. Les opérations mathématiques les plus simples n'étaient pas impressionnantes, mais elles étaient fiables. Régulier. Stable.

Peut-être que Sebastian était seul dans ce bureau. Mais il était calme et séparé. Bien que les sorties constantes fussent agaçantes, Sebastian continua d'avancer. Il s'est arrêté au travail pour étudier une variété de littérature sur le rendu des polices, y compris la spécification Postscript, la documentation d'accompagnement sur la façon de l'utiliser et les centres d'information sur le World Wide Web, conçus pour recueillir la sagesse des meilleurs esprits de l'industrie dans un format de questions et réponses familier et pratique. . Il a largement décrit dans le document "la création d'un programme Python pour rendre chaque personnage." Il a passé deux pages à décrire ce qui pourrait être dit en un mot.

"S'ils ont besoin de six pages, ils obtiendront six pages", pensa Sebastian.

Le premier jour s'est avéré étrange, mais Sebastian a vu qu'il pouvait le supporter pendant au moins plusieurs années. Il a terminé le travail, a quitté le bâtiment (qui sentait étrangement les vieux sous-vêtements en cuir) et s'est lentement dirigé vers sa «place de parking gratuite» (un autre avantage justifiant ce travail à ses yeux). Lentement - parce que le parking était complètement corrodé par la rouille et que, dans de nombreux endroits, le béton était tombé complètement, exposant le renforcement du sol et des colonnes.

Le lendemain matin, à exactement 9h00, Sebastian était dans le bureau de son manager, attendant la première vérification du projet par le président de l'entreprise, qui a appelé par téléphone. Sebastian se sentait mal à l'aise avec la conversation avec le président directement, étant donné qu'il y avait soixante employés dans l'entreprise, mais il devait le supporter.

«J'ai fait comme demandé et dans la bonne quantité. Très probablement, ce n'est qu'une formalité, après quoi je peux me mettre au travail. »

Une heure plus tard, humilié et épuisé, Sebastian retourna dans son bureau. Les critiques absurdes mais cruelles qu'il a reçues résonnaient encore à ses oreilles. Selon le président, ses titres de section n'étaient guère «verdâtres», pas verts, comme le demandait la société, et les titres des chapitres étaient impardonnablement «rougeâtres» au lieu du violet attendu. De plus, on lui a explicitement dit qu'il était «impossible» de déboguer des polices à l'aide de Python. Au lieu de cela, Sebastian a reçu l'ordre de travailler en C ++ et d'utiliser les «merveilleuses» bibliothèques de logiciels de l'entreprise. En attendant l'appel du président, le manager de Sebastian a fait l'éloge du document, mais n'a pas dit un mot lors du contrôle, regardant inévitablement le mur de briques de son bureau.

Sebastian ferma la porte du bureau, se fermant au reste de l'entreprise. Il s'assit sur sa luxueuse chaise en cuir et regarda l'écran d'un ordinateur qui fonctionnait à peine. Il a rouvert son document puis a redémarré la machine car Vista a décidé de s'envoler. Lorsque l'ordinateur a redémarré, il a vérifié son compte bancaire, pensé aux versements hypothécaires et serré les dents.

"Eh bien," dit-il à haute voix dans le bureau vide. "Jetez un œil à ces bibliothèques."

La première chose qu'il a commencé à chercher était la documentation. Naturellement, dans une telle entreprise obsédée par les documents, la documentation pour les «merveilleuses» bibliothèques doit être typée avec précision dans la police correcte avec une nuance idéalement précise, avec les titres de chapitre et les noms de section corrects. Mais la documentation ... ne l'était pas. Il y avait beaucoup de documents de conception avec des couleurs vertes et violettes parfaites. Mais ils n'ont décrit que la méthodologie de développement de la bibliothèque et n'ont rien dit sur son utilisation.

"Suis-je en train de perdre la tête?" Sebastian s'est demandé quand la voiture a redémarré pour la troisième fois. "Peut-être que le code est auto-documenté ..."

Il a connu l'horreur, mais il n'y a pas eu beaucoup de surprise: les bibliothèques étaient constituées d'emballages mal conçus de fonctions de chaîne de la bibliothèque standard.

Malgré la débâcle constante, Sebastian a tenu le coup. Il a été appelé quotidiennement pour une nouvelle série d'intimidation verbale. Pendant quatre ans, la société n'a pas pu faire face à ce problème de police; néanmoins, aucune de ses propositions ne convenait au président. Sebastian a abandonné sa propre bibliothèque de l'entreprise, commençant à résoudre le problème dans le Python bien connu; à la fin, s'ils continuent de répandre la pourriture, alors pourquoi faire ce qu'ils vous disent? Mais quoi qu'il ait utilisé: son propre testeur en Python, ou un testeur de Microsoft, ou Apple, ou Adobe - la police est restée un chaos complet. 488 inévitables, incorrigibles, insolubles par conception, corrige les erreurs.

Le président a catégoriquement refusé d'admettre la vérité. Il a affirmé que c'était la faute de Sebastian, car il n'utilisait pas les excellentes bibliothèques C ++.

Après avoir épuisé toutes les options, Sebastian a laissé la clé du garage rouillé sur le bureau du directeur avec une lettre de démission. Il a dit au revoir à son doux bureau et à la machine à écrire infernale qu'ils ont donnée comme ordinateur. Il prit une profonde inspiration, sentant l'odeur de peau morne pour la dernière fois et partit, complètement et irrévocablement.

Pour une raison quelconque, il doutait que l'entreprise lui manquerait.

Vous pouvez tomber malade de ce type de soins de santé


[Original]

Dans toute industrie, des informations doivent être transférées entre des systèmes incompatibles. Si vous avez vécu la vie des justes, alors ces systèmes n'étaient que des applications différentes sur la même plate-forme. Cependant, si vous vous êtes écarté du bon chemin, ces systèmes ont été écrits dans différentes langues pour différentes plates-formes exécutées sur différents systèmes d'exploitation avec un ordre d'octets différent. Imaginez une application Java dans Safari sous une version de Mac OS , qui doit communiquer avec une version de .NET sous une version de Windows , qui, à son tour, doit communiquer avec une version de COBOL avec EBCIDIC binaire exécuté sur n'importe quel ordinateur central.

Bien avant que quiconque puisse imaginer un tel cauchemar, nous avons travaillé avec SGML qui s'est dégradé et a évolué en XML , ce qui devrait être un moyen trivial acceptable de spécifier le format et les champs contenus dans le document avec l'analyseur disponible sur toutes les plateformes, afin que les informations puissent être échangées, Ne connaître que la DTD et / ou les schémas de validation et d'analyse.

N'espérant pas le meilleur, pour simplifier le travail, nous avons écrit au-dessus de la bibliothèque de wrapper XML.

Malheureusement, ils n'ont pas fait face à la tâche.


Dans l'industrie des soins de santé, certains gars de source de copen ont créé le projet (H) ealthcare (API), ou HAPI , qui est essentiellement un analyseur de messagerie texte orienté objet pour l'industrie des soins de santé. Malheureusement, ils semblaient souffrir du syndrome «je ne sais pas quand arrêter» .

Au lieu d'implémenter un analyseur généralisé qui casse simplement une chaîne délimitée ou une chaîne de format fixe en une liste de valeurs de champ de texte, la dernière version implémente 1205 analyseurs différents, chacun ayant sa propre structure de données de haut niveau. Les structures de plus haut niveau ont des dizaines de sous-structures. Chaque analyseur possède une ou plusieurs méthodes d'accès pour chaque champ. Un champ peut être une seule instance ou une liste d'instances, auquel cas il est nécessaire de déterminer par programme la méthode d'accès à utiliser.

Il s'agit d'une API avec environ 15 mille appels de méthode! À quoi pensaient ces développeurs?

Par exemple, la classe: EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO peut avoir de zéro ou plusieurs sections de service produit . Je commence donc immédiatement à penser à une sorte de tableau ou de liste. Par conséquent, au lieu de quelque chose comme ça:

  EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
     List <EHC_E15_PRODUCT_SERVICE_SECTION> prodServices = info.getProductServices ();
     // itérer

... nous devons faire l'une des choses suivantes:

  // Récupère la sous-structure
     EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
	
     // Obtenez le service produit intégré de la sous-structure

     // ... si nous savons avec certitude qu'il n'a qu'un seul message:
     EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION ();
	
     // ... si nous ne savons pas combien il y en aura:
     int n = infos.getPRODUCT_SERVICE_SECTIONReps ();
     pour (int i = 0; i <n; i ++) {
         EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION (i);
         // utilise ceci
     }

     // ... ou vous pouvez simplement les saisir et répéter
     Liste <EHC_E15_PRODUCT_SERVICE_SECTION> allSvcs = info.getPRODUCT_SERVICE_SECTIONAll (); 

... et vous devez appeler la méthode souhaitée, sinon vous risquez d'obtenir une exception. Mais s'il existe de nombreuses façons d'effectuer une tâche via l'API, il existe de nombreuses façons de l'exécuter dans le code à l'aide de l'API, ce qui entraîne inévitablement des problèmes.

Vous pouvez dire: «Allez, tout n'est pas si mal» ; utilisez simplement ce dont vous avez besoin. Mais alors vous vous rendez compte que certaines de ces structures de données sont intégrées à dix niveaux ou plus de profondeur, chacune a des dizaines de sous-structures et / ou champs, et toutes ont plusieurs méthodes d'accès. De plus, tous ont des noms vraiment longs.Et puis vous vous rendez compte que les développeurs HAPI sont fatigués de taper du texte et ont commencé à utiliser des structures de données telles que LA1, ILT et PCR pour l'abréviation.

L'API essaie d'être utile: si elle ne trouve pas celle attendue dans le champ dont vous demandez l'analyse, alors elle lève une exception, et vous devez déterminer ce qui s'est mal passé par vous-même. Bien sûr, cela implique que vous savez déjà ce qui vous est transmis dans le flux de données.

Anonymetravaillé dans les soins de santé et soutenu la bibliothèque enroulée autour de HAPI. On lui a régulièrement confié des tâches (pour lesquelles il a fallu plusieurs semaines) en analysant simplement un champ supplémentaire. Après avoir passé beaucoup de temps à mâcher les volumes de documentation de l'API, il a écrit un analyseur commun d'une classe de 300 lignes avec plusieurs divisions, sous-chaînes, parseDate et parseInt, en remplacement de toute l'interface.

Après cela, l'ajout d'un nouveau champ n'a pas pris plus de dix minutes.

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


All Articles