Pregunta

Esto fue algo que se discutió originalmente durante una presentación realizada por Charles Brian Quinn de Big Nerd Ranch en acts_as_conference . Estaba discutiendo lo que había aprendido al instruir un campo de entrenamiento Ruby on Rails para muchas personas tanto nuevas en programación como nuevas en Rails.

Una diapositiva en particular que se destacó fue la de nunca usar foo y bar como ejemplos al tratar de enseñar a alguien a programar . Su razonamiento fue muy simple.

¿Qué es más fácil de entender?

baz = foo + bar

o

answer = first_number + second_number

Me ha pasado muchas veces cuando explico algo e inmediatamente me apresuro a ir a los marcadores de barra, pero luego me doy cuenta de mi error y hago que el ejemplo tenga mucho más sentido utilizando un escenario del mundo real.

Esto es especialmente aplicable cuando se trata de enseñar a alguien que no ha estado expuesto a la programación y terminas necesitando explicar foo y bar antes de explicar lo que realmente estás tratando de enseñar.

Sin embargo, usar foo and bar para programadores experimentados parece estar bien, aunque personalmente pienso, junto con Charles, que es algo que necesita cambiar.

Una búsqueda rápida de SO para '' foo '' devuelve más de 20 páginas de resultados con el uso de foo en más formas que puedo comprender. Y en algunos casos, estoy leyendo una pregunta en un idioma en particular y lo hago para ayudar a entender mejor ese idioma. Si se usan nombres de variables aplicables en lugar de foo y bar, hace que sea mucho más fácil entender e interpretar el problema. Entonces, para los desarrolladores experimentados, la construcción también parece un poco defectuosa.

¿Es este un hábito que alguna vez podrá ser pateado? ¿Por qué eliges foo bar o no foo bar?

¿Fue útil?

Solución

Depende estrictamente de lo que intentes enseñar. A veces, al mostrar un ejemplo de programación, debe declarar algunas cosas solo para que el fragmento esté "completo", y esas pocas cosas no son el núcleo de lo que está mostrando.

Por ejemplo, si desea mostrar cómo lanzar una excepción, creo que está bien presentar un fragmento de código como

public void foo() { 

   // Do some things

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

}

Dado que el punto muestra excepciones, no tiene sentido preocuparse por el nombre del método, por lo que foo es "legal". En este contexto, o al menos para mí.

Lo que no aceptaría (en este mismo ejemplo) sería

public void foo() { 

   // Do some things

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

}

ya que está ocultando lo que estás tratando de enseñar.

Otros consejos

Puedo ver el punto cuando hablo con no programadores, pero cuando estás en una pizarra discutiendo un problema con algunos miembros del equipo ... Extrañaría a mis foos y mis barras. Creo que la prevalencia de foo / bar es un ejemplo de la capacidad de la mayoría de los programadores para pensar de manera abstracta.

Probablemente sea más problemático si estás en el campo de entrenamiento.

Los uso a veces. Pero solo si un "real" el nombre no es relevante.

Los uso cuando demuestro que cualquier valor de 'foo' y 'bar' será suficiente, como " puedes obtener el tamaño de un objeto con sizeof (foo). " Es útil para que la gente entienda el concepto general y no solo los detalles. Por ejemplo, si hubiera dicho "puedes obtener el tamaño de un objeto con algo como sizeof (int)", entonces casi se garantiza que alguien preguntaría si eso también funciona para flotadores.

Para un programador totalmente nuevo, debo decir que los términos foo y bar podrían no conocerse. Pensé que eran algo específico del lenguaje (es decir, C), pero después de buscar en Wikipedia ahora sé que son solo marcadores de posición abstractos. Entonces, si su audiencia está compuesta por personas que no saben su significado, algo más es mucho más claro. También first_number y por lo tanto dice que esos son números cada vez que se presentan y no otra cosa.

Elijo no engañar y prohibir cuando mi audiencia esté lo suficientemente familiarizada con el concepto en cuestión que resultaría en detrimento de su comprensión.

La única vez que se deben usar Foo y Bar es cuando se habla de algo tan abstracto que agregar un contexto requeriría una discusión adicional. Luego, Foo y Bar son mucho más legibles y crean un código que es más fácil de seguir que las alternativas, como x, y y z.

Creo que se debe a la naturaleza sarcástica leve, o quizás no tan leve, de muchos programadores. Mientras que muchas personas han tratado de colocar diferentes significados en foo / bar, la mayoría, o al menos muchos de nosotros pensamos en "FUBAR", F ** K Up Beyond All Recognition. Es un modo para " experimentado " personas para hacer un comentario sarcástico sobre todos los demás.

Debido a esto, nunca lo uso para programadores ajenos y rara vez lo uso, incluso con programadores experimentados. Si lo utilizo puedes apostar que estoy haciendo una referencia velada al tema en cuestión.

Además de evitar palabras sin sentido como foo & amp; bar, he descubierto que es mucho más importante proporcionar ejemplos de código para escenarios del mundo real que tengan las mismas relaciones. Esto realmente ayuda al alumno a comprender un tema correctamente y evita malentendidos. Por ejemplo, si estoy enseñando sobre inyección de dependencia y muestro un código de ejemplo en el que se inyecta una clase de Automóvil en la clase de Conductor, nadie se confundirá y pensará "¿Entonces eso significa que el Automóvil controla al Conductor?" .

Creo que hay otra razón importante para usar foo y bar en los ejemplos. Estos nombres dejan claro que no estás invocando ninguna palabra clave mágica. Siempre que leo documentación o ejemplos de código, me gusta que las partes arbitrarias del ejemplo se distingan claramente de las partes necesarias.

Si sustituyó la palabra sin sentido por lo que representa genéricamente en el código de ejemplo, podría terminar con algunos nombres que se parecen mucho a las palabras clave, las clases o los métodos que está tratando de explicar. El " mi " prefijo, como en myNumber , myFunction , es un buen compromiso que hace que los nombres se destaquen como arbitrarios.

Soy nuevo en programación y soy más o menos autodidacta. Leí muchos códigos de ejemplo en línea y al principio me encontré reemplazando foo y bar & amp; c. con nombres más relevantes, como los ejemplos de primer y segundo número anteriores.

Ahora prefiero x, y, z, i ... porque foo y bar parecen provocar impulsos lingüísticos en mi mente y pueden distraerme de la rutina, y he desarrollado, en cierto modo, la capacidad de mantener la totalidad. Un montón de variables diferentes en mi cabeza y recordar cuáles son. Pero aún así definitivamente recomendaría el uso de nombres relevantes cuando se enseña a alguien más, especialmente cuando se explica el código a alguien que no programa pero que necesita entender cómo funciona el programa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top