En tant qu'ingénieur logiciel, nous sommes toujours désireux d'obtenir des outils efficaces pour augmenter notre productivité. Et dans notre travail quotidien, nous sommes souvent insatisfaits des outils existants et nous aimerions avoir de meilleures méthodes telles qu'une meilleure configuration de script GDB, un script Vim et un script Python pour rendre les choses ennuyeuses automatiques.
Cependant, il s'agit en fait d'un compromis car la fabrication d'outils nécessite également du temps et de l'énergie. Cela n'améliore pas immédiatement la productivité. Par conséquent, comment jugez-vous qu'il est temps d'arrêter de travailler et de créer des outils pour soulager votre douleur future?
productivity
tools
xiao
la source
la source
Réponses:
Je «fabrique des outils» lorsque l'un d'eux est vrai:
Le "risque" pour la 2ème option n'a pas à être énorme - le coût de construction d'un petit outil est généralement faible, donc si tout ce que vous économisez est le risque d'exécuter à nouveau une construction de 10 minutes une fois par semaine, il sera généralement se rembourser très rapidement.
J'essaie de rendre les outils aussi petits que possible - il suffit de rendre la tâche un peu plus facile maintenant, et peut-être de m'améliorer la prochaine fois.
Cela signifie que vous ne réparez que la plus grande douleur à chaque fois, et que vous ne créez pas de correctifs pour des problèmes qui ne vous blessent pas vraiment.
la source
Avec l'expérience, j'ai constaté que le simple fait de pousser dur sur le travail de grognement est généralement le plus efficace en termes de temps. Faire un outil est souvent tentant. Je renonce à résister lorsque:
la source
Ma règle d'or est que lorsque je dois faire quelque chose pour la troisième fois, il est temps soit d'écrire un petit script pour l'automatiser, soit de repenser mon approche.
Je ne fais pas un "outil" à part entière à ce stade, juste un petit script (généralement bash ou python; perl fonctionnerait aussi, ou même PHP) qui automatise ce que j'ai fait manuellement auparavant. Il s'agit essentiellement d'une application du principe DRY (ou du principe Single Source Of Truth, qui est essentiellement la même chose) - si vous devez modifier deux fichiers source en tandem, il doit y avoir une vérité commune qu'ils partagent, et que la vérité doit être factorisée et stockée en un seul endroit central. C'est génial si vous pouvez résoudre ce problème en interne en refactorisant, mais parfois, ce n'est pas possible, et c'est là que les scripts personnalisés entrent en jeu.
Plus tard, le script peut évoluer ou non en un outil complet, mais je commence généralement par un script très spécifique avec beaucoup de choses codées en dur.
Je déteste le travail de grognement avec passion, mais je crois aussi fermement que c'est un signe de conception mauvaise ou incorrecte. Être paresseux est une qualité importante dans un programmeur, et il vaut mieux être le genre où vous passez beaucoup de temps pour éviter le travail répétitif.
Bien sûr, parfois l'équilibre est négatif - vous passez trois heures à refactoriser votre code ou à écrire un script pour vous faire économiser une heure de travail répétitif; mais généralement, l'équilibre est positif, d'autant plus si vous considérez des coûts qui ne sont pas directement apparents: défaillance humaine (les humains sont vraiment mauvais pour le travail répétitif), base de code plus petite, meilleure maintenabilité en raison de la redondance réduite, meilleure auto-documentation, avenir plus rapide développement, code plus propre. Donc, même si le solde semble négatif en ce moment, la base de code augmentera davantage et cet outil que vous avez écrit pour générer des formulaires Web pour trois objets de données fonctionnera toujours lorsque vous aurez trente objets de données. D'après mon expérience, l'équilibre est généralement estimé en faveur du travail de grognement, probablement parce que les tâches répétitives sont plus faciles à estimer et donc sous-estimées, tandis que le refactoring, l'automatisation et l'abrégé sont perçus comme moins prévisibles et plus dangereux, et donc surestimés. Il s'avère généralement que l'automatisation n'est pas si difficile après tout.
Et puis il y a le risque de le faire trop tard: il est facile de refaçonner trois nouvelles classes d'objets de données en forme et d'écrire un script qui génère des formulaires Web pour elles, et une fois que vous avez fait cela, il est facile d'ajouter 27 classes supplémentaires qui travaillez également avec votre script. Mais il est presque impossible d'écrire ce script lorsque vous avez atteint un point où il existe 30 classes d'objets de données, chacune avec des formulaires Web écrits à la main, et sans aucune cohérence entre eux (aka "croissance organique"). Le maintien de ces 30 classes avec leurs formulaires est un cauchemar de codage répétitif et de recherche-remplacement semi-manuel, changer les aspects communs prend trente fois plus de temps qu'il le devrait, mais écrire un script pour résoudre le problème, qui aurait été une pause déjeuner sans encombre lorsque le projet a commencé est maintenant un projet effrayant de deux semaines avec la perspective redoutable d'un mois de suite consistant à corriger des bugs, éduquer les utilisateurs, et peut-être même abandonner et revenir à la ancienne base de code. Ironiquement, l'écriture du désordre de 30 classes a pris beaucoup plus de temps que la solution propre, car vous auriez pu utiliser le script pratique pendant tout ce temps. D'après mon expérience, l'automatisation du travail répétitif trop tard est l'un des problèmes majeurs des grands projets logiciels de longue durée. parce que vous auriez pu utiliser le script pratique pendant tout ce temps. D'après mon expérience, l'automatisation du travail répétitif trop tard est l'un des problèmes majeurs des grands projets logiciels de longue durée. parce que vous auriez pu utiliser le script pratique pendant tout ce temps. D'après mon expérience, l'automatisation du travail répétitif trop tard est l'un des problèmes majeurs des grands projets logiciels de longue durée.
la source
Je viens de m'en souvenir:
Le problème avec cela est bien sûr qu'en situation réelle, vous ne pouvez pas facilement mesurer ces données pour sélectionner la bonne cellule dans le tableau. Et comme cela a été mentionné dans d'autres réponses, il existe d'autres variables (le risque d'erreur, la tâche est trop ennuyeuse pour le faire même une fois, ...) que vous devez ajouter à l'équation.
Donc ma réponse est que cela dépend vraiment de la situation et vous ne pouvez pas espérer obtenir de réponse "correcte" pour toutes les situations. Après tout, la vie serait ennuyeuse si nous avions des livres de cuisine pour tout.
la source
C'est un gros problème dans mon expérience. La construction d'outils est généralement laissée à un développeur motivé qui arrête de travailler pour construire l'outil. Cela interfère souvent avec le développement même s'il apporte de la valeur. La construction d'outils doit être considérée comme une partie intégrante du "processus" de développement.
Je me souviens avoir assisté à des révisions de code où des erreurs d'en-tête entraîneraient la planification d'une autre révision. Beaucoup d'entre eux auraient pu être détectés par un outil. par exemple, nombre de sloc incorrect, exigence manquante, erreurs de formatage. Mon outil écrit en perl a généré l'en-tête à partir du code livré et validé les exigences à partir d'une base de données Oracle. Il ne faisait pas partie de notre «processus», donc à court terme, l'outil a été considéré comme retardant la livraison.
Toute l'équipe doit s'arrêter périodiquement et voir où il y a des efforts manuels qui peuvent être automatisés par la création d'outils.
la source
Toutes les autres réponses sont bonnes, mais j'ajouterais une autre raison pour laquelle il est utile de passer du temps à créer de petits outils (et à personnaliser votre .vimrc, .emacs, etc.):
Parfois, vous êtes "coincé dans une ornière" de façon créative ou motivante et faire quelque chose, n'importe quoi, "fera couler le jus" (pour mélanger les métaphores). Idéalement, ce serait quelque chose qui ferait avancer le projet de manière productive, mais si c'est un peu tangentiel et qui vous inspire, c'est bien aussi.
Vous ne regardez peut-être pas un écran vide, mais au lieu de cela, vous avez simplement du mal à voir les progrès que vous faites sur une grande tâche. Dans cette situation, cocher quelque chose de tangible peut vous empêcher de vous sentir comme si vous n'alliez nulle part.
Une variation à ce sujet est lorsque vous continuez à penser à quelque chose qui devrait être en veilleuse - en prenant juste un moment et en le faisant, cela vous échappera et vous libèrera pour mettre toute votre énergie dans la tâche principale.
la source
Cela dépend de ce que vous considérez comme un outil. On peut dire que j'en fais des tas de façons que d'autres développeurs considéreraient frivoles ... Parce que je les fais pour à peu près tout sauf les commandes de système de fichiers les plus basiques.
J'utilise 2 justifications pour soutenir cela.
Parfois, ils deviennent de plus grands outils et gagnent des fonctions interactives, mais s'ils ne le font pas, ils ont toujours une valeur d'enregistrement.
la source