Je travaille comme agent / gestionnaire de location pour une entreprise de location de voitures qui fonctionne sur un système de location qui a été écrit en 1972. J'ai décidé qu'il était peut-être temps de faire une mise à jour. Pour un peu de contexte, voici un bref exemple de la folie que nous devons affronter quotidiennement avec ce programme:
Un agent de location doit se rappeler que l'impression sur un écran utilise "MXC" dans le champ ACT (tout est basé sur des codes courts), ce qui signifie perplexe pour "affichage MaXimum sur un contrat", tandis que sur un autre, il nécessite PR (pour PRint) dans le champ ACTION, mais plusieurs écrans utilisent un Y dans le champ PT (pour PrinT), encore un autre écran utilise Y dans le champ PRT (pour PRinT), un autre écran oblige l'utilisateur à appuyer sur Entrée (mais pas sur l'entrée à côté de la lettres, car il s'agit d'un nouveau caractère de ligne, ce doit être l'entrée sur le pavé numérique) puis F8, un écran différent mais lié nécessite simplement F8, certains écrans ont un champ étiqueté PRT, qui devrait être pour PRinT, mais le champ en fait ne fait rien et l'impression se fait automatiquement après avoir parcouru plusieurs invites, et encore plus d'écrans ont un champ intitulé IMPRIMER O / N,qui par défaut est insensé à Y pour les opérations dans lesquelles un autre emplacement fournit déjà des documents et à N pour les opérations dans lesquelles un autre concessionnaire aura besoin de documents.
J'ai décidé que je pouvais faire un meilleur travail que cela, alors j'ai décidé de contacter la personne dans l'entreprise qui prendrait la décision de mettre à jour cela. Je parviens finalement au VP de l'informatique, qui est en charge de ce programme. Je reçois un peu d'informations de lui et j'apprends que mon entreprise de location de voitures a son programme de location écrit dans l'assembleur d'IBM IBM avec un peu de COBOL mélangé. Il dit qu'il n'y a pas de postes ouverts en ce moment, mais que je devrais envoyez-lui mon curriculum vitae de toute façon (au cas où quelque chose s'ouvre).
Cela m'amène à mes questions.
Le premier est technique. Avec l'idée d'améliorer la maintenabilité à l'avenir, ma pensée est de la réécrire dans un langage de niveau supérieur au langage d'assemblage. Mon domaine d'expérience est en C ++, c'est donc le choix évident pour moi. La société a un besoin urgent d'un moyen plus facile de mettre à jour le programme, car j'ai récemment lu un article dans lequel l'homme à qui j'ai parlé aurait déclaré que l'équipe avait travaillé dur, et ils sont fiers d'annoncer que le programme prend désormais en charge 5 - codes de localisation à chiffres (au lieu de 4) et numéros de voiture à 8 chiffres (au lieu de 7). Ma philosophie sur les mises à jour, même dans des situations aussi dramatiques, est conforme à celle de Joel: http://www.joelonsoftware.com/articles/fog0000000069.html en bref, les réécritures devraient être incrémentielles, plutôt que de jeter tout ce qu'il y avait avant et recommencer à zéro.
Existe-t-il un moyen simple d'intégrer IBM Assembly à C ++, et si oui, comment dois-je procéder? Je connais vaguement le mot-clé asm, mais je ne sais pas s'il est préférable de l'utiliser ou de faire autre chose. Un tel plan est-il mal avisé? Je fais la plupart de mon travail sur Linux en utilisant g ++ et GNU make, donc les réponses spécifiques à cela sont les bienvenues, mais certainement pas requises (car je n'ai aucune idée de quel type de système de construction ils n'ont pas, mais je soupçonne presque aucun).
La deuxième question est plus politique. Comment dois-je faire pour persuader cette entreprise qu'elle doit faire le changement? Les économies théoriques sont énormes (sur la base de mes estimations, la société gaspille un million de dollars supplémentaires par an, juste sur l'augmentation des coûts de formation pour apprendre à interagir avec le programme), mais les changements que je propose mettraient probablement tous les les programmeurs actuels sans emploi, s'ils sont adoptés, il y a donc une grande résistance structurelle au changement.
edit: je devrais expliquer pourquoi ma modification de ce que l'entreprise a déjà semble être la meilleure solution pour moi. Je suis toujours ouvert à d'autres suggestions, car il s'agit cependant d'un monstre de programme. Je n'ai jamais eu de travail de programmation auparavant, alors corrigez-moi toute analyse incorrecte que je pourrais donner.
Tout d'abord, il y a la solution standard.
D'après mes entretiens avec quelques gestionnaires de niveau intermédiaire à propos de ce genre de chose, l'une des principales préoccupations liées au passage à un nouveau système est le grand nombre d'employés fidèles qui travaillent dans l'entreprise depuis des décennies et qui sont à l'aise avec le système à l'heure actuelle. . Si j'ai la possibilité de modifier ce que nous avons, je pourrais maintenir l'interface actuelle dans une sorte de «mode de compatibilité». Les utilisateurs doivent déjà se connecter pour utiliser le système actuel, donc je pourrais ajouter la possibilité d'activer un paramètre lorsque les utilisateurs se connectent pour la première fois (après avoir effectué cette modification), où ils ont la possibilité d'utiliser soit le interface «classique» ou «nouvelle» interface. Il n'y a aucun moyen que je trouve une solution standard qui permet cela,
Mon entreprise possède également les logiciels que nous utilisons; nous ne l'autorisons pas. Cela signifie que la direction à laquelle je parle actuellement sont les mêmes personnes qui pourraient en fait m'autoriser à effectuer un changement. Avec une solution tierce, je devrais obtenir l'approbation de mon entreprise en plus d'obtenir tous les droits nécessaires de la société qui a développé le produit que nous utilisons, ce qui ajoute un obstacle supplémentaire. Cela nécessiterait également de convaincre la société de renoncer à «son» produit et de prendre un autre produit, ce qui semble être un obstacle plus important que d'essayer de mettre à jour ce que nous avons, mais je peux très bien me tromper sur cette question.
Enfin, en regardant vers l'avenir, je ne veux pas seulement améliorer l'interface utilisateur et corriger quelques bugs. Après avoir mis à jour ces problèmes «urgents», j'espérais mettre à jour le fonctionnement fondamental de l'entreprise en ce qui concerne la technologie. Après avoir passé un à deux ans sur ce genre de problèmes, mon plan était de revenir à la direction et de proposer des changements plus spectaculaires. Il existe de nombreuses façons dont l'entreprise fonctionne qui pourraient être fondamentalement améliorées par une technologie qu'elle n'utilise tout simplement pas en ce moment. Par exemple, chaque région fonctionne à peu près de la même manière. L'aéroport principal local est la plaque tournante centrale pour la distribution des voitures. Ils sont principalement envoyés au besoin. Cependant, l'aéroport est utilisé comme base d'attache pour toutes les opérations. Ils enverront deux personnes dans une voiture chez moi pour récupérer une voiture dont nous n'avons pas besoin, puis retournez à l'aéroport avec la voiture dans laquelle ils sont arrivés, plus ce qu'ils ramènent (nous sommes à 32 miles de l'aéroport). Ensuite, ils viendront à l'emplacement à 5 miles de nous dans deux voitures pour déposer l'un d'eux, puis retourneront dans leur autre voiture à l'aéroport. Ils le font même si la voiture que nous avons renvoyée est le même type de voiture dont ils ont besoin près de chez nous. Cela fait maintenant environ deux ans que je travaille dans l'entreprise, et il me semble qu'ils s'en écartent dans les situations d'urgence les plus extrêmes de la pénurie de voitures (donc environ trois fois). Je remplacerais les 4 personnes travaillant dans chaque région par un système de planification automatisé qui détermine quelles voitures vont où et j'essaie de trouver le chemin qui nécessite le moins de temps + miles + conducteurs pour livrer toutes les voitures là où elles doivent être, en tant que exemple des correctifs de niveau supérieur que j'espère ajouter un jour.
Cependant, avant de me sentir à l'aise de proposer tout cela, je pense qu'il serait utile de se familiariser avec l'entreprise et la base de code en effectuant des tâches plus petites, comme la mise à jour de l'interface. Des solutions comme l'externalisation ou autre supprimeraient cette possibilité.
if (m_newInterface)
code spaghetti a rapidement commencé à apparaître partout dans la base de code. Le découplage et le refactoring ont pris suffisamment de temps pour que, lorsque cela a été fait, la plupart des utilisateurs aient déjà migré vers la nouvelle interface (pensez plusieurs années).