¿Alguien prefiere las fuentes proporcionales? [cerrado]

51

Estaba leyendo el artículo de Wikipedia sobre el estilo de programación y noté algo en un argumento contra el código alineado verticalmente:

Confianza en la fuente monoespaciada; el formato tabular supone que el editor usa una fuente de ancho fijo. La mayoría de los editores de código modernos admiten fuentes proporcionales, y el programador puede preferir usar una fuente proporcional para facilitar la lectura .

Para ser honesto, no creo que haya conocido a un programador que prefiera una fuente proporcional. Tampoco se me ocurren buenas razones para usarlos. ¿Por qué alguien preferiría una fuente proporcional?

Jason Baker
fuente
11
Me gustan las fuentes proporcionales para leer, pero estrictamente uso fuentes monoespaciadas para el código. Siempre, siempre, siempre.
Frank Shearar
12
Para citar también Wikipedia: [citation needed]:)
Dr. Hannibal Lecter
77
Hace muchos años, un profesor que tenía en la universidad dijo en broma "... porque no es programación a menos que sea un servicio de mensajería nuevo".
Steven Evers
12
Mi razón para usar una fuente proporcional es muy simple. Ya no es la década de 1980. Hemos pasado de terminales de personajes. Los periódicos, libros y sitios web generalmente no usan fuentes monoespaciales por razones de legibilidad. Creo que tienen un punto.
Timwi
44
Verdana 11px es genial.
Czarek Tomczak

Respuestas:

47

Puntos comunes contra fuentes proporcionales, comentadas.

  • No puede alinear con precisión el código verticalmente con fuentes proporcionales. Quiero decir, podrías alinear con precisión el código verticalmente con fuentes proporcionales, si todo el mundo usara tabstops elásticos , pero por desgracia ...
  • Algunas fuentes proporcionales hacen que sea difícil distinguir algunos grupos de caracteres. (por ejemplo, mrnm). Sin embargo, no todas las fuentes de programación son perfectas: Courier New tiene idénticas 'O' y '0' e idénticas '1' y 'l'.
  • Algunos IDE tienen poca compatibilidad con las fuentes de ancho no fijo (como el mencionado Visual Studio o el IDLE de Python). En algunos contextos, tampoco puedes usar uno. (p. ej., terminales).
  • Elegir una fuente proporcional para la codificación te llevará a interminables guerras santas. Aquí, sin embargo, el problema existe entre el teclado y la silla.

Puntos a favor de las fuentes proporcionales

Personalmente, he estado usando la fuente 'Ubuntu' y WenQuanYi Zen Hei Mono con placer y no puedo preferir una a la otra. :)

Ubuntu
WenQuanYi Zen Hei Mono
Comparado con Ubuntu 10 y WenQuanYi Zen Hei Mono 9. No hay un ganador claro aquí, si me preguntas.

Dicho esto, las fuentes son como la comida. A algunos les gustan bien redondeados, a otros les gusta picante y picante: no hay una fuente correcta, o todos la usaríamos en este momento. Yay para elegir!

badp
fuente
No me di cuenta de que la fuente Ubuntu había sido lanzada. Creo que funciona bien allí.
Alan Pearce
+1 por mostrarme WenQuanYi Zen Hei Mono, esa fuente es increíble. Seguramente lo usaré en mi tesis. Depende de qué tan bien se vea impreso: en la pantalla se ve increíble y no ocupa mucho lugar horizontal, lo cual es muy importante en la impresión.
Konrad Rudolph
99
Realmente, solo hay un gran punto gordo contra proporcional: realmente no se puede alinear porque a nadie le importan las tabs elásticas. Lo cual es completamente extraño, dada la forma en que beneficia tanto a los troquelados monoespaciados como a aquellos que realmente prefieren leer fuentes atractivas de ancho variable. ¡Vamos mundo! Tabstops elásticos!
Roman Starkov
77
@romkyns: adopte un estilo de sangría que no dependa de alinearse con otras líneas. Sencillo.
Zan Lynx
44
@ZanLynx Lo hice, porque me gustan las fuentes proporcionales más de lo que me gusta la alineación vertical en otros lugares que no sean el inicio de la línea.
Roman Starkov
29

Hay una razón que hace que sea prácticamente imposible usar fuentes que no sean monoespacios para la codificación, pero no se mencionó en otras respuestas: selecciones rectangulares .

Esta característica, a menudo no muy útil y poco conocida cuando se trabaja con texto ordinario, es esencial para los desarrolladores. Puede imaginar una multitud de escenarios: eliminar //comentarios en varias líneas, agregar paréntesis u otros caracteres, etc. Esto es aún más valioso con el soporte avanzado de selecciones rectangulares, como en Visual Studio 2010, donde no solo puede seleccionar y eliminar texto, pero selecciónelo y reemplácelo.

Tomemos un ejemplo:

private IEnumerable<SELove> StackExchangeRocks()
{
    var howILoveSEWebsites = new []
    {
        new SELove { SiteName = "Stack Overflow", MyReputation = 5269,  MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Programmers",    MyReputation = 16937, MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Super User",     MyReputation = 650,   MyRating = Rating.QuiteGood,   },
        new SELove { SiteName = "Server Fault",   MyReputation = 489,   MyRating = Rating.Good,        },
        // Initialize other websites here.
    };

    return howILoveSEWebsites.OrderByDescending(c => c.MyRating);
}

private class SELove
{
    public string SiteName { get; set; }
    public int MyReputation { get; set; }
    public Rating MyRating { get; set; }
}

private enum Rating
{
    Outstanding,
    Good,
    QuiteGood,
}

En este código heredado, quiero reemplazar la calificación en código por un método que cargará mi calificación de los sitios web de Stack Exchange, pudiendo tener siempre datos actualizados. Comencé a refactorizar la MyReputationpropiedad, y ahora quiero eliminar la inicialización, en su alcance. Imagine que no tengo cuatro, sino los 84 sitios web de SE.

Esto es lo que sucede cuando se usan Consolas , una fuente monoespacial. Presiono Retroceso, y eso es todo, puedo pasar el tiempo restante para hacer algo realmente útil.

La imagen muestra que con Consolas, el rectángulo selecciona la propiedad de reputación.

Y aquí lo mismo con Segoe UI . ¡Ay!

La imagen muestra que con Segoe UI, algunas propiedades de reputación se seleccionan solo parcialmente, mientras que en otras líneas, se selecciona el comienzo de la propiedad de calificación.

Arseni Mourzenko
fuente
99
Esto sucedió porque usaste un espacio que coincidió con la fuente monspace. Si tuviera el espacio adecuado con la fuente proporcional, no tendría este problema.
Kos
66
@Kos: entonces, en lugar de presionar, digamos, tres pestañas, presionarías quince veces la tecla de espacio, ¿notarías que escribiste demasiado y eliminarías el último espacio? Parece un poco complicado, ¿no te parece?
Arseni Mourzenko
66
Eclipse en realidad admite el uso de una fuente diferente para el modo de selección rectangular, lo que hace que esto sea menos problemático.
Nicholas
8
@Kos RE: "espacio adecuado con r / t la fuente proporcional": Pero si un programador diferente usa una fuente diferente en el mismo archivo, no se alineará. Si todos los editores usan fuentes monoespaciales, siempre se alinearán (suponiendo que el código no abuse de las pestañas para la alineación).
Max Nanasy
55
Estoy usando una fuente proporcional durante 2 años sin topes elásticos. No utilizo selecciones rectangulares porque hay algo más que lo reemplaza por completo en la mayoría de los IDE: la selección de múltiples carets. En este ejemplo, seleccionaría "MyReputation =" y luego presionar Seleccionar siguiente aparición usando CTRL-Den SublimeText y VSCode, ALT-Jen los editores de IntelliJ / JetBrains. Luego, SHIFT-CTRL-RIGHT ARROWpara expandir la selección al siguiente token a la derecha y listo. La principal ventaja es que nadie necesita alinear cosas para editar. Desventaja, si tiene algo alineado, ya no lo estará.
Hay
15

Solía ​​usar una fuente proporcional, principalmente porque encuentro que la puntuación es realmente más fácil de diferenciar, pero con el tiempo me di por vencido porque nadie más lo hace y todos inconscientemente asumen fuentes mono espaciadas (como menciona el artículo de Wikipedia, tratando de hacer tablas) formato, arte ascii en comentarios, etc.).

Además, los problemas en Visual Studio , que Microsoft no quiere solucionar, básicamente hacen que sea imposible usar fuentes proporcionales bien diseñadas de todos modos.

Dean Harding
fuente
99
Me encanta tu comentario mini-batalla con microsoft en ese error. Y su alegre respuesta que es básicamente "¡Hola! ¡Gracias! ¡Encantado de conocerte! No haremos nada. OK, ¡gracias por conversar contigo!" Imagínese si la gente se comportaba como que en la vida real ...
danio
2
Recibes un voto positivo por simpatía, ya que, aunque no uso una fuente de ancho proporcional por algunas de las razones por las que citas, mi tipógrafo interno anhela constantemente el soporte adecuado del editor, tanto en diseño como en programación.
Jon Purdy
Extraño, solo pensaba que la puntuación en realidad es más difícil de diferenciar (particularmente los puntos completos) porque ocupa menos espacio. También recuerdo que Notepad ++ usó Comic Sans MS en los comentarios durante más tiempo.
DisgruntledGoat
66
Si encuentra que la puntuación es difícil de identificar en una fuente monoespacial, existen otras fuentes monoespaciales, lo que no significa que necesite usar una fuente proporcional.
Nadie
Exactamente para una mejor puntuacion, a veces uso EnvyCode A o B .
zanlok
9

Personalmente no me importa. Mientras mantenga mis pestañas alineadas y la fuente legible, no podría importarme menos si uso monoespacio, proporcional o algún otro espacio fuera de la pared. Simplemente no empieces a sustituir mis pestañas con espacios, y no tendrás que pelear conmigo.

Aeo
fuente
3
Yo estoy totalmente de acuerdo. Y con las pestañas (a diferencia de los espacios codificados) puede cambiar entre fuentes monoespaciales y proporcionales y ajustar el ancho de la pestaña en consecuencia. Sin embargo, lo que aún tengo que ver es un editor en el que puede establecer el ancho de la pestaña en unidades de EM.
August Karlstrom
6

Uso una fuente proporcional (Arial es la mejor que he encontrado hasta ahora, Verdana es una finalista cercana) y, sinceramente, todavía estoy desconcertado de que la gente use fuentes de ancho fijo; ¿por qué querrías sacrificar la legibilidad de esa manera? Podría entender si el formato tabular fuera deseable, pero no lo es, ya que crea una pesadilla de mantenimiento independientemente de la fuente.

rwallace
fuente
44
Me sorprende que te gusten Arial y Verdana. Los encuentro un poco rudos y poco profesionales. ¿Has probado Calibri?
Timwi
2
Estoy usando 8pt Verdana. Los nombres de identificadores largos son más fáciles de leer. Puedo ver 70 líneas de código sin desplazamiento y las líneas son mucho más cortas, por lo que el código es una columna estrecha, como en un periódico. Esto me permite dividir la vista del editor en dos columnas verticales: veo la declaración en una vista y escribo código en otra. Además, al depurar, la pantalla está llena de ventanas de depuración, la vista del código cabe en el pequeño espacio. El uso de fuentes proporcionales es eliminar el deseo de alinear verticalmente las cosas y colocar cuadros ascii de asteriscos alrededor de los comentarios.
Calmarius
2
Veo 147 líneas de código en Visual Studio en un monitor 1920x1200 girado 90 ° para un modo vertical, usando con la fuente Lucida Console.
zanlok
158 líneas con fuente Monaco en Vim ... Mi pantalla ni siquiera es HD
Mark K Cowan
4

Recuerdo que en el libro de Bjarne Stroustrup, El lenguaje de programación C ++ , se utilizaron fuentes espaciadas apropiadamente para el código. (No puedo encontrar ninguna página de muestra en la web)

No recuerdo las razones exactas, pero creo que mencionó este y otro cambio (creo que el lenguaje C ++ en sí) como una nueva introducción en ese libro.

Personalmente, prefiero los de espacio fijo. Consolas es mi favorito.

Nivas
fuente
1
Comprobando la página 5 de mi edición especial: las fuentes proporcionales generalmente se consideran mejores para el texto, usarlas permite menos saltos de línea ilógicos y la mayoría de las personas se acostumbran. Me resulta fácil de leer. Stroustrup presenta código aquí, no intenta crearlo, y eso puede hacer que las cosas sean diferentes.
David Thornley
44
@David, sí, está presentando el código. Pero, se presenta para "leer" y la cuestión misma de fijo y proporcional es para el código de "lectura", en mi humilde opinión.
Nivas
4

Para los idiomas que tienen líneas cortas y mucho espacio abierto, prefiero las fuentes monoespaciadas. Me parece que las fuentes de ancho variable pueden mejorar la legibilidad donde tienes líneas largas y sintaxis densa.

El problema con la mayoría de las fuentes proporcionales es que no fueron diseñadas para la programación. Esta página muestra algunas fuentes que eran.

Fuente de recorte

usuario287424
fuente
44
enlace muerto al código de Google :(
Florian Castellane
2

Los entornos Smalltalk como Pharo usan fuentes proporcionales y, debido al estilo del lenguaje, se ve muy bien allí. Pero en lenguajes de estilo C como Go u otros como Erlang o Python, prefiero las fuentes monoespaciadas.

ellos mismos
fuente
2

Pasé algún tiempo buscando una fuente buena y legible para Eclipse hace un tiempo, y bajo XP usé Verdana durante bastante tiempo. Consolas lo resolvió porque es realmente excelente para la programación.

Estos son mis hallazgos:

  • La mayoría de las fuentes proporcionales están diseñadas para la prosa y solo con una pequeña puntuación (que a su vez suele ser uno o rara vez dos caracteres). La familia de lenguajes C tiene muchos signos de puntuación, lo que simplemente, en mi opinión, no se ve bien y es más difícil de leer de lo necesario.
  • Los caracteres de longitud variable significan que la longitud de las líneas varía. Esto hace que sea casi imposible adivinar dónde terminará el cursor al navegar con los botones de flecha. Esto me pareció molesto.
  • El espacio vertical también es importante. Esto normalmente no es algo que se pueda anular fácilmente, y la mayoría de las fuentes proporcionales tienen menos espacio entre las líneas de lo que quisiera.
  • Muy pocos IDE se prueban con fuentes proporcionales. Esto deja espacio para errores sutiles, como colocar el cursor en la ubicación incorrecta, volver a pintar caracteres de forma incorrecta y similares.

Por lo tanto, descubrí que no valía la pena para mí.


Nota sobre la alineación y otros diseños: he configurado Eclipse para formatear automáticamente cada archivo en cada guardado, por lo que todos los diseños elegantes se restablecen automáticamente. Eclipse usa pestañas en lugar de múltiples espacios y estos se pueden colocar correctamente incluso con fuentes proporcionales. Por lo tanto, los diseños de formateador pueden estar uno sobre el otro, pero usamos la configuración de formateador estándar que no tiene eso.

Creo que la aplicación del formato automático para todos en cada guardado minimiza los falsos positivos en el sistema de control de fuente, al hacer análisis forenses.


fuente
0

Nunca, nunca, porque las fuentes monoespaciadas me permiten comparar diferentes atributos.

Comparar:

name1 = ["William", "Shakespear", 1564, "Peotry"]

name2 = ["John", "Locke", 1632, "Filosofía"]

name3 = ["Jonathan", "Littell", 1967, "Prose"]

A:

name1=["William",  "Shakespear", 1564, "Peotry"     ]
name2=["John",     "Locke",      1632, "Philosophy" ]
name3=["Jonathan", "Littell",    1967, "Prose"      ]

Las fuentes proporcionales simplemente no pueden colocar atributos equivalentes exactamente uno encima del otro.

Adam Matan
fuente
2
Me interesa saber en qué entorno es un problema para usted. Puede usar pestañas con fuentes de ancho proporcional y fijo para alinearlas en columnas. Donde surge el problema es si usa espacios en lugar de pestañas.
temptar
2
@temptar: considere "iii12345", "AAA12345" y "nnn12354" uno encima del otro. El error ("345") es mucho más fácil de detectar. no puedes poner pestañas en el medio de un valor.
Adam Matan
1
Python no recomienda las pestañas @temptar, y su ancho varía en diferentes editores, lo que puede conducir a un código desalineado.
Adam Matan
2
@ Adam Matan, que es exactamente la razón por la que no debes hacer un formato elegante.
August Karlstrom
0

Si bien creo que las fuentes proporcionales son más bonitas, en algunas de ellas, especialmente las fuentes sans-serif, es imposible ver la diferencia entre una "I" y una "l". Espera, ¿cómo llamé a esa variable nuevamente?

Billjk
fuente
2
Verdana tiene serifs en I para una diferenciación más fácil.
Calmarius
1
0 y O es otro problema importante. También 'vs' y. vs, también. A veces & y $ son un problema (preocupante en perl / php). Sin embargo, Verdana es buena para la mayoría de los anteriores, aunque no es excelente en 0s. Lamentablemente, en proyectos existentes con pestañas mezcladas con espacios malvados, generalmente me doy por vencido y uso Lucida Console. Sin embargo, si está preguntando sobre nombres variables, no está utilizando la finalización de código moderna o al menos copiar / pegar como debería.
zanlok
Una fuente proporcional que sé que tiene 0Oo1lLiI sin ambigüedad es "Latin Modern Mono Prop" de TeX, un pariente proporcionalmente espaciado de "Latin Modern Mono" que fue absolutamente diseñado para el código (sin embargo, para imprimir no en pantalla, encuentro que la representación es un poco borrosa) . La puntuación sigue siendo un problema, tiene muy poco espacio por su importancia en el código de mi humilde opinión, y crea ambigüedades, por ejemplo, dos comillas simples versus una comilla doble: '' vs ",'' vs "
Beni Cherniavsky-Paskin