Je prends un cours de conception de logiciels où je devrais choisir un logiciel open source à analyser du point de vue de la conception de logiciels.
Ce doit être un gros projet: pas moins de 100 000 lignes de code.
J'aimerais vraiment choisir un logiciel qui est très bien conçu et architecturé pour avoir de bonnes idées sur une bonne conception de logiciel.
Par bonne conception, je veux dire des choses comme des classes et une architecture significatives, une bonne utilisation des modèles (de conception), une bonne utilisation de l'abstraction, une bonne organisation des composants, une cohésion élevée et un faible couplage entre les composants, etc.
Avez-vous un logiciel à me proposer?
Notez que le logiciel doit simplement avoir une bonne conception, la conception n'a pas besoin d'être documentée! :)
Il n'a pas besoin d'être une application pour l'utilisateur final ... Il peut aussi s'agir d'une bibliothèque, d'un outil, etc ...
la source
Réponses:
Premièrement, un logiciel, bon ou mauvais, ne vit pas dans la solitude - il modélise un scénario du monde réel que les humains conçoivent comme un problème et est donc toujours étroitement associé à quelque chose appelé "domaine d'application". Ainsi, chaque fois que vous parlez de logiciel, commencez par connaître et étudier le domaine - car c'est seulement alors que vous pourrez atteindre la discrétion du bon et du mauvais.
git - pas seulement bon, mais un design incroyable. Ce n'est pas un contrôle de version à la base, juste un système de fichiers. Un mince placage de fonctionnalités sur le dessus du noyau en fait un système de contrôle de version. Apprenez à connaître les composants internes de git et votre sens de la conception de logiciels sera éclairé.
jQuery - pas une bibliothèque bien documentée (en interne), mais une source inspirante démontrant comment le code JavaScript côté client peut faire des merveilles.
NodeJS - si vous souhaitez créer des serveurs, ce projet a de nouvelles idées et modèles à offrir.
v8 - très bon code C ++, bibliothèque fantastique pour apprendre / étudier les implémentations de machines virtuelles.
Projets NoSQL - Couch, Mongo, Redis, Cassandra - ces projets présentent des façons intelligentes de résoudre les problèmes de persistance. Ils embrassent également l'idée de la persistance polyglotte.
Boost bibliothèques - bonne dose de C ++.
OpenStack - de très bons projets sur le cloud computing et la virtualisation.
The Apache Software Foundation - Choisissez l'un de leurs projets et étudiez-le. La structure modulaire de HTTPd est une excellente source si vous voulez voir comment les composants s'assemblent. APR (apache portable runtime) - une très bonne bibliothèque également.
mod_wsgi - l'un des meilleurs programmes C que j'ai rencontrés.
"bon usage des modèles de conception" - il N'EST PAS important que le code corresponde à un modèle de conception bien connu - il est plus important qu'il résout le problème "intelligemment" - qu'il soit maintenable, réutilisable et lisible. Si le code est entassé dans une "forme" particulière - juste pour adhérer à un modèle de conception - il peut s'agir d'un mauvais code.
"pas moins de 100 000 lignes de code" - depuis quand le nombre de lignes est-il devenu une mesure de bonne qualité - pour avoir un avant-goût de "logiciel bien conçu / architecturé", il n'est pas nécessaire qu'il soit GRAND.
Encore une fois, n'oubliez pas d'étudier d'abord la nature et les nuances du domaine problématique, puis de vous plonger dans la lecture du code.
MISE À JOUR: oct. 2015
InfluxDB - https://influxdb.com/ Ce projet Go est en développement actif et n'est PAS encore très complexe. Vous pouvez donc commencer à creuser dans le code relativement facilement que quelque chose comme OpenStack.
la source
Un tirage au sort. Tous les grands projets Open Source doivent être brillants pour survivre. Les projets Apache, Linux, GNU sont tous brillants.
la source
la source
Python. Plus précisément, CPython, l'implémentation principale. Pour la version 3.2, l'interpréteur exécute environ 50k sloc de code C, bibliothèque standard sur 400k sloc de code Python. Compte tenu de la qualité extrêmement élevée du langage et de son encouragement des principes de lisibilité et de bonne conception, je pense que tout ce code serait assez bon.
la source
TeX et MetaFont méritent vraiment une étude: http://www.tug.org/
Votre bibliothèque locale peut vous aider avec les versions imprimées des sources.
la source
Je recommanderais de lire le livre suivant avant de choisir un projet open source. Cela vous donnera un aperçu de ce qui peut être considéré comme du bon / mauvais code.
Greg Wilson
Faire du logiciel ce qui fonctionne vraiment et pourquoi nous croyons à
l'architecture des applications open source
Voici également son interview d'échange de pile de blog si vous êtes intéressé à écouter l'auteur avant de consulter son
http://blog.stackoverflow.com/2011/06/se-podcast-09/
Dans l'ensemble, qu'est-ce qui est considéré comme un logiciel de haute qualité? La question elle-même est très subjective. Les utilisateurs ont différentes mesures de qualité. Un utilisateur peut considérer que le progiciel est de haute qualité en fonction des mérites techniques. Où un autre utilisateur peut évaluer la qualité en fonction de l'esthétique de l'interface utilisateur et de l'expérience utilisateur globale.
D'un point de vue commercial, ils mesurent généralement la qualité des logiciels selon qu'ils répondent aux attentes du client ou qu'ils respectent les obligations contractuelles d'un client. Il existe également une conduite professionnelle, mais cela dépend de quel côté de la clôture vous la voyez.
Du point de vue des programmeurs, quelle est l'élégance de la conception et des constructions de l'API au moment de la création du logiciel. La même conception ou norme de code peut être considérée comme non professionnelle lorsque les attitudes et les opinions des programmeurs changent au fil du temps.
la source
Je proposerai l'édition IntelliJ Community puisque vous mentionnez que vous aimez les outils logiciels.
http://www.jetbrains.org/
Ce que j'aime:
(certes, je suis un fanboy de JetBrains)
la source
J'ai moi-même recherché un tel projet et je me suis installé
CLang
.Il n'y a pas beaucoup de motifs de conception là-bas, quelques visiteurs ici et là mais c'est à peu près tout. Les hiérarchies de classes sont simples et directes ... En fait, je pense que la simplicité est le but, il ne semble pas y avoir de suringénierie en cours.
Cela dit, étant des performances critiques, un certain nombre de décisions de conception peuvent sembler douteuses (éviter les fonctions virtuelles pour de nombreux objets, compiler sans RTTI / exceptions), donc tout n'est pas applicable aux logiciels de tous les jours.
la source
Le mélangeur est bien structuré et bien conçu.
la source
Joomla, c'est très bien fait. Mais je ne sais pas si ses 100 000 lignes
la source
Donc, juste une autre variante - Qu'en est-il du langage de programmation Nemerle ?
Ce n'est pas si populaire (mais GitHub vient d'ajouter une mise en évidence pour Nemerle) et vous pouvez y trouver de nombreux bons points.
la source