Je pense que la lisibilite d'un code depend beaucoup de ce que le code doit faire. Dans mon travail, je ne m'occuppe que de performance. Les problemes d'ingenieries logicielles sont hors sujets. Mon probleme est d'obtenir les plus hautes performances. Tant que ca marche et que ca va vite, la lisibilite et reutilisabilite du code, on s'en fout completement.
Les interfaces sont importante et la debugabilite du code sont important egalement. Potentiellement les extensions simple doivent etre simple si elles sont possible. Par exemple, passer les types des donnees de float a double ou les index de int a short. Mais des fois, l'implementation fait que ce n'est pas possible. Combien de fois on se repose sur le fait que dans un long tu peux aussi stocker 64 bit et que 64 c'est aussi le nombre de byte dans une ligne de cache.
Du coup rendre un code comme ca propre a besoin de se reposer sur de la documentation et des commentaires. Les parties non critiques du code sont ecrites pour etre facil a comprendre. Mais il y a aussi des parties trash qui serait incomprehensible sans aller lire les deux pages d'un article reference dans les commentaires.
A l'oppose dans le monde de l'ingenierie logicielle le probleme est typiquement oppose, maintenabilite et extensibilite sont les problemes principaux. Du coup ces codes ont besoin d'etre ecrite de facon plus claire et plus robuste.