Domanda

Questo è stato originariamente discusso durante una presentazione di Charles Brian Quinn del Big Nerd Ranch presso act_as_conference . Stava discutendo di ciò che aveva imparato istruendo un Boot Camp Ruby on Rails a molte persone sia nuove nella programmazione che nuove in Rails.

Una diapositiva particolare che si è distinta è stata sulla linea di non usare mai foo and bar come esempi quando si cerca di insegnare a qualcuno a programmare . Il suo ragionamento era molto semplice.

Quale è più facile da capire?

baz = foo + bar

o

answer = first_number + second_number

È accaduto molte volte mentre spiegavo qualcosa e io salto immediatamente al punto di andare ai segnaposto di foo bar, ma poi realizzo il mio errore e rendono l'esempio molto più sensato usando uno scenario del mondo reale.

Ciò è particolarmente applicabile quando si cerca di insegnare a qualcuno che non ha avuto alcuna esposizione alla programmazione e si finisce per aver bisogno di spiegare foo e bar prima di spiegare cosa si sta effettivamente insegnando.

Tuttavia, l'uso di foo and bar per programmatori esperti sembra OK, anche se penso personalmente, insieme a Charles, che sia qualcosa che deve cambiare.

Una rapida ricerca SO di " foo " restituisce oltre 20 pagine di risultati con foo utilizzato in più modi che posso comprendere. E in alcuni casi in cui sto leggendo una domanda su una determinata lingua e lo sto facendo per aiutare a capire meglio quella lingua. Se al posto di foo e bar vengono utilizzati nomi di variabili applicabili, è molto più semplice comprendere e interpretare il problema. Quindi, per gli sviluppatori esperti, anche il costrutto sembra un po 'imperfetto.

È un'abitudine che potrà mai essere presa a calci? Perché scegli di foo bar o non foo bar?

È stato utile?

Soluzione

Dipende strettamente da cosa stai cercando di insegnare. A volte, quando mostri un esempio di programmazione, devi dichiarare alcune cose solo perché lo snippet sia "completo", e quelle poche cose non sono il nucleo di ciò che stai mostrando.

Ad esempio, se vuoi mostrare come generare un'eccezione, credo che sia giusto presentare uno snippet come

public void foo() { 

   // Do some things

   if (errorCondition) {
      throw new Exception("Error message");
   }

}

Dato che il punto in esso mostra eccezioni, non ha senso preoccuparsi del nome del metodo, quindi il foo è "legale". in questo contesto, o almeno per me.

Quello che non accetterei (in questo stesso esempio) sarebbe

public void foo() { 

   // Do some things

   if (bar) {
      throw new Exception(baz);
   }

}

poiché oscura ciò che stai cercando di insegnare.

Altri suggerimenti

Riesco a vedere il punto quando parlo con non programmatori, ma quando sei a una lavagna a discutere di un problema con alcuni membri del team .. Mi mancheranno i miei amici e i miei bar. Penso che la prevalenza di foo / bar sia un esempio della capacità della maggior parte dei programmatori di pensare in modo astratto.

Probabilmente più problemi se ti trovi nell'arena di allenamento.

Li uso a volte. Ma solo se un "reale" il nome non è pertinente.

Li uso per dimostrare che qualsiasi valore di "pippo" e "bar" sarà sufficiente, come "puoi ottenere le dimensioni di un oggetto con dimensioni di (pippo)." È utile per far capire alle persone il concetto generale e non solo i dettagli. Ad esempio, se avessi detto "puoi ottenere le dimensioni di un oggetto con qualcosa come sizeof (int)", allora è quasi garantito che qualcuno chiederà se questo funziona anche per i float.

Per un programmatore totalmente nuovo devo dire che i termini foo e bar potrebbero non essere conosciuti. Ho pensato che fossero qualcosa di specifico del linguaggio (in particolare C), ma dopo aver sfidato Wikipedia ora so che sono solo segnaposti astratti. Quindi, se il tuo pubblico è composto da persone che non conoscono i loro significati, qualcos'altro è molto più chiaro. Anche first_number e così dice che quelli sono numeri ogni volta che vengono presentati e non qualcos'altro.

Ho scelto di non andare in giro e escludere ogni volta che il mio pubblico ha abbastanza familiarità con il concetto a portata di mano che provocherebbe un danno alla loro comprensione.

L'unica volta in cui Foo and Bar dovrebbe essere usato è quando stai parlando di qualcosa di così astratto che l'aggiunta di un contesto richiederebbe ulteriori discussioni. Quindi Foo e Bar sono codici molto più leggibili e creati che sono più seguibili rispetto alle alternative, come x, ye z.

Penso che sia dovuto alla natura lievemente, o forse non così lievemente, sarcastica di molti programmatori. Mentre molte persone hanno cercato di attribuire significati diversi a foo / bar la maggior parte, o almeno molti di noi, pensano a "FUBAR", F ** K Up Beyond All Recognition. È un modo per " vissuto " le persone a fare un commento furbo su tutti gli altri.

Per questo motivo non lo uso mai per i non programmatori e raramente lo uso anche con programmatori esperti. Se lo uso, puoi scommettere che sto facendo un riferimento velato all'argomento in questione.

Oltre a evitare parole insensate come foo & amp; barra, ho scoperto che è molto più importante fornire esempi di codice per scenari del mondo reale che hanno le stesse relazioni. Questo aiuta davvero uno studente a comprendere correttamente un argomento e previene i malintesi. Ad esempio, se sto insegnando su Dependency Injection e mostrerò un codice di esempio in cui un'istanza della classe Car viene iniettata nella classe Driver, nessuno verrà confuso e penserà "Quindi questo significa che la Macchina controlla il Driver allora?" .

Penso che ci sia un altro motivo importante per usare foo e bar negli esempi. Questi nomi chiariscono che non stai invocando parole chiave magiche. Ogni volta che sto leggendo alcuni esempi di documentazione o di codice, mi piace che le parti arbitrarie dell'esempio siano chiaramente distinte dalle parti necessarie.

Se hai sostituito la parola senza senso a ciò che rappresenta genericamente nel codice di esempio, potresti finire con alcuni nomi che assomigliano molto alle parole chiave, alle classi o ai metodi che stai cercando di spiegare. Il "mio" il prefisso, come in myNumber , myFunction , è un buon compromesso che fa risaltare i nomi come arbitrari.

Sono nuovo nella programmazione e più o meno autodidatta. Ho letto molti esempi di codice online e all'inizio mi sono ritrovato a sostituire foo e bar & c; con nomi più pertinenti, come gli esempi firstnumber e secondnumber riportati sopra.

Ora preferisco x, y, z, i ... perché foo e bar sembrano innescare impulsi linguistici nella mia mente e possono distrarmi dalla routine e ho sviluppato, in qualche modo, la capacità di tenere un intero un mucchio di diverse variabili nella mia testa e ricorda cosa sono. Consiglio comunque sicuramente di usare nomi pertinenti quando insegnate a qualcun altro, specialmente quando spiegate il codice a qualcuno che non programma ma deve capire come funziona il programma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top