Dans le célèbre essai de Richard Gabriel, The Rise of Worse is Better , il met en contraste les versions caricaturales des philosophies de conception du MIT / Stanford (Lisp) et du New Jersey (C / Unix) selon les axes de la simplicité, de l'exactitude, de la cohérence et de l'exhaustivité. Il donne l'exemple du «problème de perte de PC» ( discuté ailleurs par Josh Haberman ) pour soutenir qu'Unix donne la priorité à la simplicité de mise en œuvre plutôt qu'à la simplicité de l'interface.
Un autre exemple que j'ai trouvé est celui des différentes approches des chiffres. Lisp peut représenter des nombres arbitrairement grands (jusqu'à la taille de la mémoire), tandis que C limite les nombres à un nombre fixe de bits (généralement 32-64). Je pense que cela illustre l'axe de correction.
Quels sont quelques exemples de cohérence et d'exhaustivité? Voici toutes les descriptions de Gabriel (qu'il admet être des caricatures):
L'approche MIT / Stanford
- Simplicité - la conception doit être simple, à la fois dans la mise en œuvre et l'interface. Il est plus important que l'interface soit simple que l'implémentation.
- Exactitude - la conception doit être correcte dans tous les aspects observables. L'inexactitude n'est tout simplement pas autorisée.
- Cohérence - la conception ne doit pas être incohérente. Une conception peut être légèrement moins simple et moins complète pour éviter toute incohérence. La cohérence est aussi importante que l'exactitude.
- Complétude - la conception doit couvrir autant de situations importantes que possible. Tous les cas raisonnablement attendus doivent être couverts. La simplicité n'est pas autorisée à réduire excessivement l'exhaustivité.
L'approche du New Jersey
- Simplicité - la conception doit être simple, à la fois dans la mise en œuvre et l'interface. Il est plus important que l'implémentation soit simple que l'interface. La simplicité est la considération la plus importante dans une conception.
- Exactitude - la conception doit être correcte dans tous les aspects observables. Il vaut mieux être simple que correct.
- Cohérence - la conception ne doit pas être trop incohérente. La cohérence peut être sacrifiée pour la simplicité dans certains cas, mais il est préférable de supprimer les parties de la conception qui traitent de circonstances moins courantes que d'introduire une complexité de mise en œuvre ou une incohérence.
- Complétude - la conception doit couvrir autant de situations importantes que possible. Tous les cas raisonnablement attendus doivent être couverts. L'exhaustivité peut être sacrifiée au profit de toute autre qualité. En fait, l'exhaustivité doit être sacrifiée chaque fois que la simplicité de mise en œuvre est compromise. La cohérence peut être sacrifiée pour atteindre l'exhaustivité si la simplicité est conservée; la cohérence de l'interface est particulièrement inutile.
Veuillez noter que je ne demande pas si Gabriel a raison (ce qui n'est pas une question appropriée pour StackExchange) mais pour des exemples de ce à quoi il aurait pu faire référence.