Le niveau D'indirectement résout tous les problèmes
qu'est-ce que le "niveau D'indirectement résout chaque problème" signifie en informatique?
7 réponses
Généralement cela signifie qu'en augmentant le niveau d'abstraction on peut rendre le problème plus facile à comprendre/résoudre.
soyez prudent avec vos abstractions cependant, la citation complète au moins comme je l'ai entendu dire, "Vous pouvez résoudre chaque problème avec un autre niveau d'indirecte, sauf pour le problème de trop de niveaux d'indirecte".
dans le livre Beau Code:
tous les problèmes en informatique peuvent être résolus par un autre niveau d'indirectement," est une citation célèbre attribuée à Butler Lampson, le scientifique qui en 1972 a imaginé l'ordinateur personnel moderne.
Bien que ce soit contredit par Wikipedia qui attribue la phrase à David Wheeler.
nous devons d'Abord comprendre ce qu' Additing Level of Indirection moyens.
Habituellement, Additing Level of Indirection signifie que nous sommes en mesure de fournir un autre moyen de résoudre un problème, idéalement avec quelques avantages supplémentaires. D'autres fois, quand rien ne fonctionne actuellement, l'indirecte pourrait être notre seule solution.
par exemple, si le besoin commercial est, "nous devons décider de la taille du bloc de propriété intellectuelle à acheter afin de fournir l'adresse IP pour tous nos sites."
Le problème est que si l'on choisit un bloc qui est trop petit, puis nous aurons besoin pour obtenir un plus grand. Non seulement notre administrateur doit aller chercher un autre bloc, mais les préfixes maintenant an supplémentaires doivent être injectés dans notre table de routage pour accéder à mes sites. C'est plus de temps, de coûts et de complexité. Est-il un meilleur moyen?
Aujourd'hui, une adresse IP signifie qui vous êtes lorsque vous vous connectez et où vous vous trouvez.
LISP utilise un niveau de indirectement pour résoudre le problème de routage indiqué ci-dessus.
Il le fait avec un certain coût:
un nouveau serveur capable de LISP doit maintenant exister pour mapper des adresses vers des sites
deux espaces de noms sont nécessaires (l'un pour L'emplacement, l'autre pour L'ID)
Et quelques avantages supplémentaires:
Eliminer la renumérotation du site lors de l'ajout d'un nouveau bloc
Réduction la taille des tables de routage
fournisseur de services internet peut apporter des modifications (déplacement des sites à partir d'un hôte à un autre)
conserve L'espace d'adresse IPV4 (l'espace d'adresse Localisateur n'est pas assigné aux hôtes)
avec LISP un FAI peut allouer moins d'adresses par site
L'image ci-dessous montre la nouvelle couche d'indirection:
le LISP résout le problème en ajoutant un nouveau calqueindirection et simplifie certaines choses, mais n'est pas forcément plus simple. C'est différent et à bien des égards meilleur.
cela signifie essentiellement que vous devez briser votre problème en petits problèmes jusqu'à ce que les problèmes sont faciles à résoudre.
Vous diviser le problème en plusieurs couches :
- routines qui résolvent le problème
- ils appellent : routines qui comprennent l'espace de problème
- ils appellent : les routines qui font de petits pas (charger un fichier, twiddle quelques bits, écrire une sortie).
les routines au sommet (les routines de résolution de problèmes)) sont indirects / abstraits des moyens réels de résoudre le problème, les rendant plus flexibles pour résoudre le même problème une manière légèrement différente plus tard.
le corollaire de Kevlin Henney est,"...sauf pour le problème de trop nombreuses couches d'indirection".
un concept si important et si peu de réponses ici. En général, chaque problème présenté peut être résolu pas nécessairement par des ajustements de code direct, mais en appliquant un certain proxy (oublier la définition de modèle) dans une certaine forme. L'interception et / ou l'instrumentation des événements est fortement sous-évaluée.
Cette citation est très large dans son implication. La clé de la compréhension est de se concentrer sur le mot "problème". Problème peut être un problème de programmation / bug, traduire une entité du monde à sa composante informatique équivalente, coût s'associant à la solution informatique. Disons que vous essayez de résoudre le problème avec le coût de développement de quelque chose vous-même, vous pouvez vouloir considérer un autre expert pour faire le travail pour vous beaucoup moins cher dans le temps et l'argent. C'est une autre utilisation de l'indirection