Software open source di alta qualità / ben progettato [chiuso]

32

Sto prendendo una classe di progettazione software in cui dovrei scegliere un software open source da analizzare dal punto di vista della progettazione del software.

Deve essere un grande progetto: non meno di 100.000 linee di codice.

Mi piacerebbe davvero scegliere un software che sia molto ben progettato e progettato per avere una buona conoscenza del buon design del software.

Con un buon design intendo cose come classi e architetture significative, buon uso di schemi (design), buon uso dell'astrazione, buona organizzazione dei componenti, alta coesione e basso accoppiamento tra componenti, ecc ...

Hai qualche software da suggerirmi?

Si noti che il software deve solo avere un buon design, il design non ha bisogno di essere documentato! :)

Non ha bisogno di essere un'applicazione per l'utente finale ... Può anche essere una libreria, uno strumento, ecc ...

    
posta Andrea Zilio 31.03.2011 - 12:01
fonte

11 risposte

23

By good design I mean things like meaningful classes and architecture, good use of design patterns, good use of abstraction, good organization of components, high cohesion and low coupling between components

In primo luogo, un software, buono o cattivo, non vive in solitudine modella uno scenario del mondo reale che gli umani concepiscono come un problema e quindi è sempre associato strettamente a qualcosa chiamato an "dominio dell'applicazione". Quindi, ogni volta che parli di software, prima sappi e studia il dominio - perché solo così puoi ottenere il discrezione del bene e del male.

  • git - non solo buono, ma un design sorprendente. Non è un  controllo di versione al suo interno, solo un file system. Un sottile rivestimento  di funzionalità in cima al core lo rende un controllo di versione  sistema. Conosci l'interno di git e il tuo senso di  il design del software sarà illuminato.

  • jQuery - non una libreria molto ben documentata (internamente),  ma una fonte stimolante che dimostra come JavaScript lato client  il codice può fare miracoli.

  • NodeJS - se vuoi creare server questo progetto ha  idee e modelli nuovi e piacevoli da offrire.

  • v8 - ottimo codice C ++, fantastica libreria da imparare / studia  implementazioni di macchine virtuali.

  • Progetti NoSQL - Couch, Mongo, Redis, Cassandra - questi progetti dimostrano modi intelligenti per risolvere la persistenza  i problemi. Inoltre abbracciano l'idea della persistenza poliglotta.

  • Boost libraries - buona dose di C ++.

  • OpenStack - ottimi progetti per il cloud computing e la virtualizzazione.

  • The Apache Software Foundation - Scegli qualsiasi dei loro progetti e studiarlo. La struttura modulare di HTTPd è una grande fonte se vuoi vedere come i componenti si uniscono. aprile (runtime apache portable) - anche una buona lib.

  • mod_wsgi - uno dei migliori programmi in C che abbia mai visto.

"buon uso dei modelli di progettazione" - NON è importante per il codice per corrispondere a un modello di design ben noto - è di più importante che risolva il problema "in modo intelligente" - che sia manutenibile, riutilizzabile e leggibile. Se il codice è stipato in a particolare "forma" - solo per aderire a un modello di design - può essere un codice errato.

"non meno di 100.000 righe di codice" - da quando ha fatto il il numero di linee diventa una metrica di buona qualità - ottenendo a il gusto del "software ben progettato / architetturale" non lo richiede sii GRANDE.

Ancora una volta, ricorda di studiare la natura e le sfumature del dominio del problema prima, e poi approfondire la lettura del codice.

AGGIORNAMENTO: ottobre 2015

InfluxDB - link Questo progetto Go è in fase di sviluppo attivo e NON è ancora molto complesso. Quindi puoi iniziare a scavare nel codice in modo relativamente semplice rispetto a qualcosa come OpenStack.

    
risposta data 27.07.2011 - 13:58
fonte
13

Lancia una moneta. Tutti i grandi progetti Open Source devono essere brillanti per sopravvivere. Apache, Linux, i progetti GNU sono tutti geniali.

    
risposta data 31.03.2011 - 12:07
fonte
9
  • Chrome
  • Firefox
  • Apache
  • MySQL
  • PostgreSQL
  • Linux
  • GNU
risposta data 31.03.2011 - 12:13
fonte
7

Python. In particolare, CPython, l'implementazione principale. Per la versione 3.2, l'interprete esegue circa 50k di codice C, una libreria standard su 400k di codice Python. Data l'altissima qualità della lingua e il suo incoraggiamento ai principi di leggibilità e buona progettazione, penserei che tutto questo codice sarebbe abbastanza buono.

    
risposta data 31.03.2011 - 13:01
fonte
4

TeX e MetaFont meritano davvero uno studio: link

La tua biblioteca locale può aiutarti con le versioni stampate delle fonti.

    
risposta data 31.03.2011 - 14:53
fonte
3

Consiglierei di leggere il seguente libro prima di scegliere un progetto open source. Ciò ti darà un'idea di ciò che può essere considerato codice buono / cattivo.

Greg Wilson
Rendere il software ciò che funziona veramente, e il motivo per cui crediamo
L'architettura delle applicazioni open source

Anche qui c'è il suo colloquio di scambio su Blog stack se sei interessato ad ascoltare l'autore prima di guardare nella sua pagina web link

Nel complesso ciò che è considerato un software di alta qualità? La domanda in sé è molto soggettiva. Gli utenti hanno diverse misure di qualità. Un utente può considerare il pacchetto software di alta qualità in base ai meriti tecnici. Dove un altro utente può valutare la qualità in base all'estetica dell'interfaccia utente e all'esperienza complessiva dell'utente.

Dal punto di vista del business, in genere misurano la qualità del software a seconda che soddisfi le aspettative del cliente o che soddisfino gli obblighi contrattuali di un cliente. Esiste anche una condotta professionale, ma dipende da quale lato della recinzione si vede.

Dal punto di vista dei programmatori, quanto è elegante il design e i costrutti dell'API nel momento in cui il software è stato creato. Lo stesso standard di progettazione o codice può essere considerato non professionale quando gli atteggiamenti e le opinioni dei programmatori cambiano nel tempo.

    
risposta data 08.08.2011 - 05:01
fonte
2

Suggerirò l'Edizione della comunità IntelliJ dal momento che hai detto che ti piacciono gli strumenti software.

link

Quello che mi piace al riguardo:

  1. È uno strumento che fa qualcosa piuttosto che un framework
  2. Fanno cose davvero interessanti come l'analisi del codice statico e l'analisi del flusso di dati. Trovo davvero divertente vedere i dettagli di
  3. Una cosa bella è che puoi usarla per eseguire il tuo studio poiché ha la possibilità di eseguire tutte le analisi del codice su se stesso.

(devo ammettere che sono un fanboy di JetBrains)

    
risposta data 08.08.2011 - 04:51
fonte
2

Ho cercato personalmente un progetto del genere e ho optato per CLang .

  • È relativamente nuovo (progenie di LLVM che ha solo 10 anni), quindi no (o non ho visto) codice stantio
  • Un design modulare (come LLVM), estremamente ben congegnato, che credo sia molto importante al giorno d'oggi
  • Codice molto pulito, ben commentato (vedi spesso citazioni dallo Standard per spiegare le cose)
  • Un ambiente di test / suite di test molto ben progettato

Lì non ci sono molti modelli di design, pochi visitatori qua e là ma questo è tutto. Le gerarchie di classi sono semplici e dirette ... In realtà, credo che la semplicità sia l'obiettivo, non sembra esserci alcuna sovrastruttura in corso.

Detto questo, essendo le prestazioni critiche, un certo numero di decisioni di progettazione potrebbe sembrare discutibile (evitando funzioni virtuali per numerosi oggetti, compilazione senza RTTI / eccezioni), quindi non tutto è applicabile al software di tutti i giorni.

    
risposta data 28.08.2011 - 14:16
fonte
1

Blender è ben strutturato e ben progettato.

    
risposta data 31.03.2011 - 12:03
fonte
0

Joomla, è molto ben fatto. Ma non sono sicuro se le sue 100.000 righe

    
risposta data 31.03.2011 - 12:12
fonte
0

Quindi, solo un'altra variante - Che dire linguaggio di programmazione di Nemerle ?

Non è così popolare (ma GitHub ha appena aggiunto l'evidenziazione per Nemerle) e puoi trovare molti punti positivi lì.

    
risposta data 27.07.2011 - 14:10
fonte

Leggi altre domande sui tag