2008-09-11 3 views
3

Je suis assis ici attraper jouer en écoutant Stack Overflow Podcast #20 et Joel parle des gars Excel à MS qui ont écrit leur propre compilateur pour améliorer les performances du code qui a travaillé avec des pointeurs et il m'a fait demanderQuand est-ce NIH vs être un investissement raisonnable de temps?

when is it NIH versus being a sensible investment of time? 

Étant donné la situation à l'époque où les performances du compilateur actuel étaient abyssales, je peux voir que la vente de ce cas particulier à la gestion était assez simple étant donné que vous aviez un domaine d'optimisation spécifique que vous vouliez ajouter. Mais de nos jours, pouvez-vous imaginer essayer d'aller à la gestion et dire que vous vouliez du temps pour réécrire gcc?

Alors, comment les gens déterminent-ils si une idée vaut la peine d'être poursuivie par rapport à une poursuite de «basculement à des moulins à vent» dégoulinant dans le syndrome NIH?

Je demande parce que nous avons besoin de temps pour améliorer certains aspects de notre plate-forme opérationnelle. Je m'intéresse à la façon d'aller «avec un chapeau dans la main» pour demander à l'homme pendant un certain temps d'être affecté à apporter des améliorations que la plupart des gens savent certainement payer dans le futur. Edit: J'ai oublié de souligner que nous sommes une société de services fournissant une plate-forme pour un radiodiffuseur important. C'est cette plate-forme qui s'est développée organiquement au cours des 15 dernières années et qui a besoin d'améliorations. La fourniture de ce service est notre fonction principale.

Répondre

7

Tout est question d'avantage concurrentiel.

Les gars de l'équipe Excel ont écrit leur propre compilateur pour qu'ils puissent rendre Excel beaucoup plus petit qu'il ne l'aurait été autrement. Cela a réduit leur temps de chargement et aussi la quantité de mémoire utilisée par le programme; il a fait leur produit meilleur que la concurrence.

De même, Jeff aurait pu utiliser PhpBB pour faire ce site, mais il serait alors juste comme la concurrence. Il serait juste un autre mec avec un forum. Il a écrit son propre moteur de forum afin qu'il puisse différencier son site de la concurrence.

Vous ne devez déployer NIH que si cela vous confère un net avantage concurrentiel ou si cela vous différencie de vos concurrents.

3

Joel lui a répondu que, son meilleur conseil (ce qui semble raisonnable) est: If it's a core business function -- do it yourself, no matter what.

que je pouvais ajouter, si ce n'est pas une fonction de base, alors il vaut mieux avoir les bonnes techniques et économiques raisons . Par ailleurs, de quelle manière les améliorations dont vous avez besoin de temps sont-elles couvertes par le NIH?

2

Nous avons eu un problème (vaguement) similaire il y a quelques mois, ayant besoin de temps pour refaire quelque chose que nous avions déjà construit d'une manière différente pour répondre à l'instabilité d'une bibliothèque en aval. Il semblait assez facile de le faire approuver à la fin - l'application en souffrait et je suppose qu'ils croyaient ce que nous disions.

PS

question probablement stupide et certainement pas une réponse, mais ce qui est NIH?

+0

Pas inventé ici –

1

L'allocation de mémoire est une exigence «fondamentale» de tous mes logiciels, et donc de mon activité, mais je n'écrirais généralement pas mon propre allocateur ou collecteur.

Comme tout le reste dans l'ingénierie, il y a un ensemble de compromis dans tous les cas. Ceux-ci nécessitent une expérience à faire, peuvent être manipulés avec succès de différentes manières, et ne peuvent pas être résumés dans le son d'un blogueur.

Essayez d'obtenir de bons à évaluer la qualité des choses 3ème partie. log4net, qui est ce qui a commencé cette discussion ici est la négligence-ware qui a récemment été abandonné par certains projets bien connus (comme nUnit). Cela aurait suffi à me décourager.

+0

Je ne le savais pas, pourquoi nUnit a-t-il abandonné la lib? –

+0

Il a dit "fonction", comme dans ** caractéristique **. Pas d'exigence. Votre point d'allocation de mémoire est sans intérêt. – wvdschel

1

Vinko, cela dépend de votre définition de « fonction commerciale de base ». Si mon entreprise est comptable, puis le calcul des intérêts du prêt serait tout à fait sans aucun doute une fonction commerciale de base, mais il est certainement pas unique à mon entreprise.Quelque chose de "standard" comme celui-ci ne devrait JAMAIS être écrit en interne.

Si un composant disponible fait ce dont j'ai besoin, alors je l'utiliserai à chaque fois. Si je dois faire beaucoup de disputes pour que cela fonctionne, alors je pourrais envisager d'écrire le mien à la place. Vous devez également prendre en compte les problèmes juridiques. Il pourrait y avoir une bibliothèque parfaitement bonne que je ne peux pas utiliser dans mon application commerciale en raison d'une licence virale (GPL vs LGPL).

1

@Will L'allocation de mémoire n'est pas une activité principale de votre entreprise, à moins que vous n'écriviez des logiciels intégrés ou des applications sensibles à la mémoire. Même dans ce cas, si la valeur de votre entreprise est de faire autre chose que d'être plus efficace sur le plan de la mémoire que la concurrence, cela ne constituerait pas une fonction commerciale essentielle. Et si vous écrivez ce genre de logiciel et qu'il se différencie par l'efficacité de la mémoire, comment avez-vous géré?

Oui, bien sûr, vous devrez toujours prendre soin des compromis, comme toujours, mais cela ajoute peu de valeur à une réponse. "Cela dépend" est toujours une réponse strictement correcte, donc vide de sens.

@Mel Je suis d'accord. Pour moi, les fonctions métier principales sont des fonctions liées à votre activité principale qui vous différencient de vos concurrents. Dans votre exemple comptable, je doute que le calcul que vous mentionnez soit un actif essentiel de la société comptable, mais quelque chose de différent comme le service à la clientèle ou une meilleure connaissance de la loi, ou autre. Et je ne suis pas d'accord non plus, si vous utiliserez toujours quelque chose qui fonctionne même si cette partie de l'application est censée être votre avantage (ce qui encouragera les gens à utiliser/acheter votre application.) Alors cela cesse d'être votre avantage. Souvenons-nous simplement que l'avantage concurrentiel n'est pas toujours (presque jamais dans le grand schéma des choses) dû au logiciel, et donc beaucoup de gens peuvent utiliser des composants existants sans risquer leur activité.

1

Cette question est si opportune, et c'est très intéressant que le développement d'Excel a inspiré cette question. Nous avons un projet interne dans lequel nous avions besoin d'une fonctionnalité Excel programmée dans une application PHP. Un développeur a travaillé sur ce projet depuis plus d'un an et demi. On ne se rend pas compte à quel point il est difficile de réécrire Excel jusqu'à ce que vous l'ayez essayé. Quoi qu'il en soit, en janvier dernier, j'ai remarqué que PHP avait une bibliothèque PHPExcel écrite pour elle par un tiers qui est activement développé et supporté (il supporte même Excel 2007). Il est donc tout à fait logique que nous réinventons Excel (surtout compte tenu du nombre de programmeurs dans notre département - ce type nous quitte la semaine prochaine).

Pour répondre à cette question, vous devez vous demander si les ajouts ou les modifications que vous souhaitez apporter au code de votre projet auront un grand effet exponentiel sur le jeu de fonctionnalités actuel, ou vous permettront d'ajouter plus de fonctionnalités dans le futur. avec exponentiellement moins de temps passé.Vous devez analyser et documenter les effets à la hausse et à la baisse que vos modifications de code auront sur le projet global, maintenant et dans le futur. En outre, examinez si les changements faciliteront la maintenance et contribueront à la croissance future du projet - si c'est le cas, cela ajoute de la valeur à l'application, surtout s'il y a une possibilité que vous ou d'autres personnes concernées puissent changer d'emploi un jour , ou quelqu'un d'autre peut avoir besoin de faire des changements, pendant que vous êtes occupé sur d'autres projets. Par ailleurs, "NIH" signifie Non-Inventé-Ici. Voir ce lien par Joel dans son article de blog sur le sujet: In Defense of Not-Invented-Here Syndrome

Questions connexes