La lecture du code source SQLite est une mission IMO impossible. Pourtant, il s'agit d'un logiciel utilisable assez complexe (c'est une base de données intégrée à part entière) qui peut être téléchargé, compilé et utilisé à partir du code d'autres personnes et il est constamment mis à jour.
Comment les gens parviennent-ils à écrire et à maintenir un code aussi complexe et difficile à lire?
Réponses:
Il y a une grande différence entre Complexe et Compliqué. Le lien suivant résume le tout. :)
http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/complex-vs-complicated.aspx
Sur une note plus personnelle, je travaille sur une base de code de plus d'un million de lignes de code. J'y suis allé de la ligne 1 à son état actuel. Plus vous êtes farmilar (lire plus vous êtes dans le code), plus cela devient facile. Je ne peux pas vous dire ce que fait chaque ligne, mais je peux vous dire que vous deviez commencer à chercher une tâche ou un bug donné. Cela vient naturellement.
La morale de l'histoire est que, comme toute chose dans le monde de la programmation, cela prend du temps. Si vous vous attendez à regarder SQLite et à le savoir et à le comprendre, vous plaisantez. Il faudra du temps pour comprendre comment tout fonctionne ensemble. La différence entre un bon code et un mauvais code est la durée de ce processus.
Enfin, certains développeurs n'ont pas la possibilité de sauter dans une base de code et de commencer à le comprendre. Beaucoup se sentiront dépassés par la taille ou l'architecture de la base de code. D'autres n'auront aucun problème à y sauter. Tout dépend des points forts des développeurs.
la source
Dans le cas spécifique de SQLite, le principal outil qu'ils ont choisi d'utiliser dans le développement et la maintenance est le test automatisé. Ils sont fiers de la couverture à 100% (couverture de succursale, pas de couverture de relevé) dans leur suite de tests. Selon eux, c'est l'un des logiciels les plus testés au monde. Donc, ils savent tout de suite quand quelque chose qu'ils ont ajouté ou changé provoque une régression, et peuvent se développer sans crainte à la suite de cela.
http://sqlite.org/testing.html
Des chiffres assez stupéfiants - ils ont environ 640 fois plus de lignes de code de test que de code de production.
EDIT: Cette question a été soulevée d'entre les morts, semble-t-il! Et un peu plus d'un an plus tard, cette même page rapporte qu'ils ont 1177 fois plus de lignes de code de test que la production!
la source
la source
Vous n'avez pas besoin d'avoir une compréhension intime de l' ensemble du projet pour pouvoir le maintenir. Habituellement, avec des logiciels volumineux et complexes, les gens auront leurs propres «domaines» particuliers dont ils s'occupent et ils n'ont qu'une connaissance «passagère» du reste du système.
SQLite est en fait relativement petit à l'échelle des "grands projets logiciels" mais si vous regardez quelque chose comme le système d'exploitation Windows, vous aurez des gens qui travaillent simplement sur le noyau, des gens qui travaillent juste sur le shell, des gens qui travaillent juste sur Internet Explorer, les gens qui travaillent simplement sur le gestionnaire de fenêtres, etc. etc. Quelqu'un qui travaille dans le "shell" ne pourra pas corriger un bogue dans le noyau en un rien de temps.
Il y a aussi l'avantage que ces projets évoluent avec le temps: ils n'ont pas toujours commencé aussi compliqués. Cela signifie qu'un nouveau développeur peut généralement être «formé» par des développeurs plus expérimentés.
Lorsque vous rejoignez une grande équipe de développeurs, vous recevrez un aspect particulier du projet sur lequel travailler (peut-être un bogue ou une nouvelle fonctionnalité) et vous aurez un autre développeur en tant que «copain» pour les premières itérations. Votre copain aura une bonne compréhension de la zone dans laquelle vous travaillez et pourra vous aider à vous repérer.
Pour les projets open source comme SQLite, c'est en fait un peu plus difficile car il n'y a aucune motivation pour les développeurs existants à "former" de nouveaux développeurs. Vous constaterez donc que vous êtes un peu plus seul. Mais vous pouvez toujours trouver de l'aide sur les forums de développeurs ou les listes de diffusion (par exemple, simplement en posant une question comme "Je voudrais implémenter telle ou telle fonctionnalité" ou "J'ai trouvé le bug XYZ, où dois-je commencer à chercher?" Et vous êtes susceptible d'obtenir une certaine forme d'aide.
la source
Il y a une différence entre un projet difficile à lire et un projet complexe. Si une personne ne comprend pas profondément la langue dans laquelle le projet a été écrit ou le domaine du projet, cela ne signifie pas que le code est mal écrit.
Mon conseil:
Pour moi, SQLite est loin d'être complexe et rien de compliqué. Le domaine de ce projet exige une compréhension approfondie des concepts larges.
la source
Une chose qui n'est pas mentionnée dans les autres réponses est "Cela leur vient naturellement". La plupart des gens veulent écrire du bon code mais ils sont prêts à écrire du mauvais code. Certains des programmeurs que j'ai rencontrés sont naturellement des penseurs LINÉAIRES + parfois, très consciemment, ils proposent des solutions complexes. La plupart de ces personnes ne passent pas de temps à lire ou à apprendre du livre qu'elles apprennent au fur et à mesure que le travail l'exige.
la source
S'ils sont les codeurs d'origine et qu'ils continuent de le maintenir, ils ne le voient pas comme "complexe et difficile à lire". Ils le voient probablement comme "simple et facile à lire", car ils l'ont écrit eux-mêmes.
Tout code prend du temps pour le comprendre. C'est juste que certains prennent plus de temps que d'autres :)
la source
Vous pouvez faire le tour de n'importe quelle base de code si vous en avez - de la persévérance, de la patience et une approche méthodique - mais principalement de la persévérance :-)
la source
La gestion devient beaucoup plus facile s'il y a des choses toujours faites de la même manière. Je ne connais pas le code SQLite, mais je travaille dans un environnement où il y a plusieurs projets. En plus de comprendre l'analyse de rentabilisation (logique eq), comme tout se fait essentiellement de la même manière partout (accès à la base de données, etc.), il est relativement facile de commencer à travailler sur un autre projet. Texte long court: les directives de codage - de manière appropriée - rendent la vie et ce code beaucoup plus faciles. Cela pourrait être l'un des assistants des codeurs SQLite.
la source
la source
Ils essaient de l'écrire de manière simple mais pas simpliste.
Aller aussi simple que possible rend les choses plus rapides à comprendre / lire, même si cela peut prendre un certain temps.
la source
L'algorithme implémenté définit une limite inférieure sur la simplicité du code d'une implémentation. Si une description abstraite de l'algorithme à implémenter est extrêmement compliquée et nécessite que des tonnes de données différentes soient couplées les unes aux autres, alors le code implémentant ledit algorithme ne peut pas être simple, peu importe qui l'écrit.
En d'autres termes, l'une des raisons pour lesquelles j'écris parfois du code impénétrable est que, étant donné l'algorithme que je veux implémenter, je n'ai pas le choix.
la source