Ich nehme an einem Software-Design-Kurs teil, in dem ich eine Open-Source-Software zur Analyse aus Sicht des Software-Designs auswählen sollte.
Es muss ein großes Projekt sein: mindestens 100.000 Codezeilen.
Ich würde wirklich gerne eine Software wählen, die sehr gut entworfen und aufgebaut ist, um gute Einblicke in gutes Software-Design zu haben.
Mit gutem Design meine ich Dinge wie sinnvolle Klassen und Architektur, gute Verwendung von (Design-) Mustern, gute Verwendung von Abstraktion, gute Organisation von Komponenten, hohe Kohäsion und geringe Kopplung zwischen Komponenten usw.
Haben Sie eine Software, die mir einen Vorschlag macht?
Beachten Sie, dass die Software nur ein gutes Design haben muss, das Design muss nicht dokumentiert werden! :)
Es muss keine Anwendung für den Endbenutzer sein. Es kann sich auch um eine Bibliothek, ein Tool usw. handeln.
quelle
Antworten:
Erstens lebt eine Software, ob gut oder schlecht, nicht in der Einsamkeit - sie modelliert ein reales Szenario, das von Menschen als Problem aufgefasst und daher immer eng mit einer sogenannten "Anwendungsdomäne" verknüpft wird. Wenn Sie also über Software sprechen, müssen Sie zuerst die Domäne kennen und studieren - denn nur dann können Sie die Entscheidung über Gut und Böse treffen.
git - nicht nur gut, sondern ein tolles design. Im Kern handelt es sich nicht um eine Versionskontrolle, sondern nur um ein Dateisystem. Ein dünnes Furnier an Funktionalität über dem Kern macht es zu einem Versionskontrollsystem. Lernen Sie die Interna von git kennen und Ihr Gespür für Software-Design wird aufgeklärt.
jQuery - keine sehr gut (intern) dokumentierte Bibliothek, aber eine inspirierende Quelle, die zeigt, wie clientseitiger JavaScript-Code Wunder bewirken kann.
NodeJS - Wenn Sie Server bauen möchten , bietet dieses Projekt erfrischend neue Ideen und Muster.
v8 - sehr guter C ++ - Code, fantastische Bibliothek zum Erlernen / Studieren von Implementierungen virtueller Maschinen.
NoSQL-Projekte - Couch, Mongo, Redis, Cassandra - diese Projekte demonstrieren intelligente Wege zur Lösung von Persistenzproblemen. Sie befürworten auch die Idee der polyglotten Persistenz.
Boost-Bibliotheken - gute Dosis C ++.
OpenStack - sehr gute Projekte zu Cloud Computing und Virtualisierung.
The Apache Software Foundation - Wählen Sie eines ihrer Projekte aus und untersuchen Sie es. Der modulare Aufbau von HTTPd ist eine großartige Quelle, wenn Sie sehen möchten, wie Komponenten zusammenkommen. APR (Apache Portable Runtime) - auch eine wirklich gute Bibliothek.
mod_wsgi - eines der besten C-Programme, auf die ich gestoßen bin.
"Gute Verwendung von Entwurfsmustern" - Es ist NICHT wichtig, dass der Code einem bekannten Entwurfsmuster entspricht. Es ist wichtiger, dass das Problem "intelligent" gelöst wird - dass er wartbar, wiederverwendbar und lesbar ist. Wenn Code in eine bestimmte "Form" gepresst wird - nur um ein Entwurfsmuster einzuhalten - kann es sich um schlechten Code handeln.
"Nicht weniger als 100.000 Codezeilen" - seit wann ist die Anzahl der Zeilen ein Maß für gute Qualität geworden - um einen Eindruck von "gut gestalteter / architektonischer Software" zu bekommen, muss sie nicht BIG sein.
Denken Sie auch hier daran, zunächst die Natur und die Nuancen der Problemdomäne zu untersuchen und dann den Code zu lesen.
UPDATE: Okt. 2015
InfluxDB - https://influxdb.com/ Dieses Go-Projekt befindet sich in aktiver Entwicklung und ist noch NICHT sehr komplex. Sie können also relativ einfach mit dem Einstieg in Code beginnen als mit OpenStack.
quelle
Wirf eine Münze. Alle großen Open Source-Projekte müssen brillant sein, um zu überleben. Apache-, Linux- und GNU-Projekte sind alle brillant.
quelle
quelle
Python. Insbesondere CPython, die primäre Implementierung. In Version 3.2 führt der Interpreter etwa 50 KByte C-Code aus, die Standardbibliothek über 400 KByte Python-Code. Angesichts der extrem hohen Qualität der Sprache und der Förderung der Grundsätze der Lesbarkeit und des guten Designs würde ich den gesamten Code für recht gut halten.
quelle
TeX und MetaFont sind wirklich eine Studie wert: http://www.tug.org/
Ihre lokale Bibliothek kann Ihnen bei gedruckten Versionen der Quellen behilflich sein.
quelle
Ich würde empfehlen, das folgende Buch zu lesen, bevor Sie sich für ein Open Source-Projekt entscheiden. Dies gibt Ihnen einen Einblick in das, was als guter / schlechter Code angesehen werden kann.
Greg Wilson
Making Software Was wirklich funktioniert und warum wir an
die Architektur von Open Source-Anwendungen glauben
Hier ist auch sein Blog Stack Exchange-Interview, wenn Sie dem Autor zuhören möchten, bevor Sie in seinem
http://blog.stackoverflow.com/2011/06/se-podcast-09/ nachsehen.
Was ist insgesamt als hochwertige Software zu bezeichnen? Die Frage selbst ist sehr subjektiv. Benutzer haben unterschiedliche Qualitätsmessungen. Ein Benutzer kann das Softwarepaket abhängig von den technischen Vorzügen als qualitativ hochwertig betrachten. Wo ein anderer Benutzer die Qualität basierend auf der Ästhetik der Benutzeroberfläche und der gesamten Benutzererfahrung beurteilen kann.
Aus geschäftlicher Sicht messen sie die Softwarequalität in der Regel danach, ob sie den Erwartungen des Kunden entspricht oder ob sie die vertraglichen Verpflichtungen eines Kunden erfüllen. Es gibt auch professionelles Verhalten, aber das hängt davon ab, von welcher Seite des Zauns Sie es betrachten.
Aus Sicht des Programmierers ist das Design und die Konstruktion der API zu dem Zeitpunkt, als die Software erstellt wurde, wie elegant. Derselbe Design- oder Codestandard kann als unprofessionell angesehen werden, wenn sich Einstellungen und Ansichten von Programmierern im Laufe der Zeit ändern.
quelle
Ich werde die IntelliJ Community Edition vorschlagen, da Sie erwähnen, dass Sie Software-Tools mögen.
http://www.jetbrains.org/
Was mir daran gefällt:
(Zugegeben, ich bin ein JetBrains-Fan)
quelle
Ich habe selbst nach einem solchen Projekt gesucht und mich entschieden
CLang
.Es gibt dort nicht viele Designmuster, ein paar Besucher hier und da, aber das war es auch schon. Die Klassenhierarchien sind einfach und unkompliziert ... Eigentlich denke ich, dass Einfachheit das Ziel ist, es scheint keine Überentwicklung zu geben.
Da jedoch eine Reihe von Entwurfsentscheidungen von entscheidender Bedeutung für die Leistung sind, können sie zweifelhaft erscheinen (Vermeidung virtueller Funktionen für zahlreiche Objekte, Kompilieren ohne RTTI / Ausnahmen). Daher ist nicht alles auf alltägliche Software anwendbar.
quelle
Mixer ist gut strukturiert und gut gestaltet.
quelle
Joomla, es ist sehr gut gemacht. Aber ich bin nicht sicher, ob es 100.000 Zeilen sind
quelle
Also, nur eine andere Variante - Was ist mit der Programmiersprache Nemerle ?
Es ist nicht so beliebt (aber GitHub hat gerade eine Hervorhebung für Nemerle hinzugefügt) und Sie können dort viele gute Punkte finden.
quelle