¿Por qué utilizar fuentes monoespaciadas en su IDE? [cerrado]

82

He visto un par de temas de fuentes en SO y parece que la mayoría de la gente usa fuentes monoespaciadas para tareas de programación. He estado usando Verdana para la programación durante un par de años y realmente me gusta la legibilidad mejorada, sin perder nada relacionado con el espacio único.

¿Por qué utiliza una fuente monoespaciada?

Rik
fuente
4
¿Alguien tiene buenas razones para no usar fuentes de script? :)
jammus
1
Personalmente, me gusta usar San Francisco ( lowendmac.com/backnforth/2k0601.html ) para el mío ... :)
John Rudy
Creo que Trim va incluso más lejos que Verdana al hacer que el código sea legible. ( code.google.com/p/i3project/wiki/Fonts )
user287424
Al menos no soy el único hereje que usa Verdana. :)
Calmarius
16
Vuelve a abrir esto. Definitivamente vale la pena discutir la herramienta / técnica adecuada para un trabajo y las razones para ello.
Thomas Eding

Respuestas:

106

En una fuente monoespaciada:

  • Los literales de cadena de igual longitud parecen iguales.
  • Es más fácil ver signos de puntuación delgados como: () {}
  • Los personajes similares se ven más diferentes: Il 0O vs Il 0O
  • Sabes si una línea se ajustará o no a una ventana de X caracteres de ancho. Esto significa que su equipo puede estandarizar en, digamos, 100 líneas de caracteres y una línea siempre se verá como una línea
Ryan
fuente
31
El segundo y tercer punto no son realmente tan específicos de los monoespaciados. Esto es más una cuestión de qué tipo de letra particulr usa, no si es monoespaciado o no. Verdana funciona bien en ambos puntos (mejor que la mayoría de las fuentes monoespaciadas, en mi opinión), por eso lo uso
Rik
8
Para corregir cada uno de estos: Las cadenas equivalentes tienen el mismo ancho y me pregunto por qué te preocupas por las cadenas que son diferentes y comparten solo una longitud. El no monoancho no dicta que los caracteres de puntuación sean delgados; debe utilizar una fuente diferente no mono. Los caracteres "similares" no necesariamente se ven diferentes en un espacio único; SimHei, por ejemplo, tiene idéntico O vs 0. Es una propiedad de la fuente, no del ancho. Finalmente, si su equipo realmente estandariza, entonces puede elegir no mono y estandarizar en "no deje que fluya fuera de la pantalla".
bwerks
103

Nunca antes había considerado codificar en una fuente proporcional. Así que en interés de la ciencia cambié de editor para intentarlo.

Aquí hay algunas observaciones después de arreglar un par de tickets fáciles:

  • El código parece extremadamente denso. La mayor parte de mi código tiene alrededor de 80 columnas, rara vez más de 100. Las fuentes proporcionales lo reducen a una pequeña franja en el lado izquierdo de mi editor. Quizás sea útil si tiene poco espacio en la pantalla, pero parece innecesariamente compacto.
  • La "textura" del código se pierde. Es difícil saber qué tipo de estructura estoy viendo: es solo una gran parte de texto que debe leerse casi carácter por carácter.
  • Es muy fácil perder al !operador if (!foo). (si (! foo), mira!)
  • Los caracteres de puntuación están muy mal definidos. Muchos son difíciles de diferenciar ( {}[]()frente a {} [] ())
  • Algunos caracteres de puntuación son mucho más grandes que otros, lo que infiere énfasis donde no se pretende ninguno ( $@%frente a $ @%)
  • Algunos caracteres son muy limitados y muy difíciles de identificar ( '"!;:,.vs '"!;:,.)
  • Algunos números y letras son muy similares ( 0Oo iIlvs 0Oo iIl)
  • Soy extremadamente dependiente del resaltado de sintaxis, sin él es casi imposible hacer cosas como confirmar que las citas están equilibradas, etc.
  • La alineación (aparte de una simple sangría) está completamente rota. Puede aletearlo colocando espacios adicionales, pero debido a la naturaleza proporcional de las fuentes, es posible que las líneas no se alineen exactamente: el código parece más desordenado .
  • Las expresiones regulares son ... ¡interesantes!

Sin embargo, hay algunos puntos positivos. Es cierto que solo lo he estado usando por un tiempo, pero ciertamente hay algunos aspectos que funcionan un poco mejor con fuentes proporcionales:

  • Las "palabras" son más fáciles de leer: los errores de ortografía (por ejemplo, escribir una variable de forma incorrecta) saltan a la vista.
  • Me siento mejor al usar nombres de variables más largos y descriptivos (tal vez porque escanean mejor, tal vez porque el tamaño horizontal del texto está comprimido)
  • Parece un poco más fácil leer un código como este. Es más fácil para mi cerebro "tokenizar" cada palabra y comprender su significado. Aunque, debido a que los caracteres de puntuación son más difíciles de leer, todavía es difícil, pero tal vez eso cambie con un tiempo para acostumbrarse

Actualizaré esta respuesta nuevamente mañana (¡suponiendo que pueda pasar un día entero como este!)

Dan
fuente
7
¡Buen trabajo! Sin embargo, me pregunto qué tipo de letra usaste, ya que la mayoría de los puntos que tienes sobre ciertos personajes que se parecen demasiado no me molestan en absoluto.
Rik
Empecé con Arial, pasé a Calibri. Probé algunos otros, pero esos también parecían ser los mejores basados ​​en 20 segundos de búsqueda extremadamente poco científica de mi lista de fuentes y una recomendación de Konrad Rudolph.
Dan
6
"Nunca antes había considerado codificar en una fuente proporcional. Así que en interés de la ciencia, simplemente cambié mi editor para intentarlo". ¿Cuántos años ha estado programando y se ha acostumbrado al ancho fijo? Aquí tiene una respuesta decente, pero no tiene en cuenta su propio sesgo (y sería difícil hacerlo sin mucho más trabajo), lo cual no es una buena ciencia.
2
@Roger: Puede que no sea una buena ciencia (¡hacer un estudio de este tipo sería casi imposible y muy costoso!), Pero las razones son plausibles. Y la sangría rota es un argumento difícil de superar (en los IDE / editores actuales; este problema se puede resolver mediante sangría inteligente utilizando tabulaciones que coincidan con la semántica).
Konrad Rudolph
5
Una fuente proporcional diseñada específicamente para programación resolvería la mayoría de las objeciones habituales. Hay algunas fuentes proporcionales para codificar en code.google.com/p/i3project/wiki/Fonts
user287424
28

Me gusta alinear los condicionales relacionados para tratar de hacer más obvio que están agrupados. Por ejemplo:

if ((var1 == FOO) && ((var2 == BAR) ||
                      (var2 == FOOBAR)))

Las fuentes de ancho variable hacen que esto sea más difícil.

DGentrada
fuente
2
Punto valido. Pero alinear las cosas verticalmente tiene un problema: ¿qué pasa si necesitas cambiar algo en esa declaración if? Probablemente necesitará realinear todas las cosas.
Calmarius
9
@Calmarius: "hacerlo legible" es parte de mi codificación de todo el día, lo hago inconscientemente. Si se esfuerza por cambiar el código, también debe esforzarse por reducir el costo de mantenimiento.
Sebastian Mach
2
Una mejor manera de lograr esto son las pestañas elásticas , incluso si se apega a la fuente de espacio único . No es que sea una alternativa práctica en los editores actuales ...
Roman Starkov
1
@endolith Bueno, seguro que son más inteligentes que los espacios ... :) Aún necesitas decidir qué quieres alineado con qué; la gran ventaja es que una vez que ha hecho eso, las cosas se mantienen alineadas incluso si otras cosas cambian.
Roman Starkov
2
@endolith Debería insertar una pestaña entre los dos paréntesis en la primera línea y una pestaña antes del paréntesis de apertura en la segunda línea. Ahora, esto agregaría algo de espacio adicional entre los dos paréntesis en la línea 1 en una implementación de vainilla, pero obtendría una alineación que se mantiene en las ediciones, lo que me parece una compensación muy valiosa. De hecho, creo que incluso agregaría un tabulador después del paréntesis de cierre en ambas líneas. Vea la captura de pantalla , en todo su esplendor de fuente de ancho variable, o pruébelo usted mismo .
Roman Starkov
20

Una cosa que sigo viendo aquí es la discusión sobre "alinear código" y sangría. Me gustaría señalar las siguientes cosas:

  • ocho espacios siempre serán dos veces más largos que cuatro espacios en cualquier fuente.
  • dos pestañas siempre tendrán el doble de longitud que una pestaña en cualquier fuente.
  • cualquier identificador en una línea siempre tendrá el mismo ancho en la siguiente línea ... ¡en cualquier fuente!
  • Claro, si tus compañeros de equipo están usando monoespacio y tú no, se verá diferente ... pero deberías estandarizar algo, sea lo que sea, y si eso es cierto, se verá igual para todos. ..en CUALQUIER fuente! Para reírse, también puede intentar mantener a todos en monoespacio y dar a la mitad de ellos monitores de pantalla ancha ... vea cómo va eso.
  • Si está haciendo algo que se basa en alinear el código en función de la posición en columna de esos caracteres en la pantalla, y no el alcance de los identificadores que está utilizando, supongo que lo que está haciendo es un truco. Los identificadores nunca deben limitarse a un cierto número de caracteres a costa de la calidad de sus nombres. Aparte de eso ... todavía no está dibujando cuadros ASCII con asteriscos para comentarios en su código, ¿verdad?

Entonces, dibujando todo esto en conjunto, si comienza cada línea en el mismo lugar, y el espaciado consistente tiene el mismo ancho, y los identificadores no cambian espontáneamente el ancho en cada línea, ¡entonces su código realmente se alineará! ... hasta que algo sea diferente.

por ejemplo:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • identifier.Method (). Property.ToString ();
  • identifier.Method (). OtherGuy.ToString (); //¡Oh no! desalineado!
  • identifier.Method (). Sumthing.YouGetThePoint; //...¿pero a quién le importa? son propiedades diferentes!

El único punto que concederé es que los caracteres no alfanuméricos normalmente no son muy anchos; estos incluyen) (] [} {,: | "; ',`! y. Sin embargo, esto podría arreglarse en un editor de fuentes ... simplemente haciéndolos más anchos. No es un problema inherente a los espacios no monoespaciales; simplemente no hay No ha habido mucha demanda, por lo que aún no se ha hecho.

En resumen, la preferencia personal está bien, pero creo que hay pocas razones prácticas para preferir el espacio único sobre el no monoespacial. ¿Te gusta cómo se ve? Claro, haz monoespacio. ¿Quieres que quepan más cosas en tu pantalla? No sea mono. Pero la forma en que la gente trata el no monoespacio como si fuera una herejía es un poco exagerada.

bwerks
fuente
3
+1 para ver más cosas en tu pantalla. Y las cajas ASCII ... ... bueno, son una pérdida de tiempo.
Calmarius
2
+1; estos puntos son realmente difíciles de apreciar hasta que uno ha usado una fuente proporcional por un tiempo.
Roman Starkov
8
+1 para darse cuenta de que las fuentes proporcionales diseñadas específicamente para la programación se pueden crear y no necesitan ser monoespaciadas. Si las fuentes proporcionales fueran más comunes en la programación, puede surgir una nueva cultura de "tipografía de programación". No es así con la mentalidad de "herejía".
Timwi
3
Realiza suposiciones generales en sus puntos: 1) la alineación solo debe ocurrir al comienzo de una línea, 2) la alineación de llamadas similares en varias líneas siempre estará en el mismo objeto "identifier.Method ()", 3) posición columnar tiene algo que ver con los nombres de los identificadores, 4) la única vez que uno necesitaría alineación en los comentarios es para "cuadros ASCII con asteriscos". Lo siento, -1.
Droj
3
Me ofende no porque me hayas votado en contra, sino porque no ofreces ni una pizca de contraargumento. Básicamente me recitaste mis puntos, ja. ¡Pero sí, estoy de acuerdo! La alineación sólo importa hasta que las líneas difieren; la alineación de las llamadas a métodos con diferentes argumentos NO importa, porque no debería limitar la longitud de los nombres de las variables; la posición columnar EN REALIDAD NO tiene nada que ver con los nombres de los identificadores; y la única vez que necesita alineación ES cuando se está entregando al arte ascii con el dinero de la compañía.
bwerks
16

Tengo curiosidad por este hilo porque muchos argumentos a favor de las fuentes monoespaciadas realmente se pueden refutar fácilmente con algunos ajustes. Así que cambié mi IDE a Calibri (porque tiene una cara redonda y agradable y está optimizado para la legibilidad en las pantallas para la interfaz de usuario, perfecto). Ahora, obviamente, tengo que usar pestañas en lugar de espacios para la sangría (ignorando todos los problemas) y el ancho de 4 espacios claramente no es suficiente, así que cambié a 10.

Se ve bastante bien ahora. Sin embargo, hay algunos problemas obvios que pude detectar. Más tarde podrían aparecer más, después de haber probado esta configuración por un tiempo.

  • Como ya se mencionó, algunos caracteres (especialmente los paréntesis, punto y coma) se ven demasiado delgados. Quiero esto en un texto continuo pero no en un código fuente. Creo que este será el mayor problema.
  • Los símbolos no se alinean bien. Como ejemplo, considere el siguiente código C #:

    var expr = x => x + 1;
    

    La flecha ( =>) parece una unidad en aproximadamente cualquier fuente monoespaciada. Parece dos caracteres adyacentes en otras fuentes. Lo mismo es cierto para operadores como, >>etc.

  • Los espacios se ven diminutos. Espacio mis códigos fuente vigorosamente para mejorar la legibilidad. Esto no sirve para nada cuando se cambia a una fuente proporcional. Si pudiera controlar el ancho de los espacios, esto definitivamente ayudaría.
  • La sangría sensible al contexto está completamente rota: en algunos contextos no es suficiente sangrar un número fijo de pestañas. Tome expresiones LINQ que pueden tener sangría de la siguiente manera:

    var r = from c in "This, apparently, is a test!"
            where !char.IsPunctuation(c)
            select char.ToUpper(c);
    

    Simplemente no puede hacer esto con una fuente proporcional.

Con todo, los personajes son demasiado estrechos. Una vez más, un espaciado adicional entre letras podría ayudar y definitivamente es necesario en el caso de la puntuación. Sin embargo, tengo la sensación de que todos estos ajustes para hacer que las fuentes proporcionales sean más legibles simplemente emularían las fuentes monoespaciadas de forma natural. Ciertamente es cierto para todos los puntos mencionados hasta ahora.

Konrad Rudolph
fuente
1
En realidad, Calibri es un poco mejor que Arial (que es con lo que estaba probando), aunque todavía presenta problemas similares
Dan
1
Probé varias fuentes. Calibri y Lucida Sans Unicode parecen ser los candidatos más probables. No es una coincidencia que Lucida Sans Unicode (bajo el alias "Lucida Grande") sea la fuente de interfaz de usuario de OS X.
Konrad Rudolph
1
Sí, esos dos son muy similares, en realidad. Calibri gana para mí, ya que tiene una puntuación un poco más clara.
Dan
Puede que sea solo yo, pero he descubierto que el espaciado de Calibri es increíblemente impredecible: algunos espacios parecen inexistentes mientras que otros parecen enormes. Incluso sin tener en cuenta la programación, lo he desactivado en todas las máquinas que uso.
bwerks
@bwerks: ¿a qué te refieres con que lo "desactivas"? Simplemente no lo use si no le gusta. Además, ¿cuándo, excepto en programación, utiliza el espaciado? ¿Para formatear? No lo hagas , eso es un pecado mortal. Además, lo que observa puede ser simplemente el efecto del mal algoritmo de salto de línea de Microsoft Word, ya que el espaciado de Calibri es siempre el mismo: un espacio tiene el mismo ancho, siempre. En particular, no se ve afectado por el kerning.
Konrad Rudolph
11

Yo uso Comic Sans MS, que parece bastante razonable en tamaños de puntos pequeños (solo comienza a parecer "bromista" en tamaños de titulares). Es agradable a la vista, pero mantiene el texto lo suficientemente pequeño como para tener una cantidad razonable de código visible en la ventana de texto, con varios de los paneles acoplados de VS abiertos.

Puede sacar el panel del Explorador de soluciones y seguir teniendo 100 columnas de texto legibles sin desplazamiento horizontal. Además, puedo tener el panel DXCore Documentor (que muestra XMLDOC con formato) abierto lo suficiente para leer y al mismo tiempo poder ver suficiente texto para documentar los XMLdocs.

James Curran
fuente
4
Oh amigo. ¿Por qué? ¡Me encantaría escuchar tu justificación para eso!
Dan
4
Usando comic sans para, bueno, cualquier cosa :)
Dan
4
¿Tu justificación es "es pequeño"? De todas las características de Comic Sans, su "pequeñez" rara vez se elige a menudo sobre otras fuentes. Además, te hace ver como si tuvieras 12 años. Si hubiera trabajado contigo, definitivamente me habría reído de ti por eso a estas alturas :)
Dan
5
Totalmente caballa: acabo de probar esto y funciona. James probablemente ha descubierto la única razón restante de la existencia de Comic Sans: es claramente legible hasta 7 puntos. La próxima vez que tenga que refactorizar el código de alguien más con métodos de mil líneas, esta es la fuente que usaré.
Bevan
7
Es muy posible que sea legible, pero aún así no lo admitiría en público :)
patricksweeney
10

Si trabaja en equipo, las fuentes monoespaciadas garantizan que el código sea claro y esté correctamente distribuido para todos, independientemente de la fuente monoespaciada que prefieran usar.

Su código puede parecerle claro cuando usa una fuente de ancho variable, pero es poco probable que tenga el mismo aspecto si lo abre un usuario de fuente monoespaciada.

Tom Robinson
fuente
10

Todo lo que se necesita son unas pocas horas para tratar de averiguar por qué una búsqueda no encuentra algo porque tiene 2 espacios en lugar de 1 en su literal, para darse cuenta de que debe usar fuentes Monospace. Me pasó esto una vez cuando intentaba arreglar un agente de Lotus Notes, cuando el diseñador no estaba usando una fuente monoespaciada. No fue hasta que pegué el código en CodeWright para imprimirlo que fue obvio cuál era el problema.

bruceatk
fuente
1
El ancho del espacio es constante cuando se usa una fuente proporcional, ¿no es así?
Calmarius
6
O puede usar una fuente proporcional con un espacio más amplio. Ser proporcional no causa por sí solo el problema que menciona.
Roman Starkov
10

Las fuentes monoespaciadas facilitan mucho la alineación del código.

Esto es especialmente cierto cuando se trabaja con un equipo; todos en el equipo pueden usar diferentes fuentes, y siempre que sean monoespaciadas, todo se alineará. De manera similar, si una sola persona usa muchas herramientas de desarrollo diferentes, todo se alineará si todas son monoespaciadas. Si no fueran todos monoespaciados, tendría que asegurarse de que todos usen la misma fuente, y si está desarrollando en dos plataformas, puede ser difícil.

De hecho, algunas herramientas de desarrollo solo admiten fuentes monoespaciadas.

Otra razón es que las fuentes monoespaciadas tienden a tener caracteres más distintos. Compare lIiO0 con lIiO0y verá lo que quiero decir. También hacen que sea mucho más fácil contar los espacios en blanco.

SLaks
fuente
5
"Todo se alineará", solo si su equipo ha resuelto La única guerra santa de pestañas frente a espacios y / o tiene una configuración de ancho de pestaña uniforme.
Roman Starkov
2
Incluso si usa la sangría de las pestañas, aún debe usar espacios para la alineación posterior a la sangría.
PeterAllenWebb
6

Sospecho que las fuentes monoespaciadas eran una preferencia de los programadores como un remanente de los días de DOS basados ​​en texto.

Por otro lado, yo mismo probé Verdana y un par de otras fuentes proporcionales recomendadas, pero no pude soportar el cambio. Mi ojo está demasiado bien entrenado para el espacio único. Los lenguajes con muchos símbolos, como: C / C ++, C #, Perl, etc., se ven demasiado diferentes para mí. La ubicación de los símbolos hace que el código se vea completamente diferente.

Spoulson
fuente
Esta parece ser la respuesta real, también creo que tiene principalmente razones históricas / de hábitos, y el resto son solo limitaciones de un editor de código o fuentes incorrectas.
Mikhail V
6

Por la naturaleza del código en lugar del lenguaje normal, es mejor tenerlo alineado correctamente. Además, en la edición de código, a veces desea bloquear la selección, bloquear la copia y bloquear el pegado. En Visual Studio, puede hacer la selección de bloques usando la tecla ALT mientras realiza la selección del mouse. Puede ser diferente en diferentes editores, pero siempre he encontrado esa opción en un editor muy importante en algunos casos, y no funcionaría muy bien, a menos que esté usando una fuente monoespaciada.

Stephenbayer
fuente
Ahora hay una nueva pulsación de tecla que no conocía antes. Salud.
Kev
5

Personalmente, encuentro las fuentes monoespaciadas más fáciles de leer en los editores de código. Por supuesto, estoy casi ciego. Eso podría hacer una diferencia. Actualmente ejecuto la fuente consolas en 15 puntos con un fondo oscuro con letras de alto contraste.

John Kraft
fuente
Consolas en realidad es una fuente monoespaciada. Uno muy bueno, además. Yo también lo uso.
Joel Mueller
+1 para Consolas e Inconsolata en Mac
the_mandrill
@Joe Mueller: no tengo idea de cómo escribí eso. Me refiero a lo contrario de lo que escribí. Déjame editar eso ... ok. :)
John Kraft
Le recomiendo que intente encontrar una buena fuente no monoespaciada optimizada para el código y cambie a un fondo claro antes de quedar completamente ciego, sin ofender, justo lo que me dice mi experiencia.
Mikhail V
2

Usar espacios para la sangría sería un problema una vez que haya profundizado más de un nivel.

jammus
fuente
6
En realidad, cualquier IDE decente debería poder hacer frente a esto.
Rik
8
Lo cual es solo otra razón para usar tabulaciones para sangrar (es la razón por la que el buen Dios dio como tabulaciones en primer lugar)
James Curran
5
+1 para pestañas (ahora el paradero es ese debate en curso ...)
Bobby Jack
2

Principalmente con fines de alineación (como cuando las declaraciones de parámetros de funciones abarcan varias líneas y desea alinearlas, o alinear comentarios, etc.).

mipadi
fuente
1

Creo que, al igual que el tema de los caracteres de tabulación, el factor de complicación es cuando algo tiene sangría para fines de alineación y alguien más tiene preferencias diferentes. Las cosas se desalinean.

Alan Hensel
fuente