2011-10-27 8 views
15

¿Qué dice la investigación experimental sobre el espacio en blanco en el código? Permítanme ser específico: estoy hablando de estudios cognitivos que comparan qué tan rápido y efectivamente las personas pueden leer y captar información visual que se presenta en diferentes formatos.Resultados de investigaciones experimentales en espacios en blanco (para el diseño de idiomas y guías de estilo)?

Digamos que estaba diseñando un nuevo lenguaje de programación y tuvo que tomar algunas decisiones que afectan a cómo se ve el código fuente . O simplemente estaba escribiendo una guía de estilo para un nuevo idioma y quería hacer recomendaciones. Los temas relevantes pueden ser el estilo de identificador (snake_cased_identifiers vs. camelCaseIdentifiers/PascalCaseIdentifiers), sangría horizontal, estilos de documentación o espaciado vertical.

estoy pidiendo intencionadamente esta pregunta de esta manera para evitar recomendaciones tales como:

  • "no importa (sin justificación de la demanda)"
  • "hacer lo que la comunidad ya recomienda para el lenguaje X. "

No quiero una guerra de llama entre personas que admiten diferentes enfoques; más bien, me gustaría saber qué investigación experimental tiene que decir sobre el asunto. (Y no espero que ningún estudio en particular sea completamente 'objetivo' o 'neutral'.)

Para darle una motivación más 'squishier' a esta pregunta: La gente aprecia el espacio en blanco en el código, cuando lee documentos, y en el arte (como escuchar música). Todos estos campos ponen un gran énfasis en la importancia del espacio.

Así que, gracias, apreciaría saber qué dicen los estudios. Para ser claro, no estoy descartando la importancia del estilo y el arte; de ​​hecho, espero que la sabiduría de estos mundos aparezca en los estudios experimentales.

En resumen, si se puede, por favor, pulse sobre uno o más de los siguientes:

  • convención de nombres variables
  • hendidura horizontal
  • alineación horizontal (? Alinear los signos iguales a través de varias líneas)
  • espaciado vertical
+0

WRT camelCase vs. snake_case, depende de la mayúscula/minúscula del idioma. En C puede 'ejecutar' una función de función de nombre de sitio donde en PHP la función acamelcased funcionará igual de bien. Entonces, para idiomas que no distinguen entre mayúsculas y minúsculas, el uso de guiones bajos es probablemente más legible en la práctica. – Bink

Respuesta

8

Hay una conferencia de IEEE anual titulado la International Conference on Program Comprehension (ICPC) que a menudo tiene estudios experimentales sobre la comprensión del programa. El más relevante que he encontrado a partir de los últimos tres años son:

  • An Eye Tracking Study on camelCase and under_score Identifier Styles "Si bien los resultados indican que no hay diferencia en la precisión entre los dos estilos, los sujetos reconocen los identificadores en el estilo de subrayado con mayor rapidez."

  • To camelcase or under_score "Los resultados indican que la carcasa de camello proporciona una mayor precisión entre todos los sujetos independientemente del entrenamiento, y los entrenados en camello pueden reconocer los identificadores en el estilo camello más rápido que los identificadores en el estilo de subrayado."

Además de la literatura cognitiva por ordenador ciencia específica, hay estudios acerca de línea y hipertexto lectura:

  • [Chaparro, 2005] Texto de lectura en línea con un diseño deficiente: es el rendimiento peor por Barbara S. Chaparro, A. Shaikh amanecer, & J. Ryan Baker, Usabilidad News, Volumen 7, Número 1, febrero de 2005.

  • [Lin, 2004] Evaluación de la retención de los adultos mayores en la lectura de hipertexto: impactos de los medios de presentación como función de la topología de texto de Dyi-Yih Michael Lin en "Computers in Human Behavior", volumen 20, número 4, julio de 2004, páginas 491-503. Disponible desde ScienceDirect

  • Cognitive load in hypertext reading: A review por Diana DeStefano y Jo-Anne LeFevre.

Estos documentos abordan la pregunta de forma menos directa, pero los menciono con la esperanza de que brinden algún contexto. Las primeras dos referencias fueron encontradas gracias a la publicación de blog de Michael Suodenjoki titulada White space matters in program source code.

+1

Bien por encontrar algunas referencias. ¿Podrías intentar resumir sus conclusiones? – blahdiblah

+0

Agregué dos estudios más y cité sus resultados, arriba. Por lo que puedo decir, los resultados son mixtos. –

7

Este es un tema muy subjetivo, pero puede tomar algunas señales de 1000 años de historia tipográfica.

La investigación se ha hecho en espacios en blanco en tipografía, pero menos en el código. Pero puede suponer que muchos de los hallazgos básicos en legibilidad y comprensión también se aplican al código. Este estudio, Reading Online Text: A Comparison of Four White Space Layouts, muestra que el espaciado vertical adecuado con grandes márgenes aumenta la comprensión, pero ralentiza la velocidad. Para el código, se puede suponer con seguridad que la comprensión es más importante que la velocidad. Entonces, podría decir objetivamente, más espacio es mejor para el código. Pero cuando te adentras en los detalles del tamaño de las pestañas y el posicionamiento del corsé, se vuelve muy subjetivo. En el código, los márgenes son sangría, los párrafos son funciones y bloques de código, y los períodos son saltos de línea, llaves, parens, etc.

Cuando se comienza a preguntar a los programadores qué formato de espacio en blanco es más legible, las respuestas están en todo el espectro. Lo mejor que puedes hacer es buscar generalidades que parezcan universales.

Tales como:

  • espacios en blanco de venta antes y después de los bloques de código, como funciones y clases
  • poner espacios en blanco antes y después de agrupaciones lógicas de código dentro de los bloques
  • largos bloques de código con ningún verticales los espacios en blanco son más difíciles de leer
  • bloques largos de código sin indentación son más difíciles de leer
  • largas líneas de código sin espacios en blanco horizontales son más difícil de leer

Creo que la mayoría de los programadores estarán de acuerdo con esas afirmaciones.

Ejemplo (pseudo-código):

thisismore(difficult<toread)because,itsall-smushed{together} 
this-is-less (difficult < to-read) because, it's-not-all - smushed { together } 

para tocar en sus últimos cuatro puntos:

de denominación de variables:

Esto es tan subjetivo como espacios en blanco, pero de nuevo se puede mirar a tipografía para pistas. La tipografía tiene fuentes serif, mayúsculas que comienzan oraciones, períodos que terminan oraciones y un espacio después de puntos. Todas estas cosas son para permitir que tus ojos hagan la transición entre las palabras y las oraciones. Con las variables, la claridad es importante, por lo que a menudo son nombres de varias palabras. Para que sus ojos los lean fácilmente, algo debe alertarlos de que ha comenzado una nueva palabra.

Esto es más difícil de leer (para la mayoría de la gente):

  • mylongvariablename

que éstos:

  • mi larga nombre-variable-
  • myLongVariableName
  • my_long_variable_name
  • MY_LONG_VARIABLE_NAME

Ahora cuál de ellos es mejor o más legible es subjetiva, y puede estar siempre. Pero lo importante es que algo separe las palabras.

sangría horizontal:

código que no se sangría en todo es más difícil de leer que el código que es. Decadencia demasiado pequeña y tus ojos tienen problemas para distinguir bloques. Demasiado grande y desperdicia espacio y no agrega más claridad. En algún lugar entre cuatro y ocho parece estar bien basado en las líneas de código de once mil millones escritas usando esos tamaños.

Alineación horizontal:

Una vez más, la tipografía al rescate. Las listas de elementos alineados en columnas son más fáciles de leer. Para los datos de elementos de lista que son más largos que una o dos palabras o números (como oraciones), se utilizan listas con viñetas. Para datos de texto, se usan columnas alineadas a la izquierda. Para datos numéricos, se usan columnas alineadas a la derecha. Puede aplicar estos principios al código. Las listas con viñetas se pueden ver como bloques de código, todos alineados al mismo nivel de sangría. Las variables son datos textuales, por lo que la alineación izquierda sería más fácil de leer. Si los valores que estaba asignando fueran numéricos, la alineación correcta sería lo mejor.

Esto es más difícil de leer (para la mayoría de la gente):

var oneVariable = 10023, a = 370, 
p = 4, 
answerToLife = 42, 
openThePodBayDoorHal = false; 

que esto:

var oneVariable = 10023, 
    a = 370, 
    p = 4, 
    answerToLife = 42, 
    openThePodBayDoorHal = false; 

Y esto es probablemente más fácil:

var oneVariable   = 10023, 
    a     = 370, 
    p     =  4, 
    answerToLife   = 42, 
    openThePodBayDoorHal = false; 

vertical y distancia entre ejes

Im agine todo este post sin espacios entre párrafos. Casi todos pueden estar de acuerdo en que sería más difícil de leer y entender. Ahora, muchos podrían argumentar que más espacio entre las secciones sería aún mejor. En la tipografía, las secciones se delinean con encabezados que tienen un tamaño de fuente más grande y más espacio vertical (como se ve en HTML con H1, etc.). En el código, tenemos un tamaño de letra, así que tenemos que trabajar con espacios en blanco y cualquier concepto de refuerzo que utilice el lenguaje (si lo hay). Al igual que el espaciado horizontal, más es mejor que menos. Las características específicas de lo que eso significa son subjetivas, pero en la mayoría de los lenguajes, los programadores se instalan en una convención para ese idioma que usa la mayoría de las personas. Si está definiendo su propio idioma (o estándar de codificación), puede establecer la convención.

Lo más importante, no importa cuál sea el estándar, es que es usado consistentemente en todo su código. Esto es mucho más importante que los detalles del estándar. El código formateado consistentemente es mucho más fácil sin importar el estándar.

Busque typography readability studies para obtener más información.

+0

ThinkingStiff, gracias por la respuesta reflexiva. Dice muchas cosas que creo que son sabias (y muchas cosas con las que estoy de acuerdo). Sin embargo, no creo que se base sustancialmente en la investigación experimental, que es un aspecto clave de mi pregunta. La referencia al estudio de tipografía es útil, creo que hay más estudios en ese sentido. –

Cuestiones relacionadas