J'entends souvent des collègues se dire: "C'est un piratage horrible, horrible."
Ce que je peux en déduire, c'est que ce n'est pas bon. Quand je leur ai demandé si cela fonctionnait, ils ont répondu "oui, mais ce n'est pas bon". Cela signifie-t-il que ce n'est pas une bonne solution? En quoi une solution est-elle mauvaise si cela fonctionne? Est-ce dû aux bonnes pratiques? Ou pas maintenable? Utilisez-vous un effet secondaire du code dans votre solution?
C'est intéressant pour moi quand quelque chose est classé comme un hack. Comment pouvez-vous l'identifier?
terminology
dustyprogrammer
la source
la source
+
de singe pour diviser en fonction d'heuristiques.Réponses:
Il s'agit d'appliquer un pansement temporaire sur une grande plaie béante. C'est corrigé pour l'instant, mais cela posera encore plus de problèmes plus tard.
Un exemple que j'ai récemment vu: Vous voulez qu'une personne nommée
"Jim"
apparaisse toujours en premier dans une liste alphabétique. Pour le résoudre rapidement, vous le renommez" Jim"
. C'est un hack qui va sûrement revenir te mordre plus tard.la source
Chaque décision d’ingénierie constitue un compromis entre les coûts et les retards immédiats et les coûts et la dette technique qui en résultent.
Un hack est une situation où le premier est préféré tout en acceptant le second en conséquence.
Les développeurs inexpérimentés (en partie à cause du fonctionnement du système de formation en ingénierie) se concentrent sur les premiers et ne possèdent pas suffisamment d'expérience pour vraiment comprendre ou estimer les seconds.
Les développeurs expérimentés le font, mais pour diverses raisons (beaucoup légitimes) choisissent le premier.
Le terme piratage implique presque toujours une intention de résoudre temporairement un problème et de le "résoudre immédiatement après", mais les développeurs expérimentés savent que les éléments les plus permanents du code sont des piratages temporaires.
la source
Considère ceci
Le deuxième exemple, cependant, pourrait être un hack utilisé en raison de l’ignorance d’une meilleure pratique ou d’une hypothèse qui
/1
semblerait plus simple à l’époque ou d’un bogue dans une bibliothèque qui rendait le/1
travail correctement.Les hacks sont du code "opportun". Il y a
troisquatre causes.Ignorance des principes de conception appropriés. (c.-à-d. principes SOLID)
Arrogance (c.-à-d. Hypothèses erronées) sur une construction d'API ou de langage.
Bogues réels qui ne sont pas résolus mais qui sont résolus.
La direction passe à de bonnes hypothèses de conception et de correction. Le "budget" est une justification commune, mais il s’agit essentiellement de l’une des trois raisons susmentionnées (ignorance, arrogance ou erreur) ayant une cause fondamentale non technique.
C'est le but. Le hack est basé sur l'ignorance, des bugs ou des suppositions.
Cela peut être un exemple d'ignorance ou une fausse hypothèse.
la source
Hack dans le contexte de la programmation serait équivalent à réparer quelque chose avec du canard ou du bubble gum.
Le piratage implique très souvent l'utilisation de fonctionnalités non documentées et non prises en charge, qui pourraient changer à l'avenir en cassant votre code. Ils peuvent également impliquer des valeurs codées en dur.
Le piratage peut aussi généralement être un travail temporaire dans le code en utilisant une bibliothèque / service, au lieu de résoudre le problème sous-jacent. Si plus tard vous échappez, le piratage pourrait être le seul moyen de régler le problème.
la source
Le terme est parfois utilisé avec la connotation opposée, comme dans un "hack brillant". Juste parce qu'il est beaucoup plus courant de faire des erreurs que de faire quelque chose de brillant, il est beaucoup plus courant d'entendre parler de piratages horribles que de piratages brillants, mais j'ai entendu dire que le terme était utilisé dans les deux sens.
"Pirater" utilisé dans le sens positif signifie fondamentalement une solution élégante qui résout le problème de manière inattendue et particulièrement intelligente. Les significations négatives et positives sont en réalité assez proches, car un hack brillant implique souvent de tirer parti d'un aspect non intentionnel de la technologie.
la source
Une solution qui fonctionne actuellement mais qui posera probablement des problèmes à long terme.
Exemple: vous devez générer un document HTML en renseignant certaines valeurs de manière dynamique. Pour ce faire, vous devez utiliser l'un des outils conçus à cet effet, tels que Freemarker, XSLT ou JSP. Mais vous ne pouvez utiliser aucun de ceux-ci, ou vous ne pouvez pas être dérangé de le faire correctement, alors vous écrivez quelque chose comme ceci:
la source
Un hack est une solution ingénieuse à un problème, qui repose souvent sur une réflexion originale et tire parti de faits inattendus sur l'environnement. Il existe un dicton selon lequel les téléspectateurs conviennent que c'est génial, mais ne savent pas si c'est merveilleux ou horrible. C'est le genre de chose que vous ne voulez pas dans vos correctifs de maintenance.
Un hack qui corrige un problème dépendra très probablement des détails de l'environnement, des fonctionnalités non documentées d'un outil, ou de quelque chose comme ça. Ce sera probablement une solution fragile, qui fonctionne maintenant mais qui se brise probablement lorsque quelque chose change. Il peut être difficile de comprendre son fonctionnement, et tout programmeur de maintenance déteste le code difficile à comprendre. Cela peut avoir des effets secondaires qui ne nuisent à rien pour le moment, mais qui poseront des problèmes avec des morceaux de code parfaitement bons à une certaine distance dans le futur, et cela peut être un cauchemar à gérer.
la source
Le mot bidouille est mal utilisé. Si vous voulez vraiment avoir un peu d'histoire, vous pouvez le faire sur Wikipédia. Un hack est un mot pour décrire le processus consistant à peaufiner des choses pour faire quelque chose qu'elles n'étaient pas censées faire. Dans le contexte du génie électrique, c'est bon. Il existe une meilleure description sur Wikipedia à ce sujet.
Maintenant, dans le contexte de l'informatique. Un hack est généralement mauvais. Oui, cela fonctionne, mais cela signifie généralement que le programmeur a écrit un morceau de code ambigu qui ne respecte pas la conception du logiciel et qui déroutera tout programmeur qui doit lire ce code. Bien sûr, le temps passé par les programmeurs coûte cher. En tant que gestionnaire, vous souhaitez donc disposer du logiciel le plus facilement maintenable. La même chose est valable pour les programmeurs. En outre, les hacks ont tendance à casser quelque chose d'autre, dans le logiciel.
C'est un appel de jugement pour accepter le piratage ou non. Au moins, vous voulez que l’ingénieur logiciel principal approuve le piratage, car il a plus d’expérience et est capable de prendre une décision plus éclairée. Vous ne voulez certainement pas que les jeunes garçons prennent des décisions concernant l’acceptation de piratages. Ils peuvent en proposer un et discuter avec les cadres supérieurs de la question de savoir si les avantages en valent la peine.
la source
C'est un hack, comme on le trouve sur thereifixedit.com .
En fait, tout ce qui se trouve sur ce site est un hack.
Les hackers sont des utilisations ingénieuses et audacieuses de certaines choses hors de leur contexte.
La beauté d'un hack réside dans le fait que vous avez un problème donné et des outils qui n'ont jamais été conçus pour le résoudre, mais que vous résolvez le problème uniquement avec ces outils (au lieu d'en obtenir les bons). Ils sont intelligents, rapides et amusants. L'inconvénient est que les résultats sont souvent fragiles et dangereux à utiliser pour les étrangers.
Je veux dire, si vous aimez résoudre vos problèmes comme dans l'image, il n'y a pas de problème. Le problème survient lorsque vous résolvez les problèmes d’autres personnes comme celui-ci. Dans ce cas, ils seraient probablement électrocutés, brûlés ou quelque chose du genre.
En développement logiciel, vous voulez que votre code puisse être manipulé par des tiers (y compris votre avenir, vous) sans l’équivalent d’une blessure mortelle. Comme le dit Dijkstra:
Et les hacks sont parmi les astuces les plus intelligentes.
Les hackers sont des bombes à retardement quelque part dans votre code, parce que les plus communes sont basées sur trop d'hypothèses ("il suffit de le faire" est préférable au découplage approprié). Dès que ces hypothèses ne tiennent plus, tout votre système peut tomber en panne sans que vous ayez la moindre idée de ce qui s'est passé.
la source
Le terme n’est pas très précis, mais il fait probablement référence à une solution simple et rapide à un problème difficile à résoudre correctement. La solution en question fonctionne probablement, mais ce n'est probablement pas une très bonne implémentation, peut-être des bugs subtils, peut-être quelques petits bugs connus , et devraient être refaits plus tard, si le temps le permet. Je pense que ce que vous entendez appelé "bidouille" est aussi parfois appelé " kludge ".
Je vois souvent des piratages se produire lorsqu'il existe des contraintes de temps très serrées pour terminer une tâche, et qu'une solution de piratage est mise en œuvre car elle fonctionne "juste assez" pour passer le contrôle qualité, dans l'espoir que cela puisse être corrigé ultérieurement. Malheureusement, cette correction / nettoyage ultérieur ne se produit pas toujours :(
la source
Je passe beaucoup de temps en tant que développeur front-end, alors ma définition du hack est la suivante:
L’environnement peut être votre cadre, votre navigateur Web, votre base de données, votre guichet automatique bancaire (guichet automatique), votre procès. Tout "système de règles", dans lequel vous connaissez une boucle et l'exploitez pour résoudre un problème.
la source
Un hack est généralement un code qui fournit apparemment le résultat souhaité, mais de manière sous-optimale.
Il utilise généralement une fonction de langage / bibliothèque non documentée ou obscure d’une manière qui n’était pas voulue par son auteur et qui a donc brouillé l’intention.
Il est parfois fait pour contourner un bogue de langage ou de bibliothèque, mais dans la plupart des cas, la cause principale est généralement l’ignorance;
Les choses qui sont faites de manière inefficace, généralement dans l'espace et dans le temps, mais produisent finalement le résultat souhaité, mais à un coût et avec des cas extrêmes indéterminables sans testabilité ni maintenabilité. Habituellement découlant d'un manque de compréhension fondamentale de la logique ou des idiomes de langage. Voir aussi "à la dure".
Habituellement, le code est quelque chose que quelqu'un avec l'expérience appropriée ne l'aurait même pas envisagé, ou devrait réfléchir longuement pour le rendre aussi compliqué et inefficace que le piratage qu'il a découvert.
Exemples
Le correctif de Vista
Validité de la validation par email
Unités de logiciel
Hash non déterministe
la source
Un pneu chauve fonctionne, mais personne ne l’appelle une solution idéale à une crevaison. Cela pourrait créer des problèmes plus graves en bout de ligne.
Typiquement, je considérerais un hack comme une solution rapide et sale à un problème immédiat. En règle générale, il peut ne pas être conforme aux pratiques de programmation habituelles dans un magasin de programmation (par exemple, utiliser beaucoup de codage en dur). C'est peut-être une petite solution.
Une des principales raisons pour lesquelles il est mauvais est que a) il peut entraîner des résultats imprévisibles b) il peut ne pas correspondre à la conception d'origine du code en question, ce qui entraînera des problèmes de maintenance. D'après mon expérience, les hacks sont généralement très mal documentés.
la source
Une courte définition que j'ai entendue et que je respecte maintenant:
"Une solution à un symptôme qui ne résout pas complètement le problème dans tous les cas"
Un code laid peut ne pas être un hack. L’exemple 2 + 2 d’une autre réponse n’est pas un hack, c’est une solution de code laide et mauvais du point de vue de la compréhension du code, mais il produit la solution correcte dans tous les cas. Pensez à une équation factorisée en mathématiques - le comportement / la relation est identique et correct dans les deux versions, mais la forme est différente. Hmm, factorisez une équation, refactorez une équation, code de refactor ... non, pas de similitude j'en suis sûr :)
L'exemple dans l'une des autres réponses sur la modification du prénom en "Jim" est un hack: il résout le symptôme (le prénom dans la liste est Jim), mais ne résout pas complètement le problème (la liste n'est pas triée ou priorisé d’une manière qui fonctionne pour toutes les entrées).
la source
Un hack est en train de faire quelque chose qui retourne le résultat attendu, mais le fait de manière étrange (entraînant généralement un impact négatif sur les performances).
Par exemple:
la source
Imaginez si votre jambe était infectée et devait être retirée pour que vous puissiez survivre. Préférez-vous que le médecin pirate rapidement avec une hache ou le retire chirurgicalement après avoir examiné le problème et choisi les outils, la procédure, etc. appropriés? La même chose s'applique aux logiciels.
la source
Un hack signale sa naissance lorsque le codeur responsable déclare "je reviendrai et je corrigerai cela plus tard".
Sur une note sérieuse - un hack dans le contexte du PO est quelque chose qui permet d’atteindre le résultat souhaité, mais qui utilise une méthode temporaire ou peu fiable pour le faire.
L'autre définition courante est une technique qui exploite les comportements de cas extrêmes pour contourner les limitations / sauvegardes de la plate-forme.
Hack dans le deuxième contexte a un certain cachet parmi "maverick" (lire: dangereux) héros codeurs ...
la source