Il "codice olfattivo" è ancora una metafora utile o l'uso improprio del termine ha sovvertito il suo significato? [chiuso]

7

Ne ho incontrati alcuni commenti e risposte su Programmers.SE che denigrano l'uso della frase "Code Smell" e mi sono chiesto quale sia il ragionamento per chi non lo apprezza. Ho incontrato per la prima volta questo termine quando ho letto quello di Fowler Refactoring nel 2000, eppure è solo negli ultimi due anni che ne ho sentito parlare reclamo su l'uso della frase.

Q: Sarebbe corretto dire che la frase Code Smell ha recentemente iniziato a cadere in disgrazia, e in tal caso perché / dovrebbe questa metafora non applicare più ?

Sto cercando risposte ben definite supportate da un buon ragionamento mentre mi rendo conto che questa domanda è soggettiva di limite.

    
posta S.Robins 06.02.2012 - 03:06
fonte

4 risposte

10

Ho avuto un insegnante di falegnameria da bambino che voleva che ricordassi di assicurarmi che non lasciassi un casino di vernice sui miei progetti completati. Mi diede un nome sciocco per ricordarmi di pulire la vernice prima che si asciugasse, dicendo che se la chiamava qualcosa di carino, me ne dimenticavo, ma un nome sciocco che ricorderei per sempre. Aveva ragione, e fino ad oggi associo la parola "snotters" con gocce di vernice lasciata ad asciugare e rendere un progetto di falegnameria brutto.

C'è potere nel nominare le cose. Lo sappiamo nel modo in cui a volte agonizziamo sul modo in cui dovremmo nominare le nostre classi e variabili nel codice, e come ottenere correttamente i nomi aiuta a definire il contenuto dei nostri metodi. Allo stesso modo sono sicuro che questo è il vero potere nell'usare un'analogia per descrivere un concetto tanto effimero quanto il potenziale di un problema nel codice di lavoro. Agli sviluppatori agili piace metterlo in funzione e quindi fare da refactoring per farlo funzionare meglio, tuttavia è necessario un approccio ragionevole per garantire che si proceda al refactoring per le giuste motivazioni. Poiché Yannis ha correttamente dichiarato (e io parafrasando), ciò che sembra male a una persona potrebbe non essere necessariamente considerato cattivo da un altro, e quindi il potenziale per un problema non implica logicamente l'effettiva esistenza di un problema.

Forse l'analogia non è abbastanza accurata. Forse un tocco, un suono, un gusto o un'analogia visiva sarebbero più diretti. Tuttavia il problema con l'applicazione di un'analogia non olfattiva è che è difficile trovare un buon nome breve per descrivere il codice che potrebbe finire per disturbarti in qualche modo sottile, mentre la parola odore implica una sottigliezza che altrimenti sarebbe stata trascurata se non fosse stato per un fattore che l'ha portato momentaneamente alla tua attenzione. Quello che mi piace dell'uso della parola smell è che offre un modo per descrivere che potrebbe essere necessario guardare qualcosa per ulteriori accordature, mentre non implica necessariamente che ci sia qualcosa di sbagliato ... come una buona e il formaggio blu puzzolente potrebbe avere un odore terribile ma comunque piacevole. È sottile - la frase ... forse meno il formaggio ... o questa analogia!

Forse uno dei motivi per cui code smell sembra essere trattato come una cattiva aria su Programmers.SE (sì, gioco di parole) è che molte domande tendono a chiedere "è questo un odore", eppure senza fornire un contesto sufficiente. Così finiamo con una serie di domande piuttosto inutili che assomigliano al seguente:

Q: Could it indicate a problem? A: Maybe/Potentially.
Q: Does it indicate a problem? A: How will we know without reading all of your code?

Forse il problema di fondo con le persone che non amano il termine "odore di codice", o forse più precisamente il motivo per cui molte persone usano impropriamente la frase, è semplicemente perché il loro viene presa da una prospettiva purista, piuttosto che pragmatica, o forse semplicemente fraintendono ciò che l'analogia di un odore di codice è in realtà destinata a rappresentare. In base alla definizione dell'odore di codice di C2-wiki sembra che il significato della frase rimanga sano e il suo utilizzo continui a essere applicabile, mentre la saggezza del mio insegnante di legno ora lamentato rimane valida, perché come Snotters , la frase Codice odore è difficile da dimenticare e probabilmente continuerà ad essere usata - e probabilmente abusata - per molto tempo a venire.

    
risposta data 06.02.2012 - 07:00
fonte
13

Il termine soffre di ciò che tutte le metafore misti concettuali soffrono di: ambiguità. Quale esattamente è considerato odore di codice? Jeff Atwood ha assemblato un vasto elenco di odori di codice , ma se lo fai, fallo ti senti sicuro nel dire che noi (o altri due sviluppatori) applicheremo il termine alle stesse condizioni?

È solo una stupida metafora che, come tutte le sciocche metafore, non è mai stata pensata per essere presa sul serio. Quando Kent Beck ha coniato il termine, questo è ciò che aveva in mente :

A code smell is a surface indication that usually corresponds to a deeper problem in the system.

L'odore di codice è un suggerimento che qualcosa potrebbe essere sbagliato, una bandiera rossa che dovresti investigare ulteriormente e non un'etichetta generica per codice errato. È una metafora estremamente accessibile, traducibile nella maggior parte delle lingue (credo?), Relativamente facile da spiegare ai principianti, coniato da Kent Beck e reso popolare da Martin Fowler (leggi: hype). Quindi, incline ad abusare.

La maggior parte delle menzioni del termine su Programmers.SE sono sostituibili da un termine più specifico. Non necessariamente un termine più formale, solo uno più specifico, che potrebbe guidare le risposte un po 'meglio. Ci sono anche alcune domande "code smell" che in realtà non sono su qualcosa di sbagliato nel codice stesso.

Nel contesto delle domande e delle risposte di Programmers.SE, sarebbe preferibile evitare metafore, idiomi, analogie e altri dispositivi letterari. Ogni ambiguità è una potenziale guerra di commenti, e i dispositivi letterari sono inclini ad essere interpretati in modo diverso per livello di competenza e non sempre si traducono nel pubblico mondiale del sito. Come Bjarne Stroustrup mettilo al meglio :

Proof by analogy is fraud.

Tutto ciò che ho detto, mi piace molto il termine e non darei mai fastidio a nessuno per averlo usato.

C'è qualcosa di simile sull'argomento?

    
risposta data 06.02.2012 - 04:09
fonte
1

Nel design elettronico, ho trovato cose che non hanno senso. Quando guardi un circuito e pensi: "È sciocco, non c'è una ragione sensata ... sembra che abbiano appena strappato qualcosa dall'aria e provato e un campione di 1 in realtà da un miracolo ha funzionato".

È un odore di design. È solo un morso di qualcosa di brutto e non del tutto corretto. (E viene confermata in seguito da una completa mancanza di documentazione, e anche dall'analisi che mostra l'incertezza.)

Questo genere di cose accade in molti campi, e l'idea di "annusare" come sensazione generale di qualcosa che non va bene e di aver bisogno di ulteriori scavi è perfettamente valida.

Il fa sembra essere stato cooptato in un'espressione più generale di una differenza di punto di vista, sulla falsariga di "Non mi piace la gerarchia dell'oggetto, penso che faccia schifo , quindi hai odore di codice ". Questo potrebbe essere il motivo per cui percepisci una possibile caduta in disgrazia: una differenza soggettiva di opinioni rispetto a un sentimento intuitivo di non proprio giusto ... non le stesse cose del tutto.

    
risposta data 06.02.2012 - 09:37
fonte
0

Il codice olfattivo è una grande metafora nella mia mente. In questo contesto, "odore" significa "puzza". Puzza tende a indicare che qualcosa è putrefatto; qualcosa non va bene; qualcosa ti farà star male. Puzza si riferisce a qualcosa che è intrinsecamente spiacevole.

Quando dico che c'è "odore di codice", credo di indicare inequivocabilmente che qualcosa sembra molto sbagliato con il codice a cui mi riferisco. Tuttavia, come nel caso di "puzza", potrebbe non essere immediatamente evidente di cosa si tratta.

    
risposta data 06.02.2012 - 21:12
fonte

Leggi altre domande sui tag