2009-01-26 13 views
8

Ho sentito un sacco di lamentele nel corso degli anni sui progetti ereditati con cui noi sviluppatori dobbiamo lavorare. Il sito WTF ha un sacco di esempi di codice che mi fanno veramente mormorare sottovoce "WTF?"Quale codice ereditato ti ha impressionato o ispirato?

Ma qualcuno di voi è stato effettivamente presentato con un codice che ti ha fatto andare, "Santo schifo questo è stato ben pensato!" o "Wow, non ci avevo mai pensato!"

Quale codice ereditato hai dovuto lavorare con quello che ti ha fatto sorridere e perché?

+1

@Malfist: facciamo un favore a tutti e smettiamo di modificare i tag. – GEOCHET

+1

@Malfist, bugger off. – mmcdole

+0

E ho pensato che la richiesta di poter downvotare un utente fosse stupida. Ora il mio piede è nella mia bocca ... – GEOCHET

risposta

8

Molto tempo fa, ero responsabile della libreria di runtime Turbo C/C++. Tanj Bennett ha scritto l'emulatore floating point 80x87 originale nell'assembler a 16 bit. Non avevo guardato da vicino il codice di Tanj poiché funzionava bene e non richiedeva attenzione. Ma stavamo facendo il passaggio a 32-bit e il compito mi è toccato allungare l'emulatore.

Se si potesse mai dire che la programmazione avesse qualcosa in comune con l'arte, era così.

Le funzioni matematiche di base di Tanj sono riuscite a mantenere un risultato temporaneo in virgola mobile a 80 bit in cinque registri a 16 bit senza doverli salvare e ripristinarli dalla memoria. I programmatori di assemblaggi X86 capiranno cosa sia stato questo risultato. Lo spazio del registro era scarso e tenere cinque registri come temp mentre allo stesso tempo fare matematica complessa era un bel sito da ammirare.

Se fosse solo una questione di codice intelligente sarebbe stato sufficiente per qualificarlo come arte ma era più di quello. Tanj aveva accuratamente selezionato gli algoritmi matematici sottostanti che sarebbero stati più adatti per mantenere la temperatura nei registri. Il risultato è stato un emulatore in virgola mobile estremamente rapido che è stato un importante punto di vendita per molti dei nostri clienti.

Quando è arrivato il 386, la maggior parte delle persone a cui importavano prestazioni in virgola mobile non utilizzavano un emulatore, ma dovevamo supportare il 386SX di Intel, quindi l'emulatore aveva bisogno di una revisione. Ho riscritto la logica di decodifica delle istruzioni e la gestione delle eccezioni, ma ho lasciato intatte le funzioni matematiche di base.

0

Penso che Rocky Lhotka dovrebbe ottenere il merito, ma ho dovuto toccare un'applicazione CSLA.NET recentemente {nel mio studio privato sul lato} e sono rimasto molto impressionato dall'ordinanza del codice. L'app ha funzionato molto bene, ma il cliente aveva bisogno di alcune estensioni. L'autore originale era morto tragicamente, e il nuovo ragazzo non era sofisticato. Non capiva l'approccio basato sul business object di CSLA.NET, e voleva eseguire tutto da capo in VB.NET, senza alcun quadro di fantasia.

Quindi ho ricevuto la chiamata. Guardare un esempio funzionante di associazione WinForm e CSLA.NET è stato piuttosto istruttivo su molte cose.

1

Alcuni codici VB6 di un altro programmatore presso la mia azienda mi sono imbattuto in un trattamento che ha gestito le condizioni di errore molto bene (sia che si tratti di gestirle direttamente o di registrarle).

Insieme ad un codice piuttosto complesso che è stato ben commentato.

+0

Sono sempre eccitato ogni volta che mi imbatto in un codice di gestione degli errori che in realtà * gestisce l'errore *, piuttosto che limitarsi a registrarli e ri-lanciarli. – MusiGenesis

1

So che questo porterà un sacco di risposte come,

"Non ho mai trovare buone codice prima faccio un passo" e variazioni.

Credo che il vero problema non è che non c'è buoni programmatori o progetti eccellenti là fuori, è che c'è un eccesso di NIH sindrome e il fatto che nessun corpo piace codice da parte degli altri. Quest'ultimo è solo perché devi fare uno sforzo intellettuale per capirlo, uno sforzo molto più grande di quello che hai bisogno di capire il tuo codice in modo che non ti piaccia (ti fa pensare e lavorare dopo tutto).

Personalmente posso ricordare (come tutti credo) alcuni casi di codice veramente brutto ma ricordo anche un codice piuttosto ben documentato ed elegante.

Attualmente, il progetto che mi ha colpito di più è stato un motore di flusso di lavoro dinamico molto potente, non solo per la semplicità, ma anche per il modo in cui è codificato. Riesco a ricordare alcuni frammenti molto intelligenti qua e là, oltre a una bella libreria di metaprogrammazione basata su un IDL completo sviluppato da alcuni miei amici (Aspl.es)

0

Symbian OS: il vecchio bit principale di esso comunque, il bit che risaliva ai giorni di Psion o quelli che ancora oggi mantengono vivo questo spirito.

E seduto proprio di fianco e tutto è tutto il nuovo schifo creato dai più bassi offerenti ingaggiati dalle grandi compagnie telefoniche. Era sorprendente, si poteva effettivamente sentire nelle tue ossa se un po 'del codice base fosse in qualche modo vecchio o nuovo.

3

Il codice che mi colpisce di più e che cerco di emulare è un codice che sembra troppo semplice e facile da capire.

È dannatamente difficile scrivere questo tipo di codice. :-)

0

Mi ricordo quando ho scritto la tesi di laurea triennale sull'inferenza di tipo, il mio "compilatore" Pascal-to-Pascal era un'estensione di un parser programmato dal mio supervisore (in Java). Aveva una struttura piuttosto buona, per quanto posso ricordare, e per me che non aveva mai fatto una seria programmazione orientata agli oggetti, era una vera rivelazione.

2

Ho una storia divertente da raccontare qui.

Stavo lavorando a questa applicazione Java, piena di getter & setter che non hanno fatto altro che ottenere o impostare e interfacce e tutto ciò che è stato inventato per rendere il codice illeggibile. Un giorno mi sono imbattuto in un codice che sembrava molto ben fatto: si trattava fondamentalmente di un'implementazione algoritmica che sembrava molto elegante = poche righe di codice leggibile, anche se rispettava ogni regola possibile a cui il progetto doveva attenersi (veniva controllato automaticamente) .

Non riuscivo a capire chi nel team avrebbe potuto scrivere tale codice. Morivo dalla voglia di discutere con lui e condividere pensieri. Per fortuna, siamo passati a sovversione (da cvs) alcuni mesi prima e ho subito eseguito "svn blame". Mi sono lamentato dappertutto, vedendo il mio nome accanto all'implementazione.

Avevo sentito storie su persone che non ricordavano il codice che avevano scritto 6 mesi prima, codice che è un incubo da mantenere. Non potevo credere che una cosa del genere potesse accadere: come puoi dimenticare il codice che hai scritto? Bene, ora sono convinto che possa succedere. Per fortuna il codice era giusto e facile da estendere, quindi ho vissuto solo metà della storia.

+0

Heh. Sono stato tentato di raccontare una storia del genere, ma ora non ce n'è bisogno. –

+0

Pensavo che una madre conosca sempre i suoi pulcini? Riconosco sempre il mio codice, dal momento che sono l'unico programmatore della mia azienda che può scrivere. – MusiGenesis

3

Nel mio primo lavoro, sono stato sorpreso di scoprire una classe "safe ID" nel codebase (C++), che stava avvolgendo ID numerici in una classe basata su una classe tag vuota, che assicurava che il compilatore si sarebbe lamentato se per esempio hai provato a confrontare o assegnare un UserId a un OrderId.

Non solo mi sono assicurato di avere una classe Id equivalente in tutte le codebase successive che avrei usato, ma in realtà ha aperto gli occhi su ciò che il compilatore poteva fare per garantire la correttezza e aiutare a scrivere codice più forte.

1

Ho ereditato un grosso numero di codice che era così ben scritto che in realtà ho speso i $ 40 online per trovare il ragazzo, sono andato a casa sua e lo ringraziai.

+0

Cosa era ben scritto a riguardo? – rball

0

Ho fatto un sacco di sviluppo del plug-in Eclipse e ho dovuto spesso eseguire il debug nel codice sorgente Eclipse. Anche se non l'ho "ereditato" nel senso che non sto continuando a lavorarci, sono sempre stato colpito dal design e dalla qualità del nucleo iniziale.

Problemi correlati