language agnostic - spanish - Un diseño de teclado ideal para la programación
spain keyboard layout (6)
A menudo escucho quejas de que los lenguajes de programación que hacen uso intensivo de símbolos para la brevedad, más notablemente C y C ++ (no voy a tocar APL), son difíciles de escribir porque requieren el uso frecuente de la tecla Mayús. Hace un año o dos, me cansé de descargarlo, descargué el Keyboard Layout Creator de Microsoft, realicé algunos cambios en mi diseño y ni siquiera miré hacia atrás. La diferencia de velocidad es asombrosa; con estos pocos cambios simples, puedo escribir el código C ++ en un 30% más rápido, dependiendo por supuesto de qué tan peludo sea; Lo mejor de todo es que mi velocidad de tipeo en el texto corriente no se ve comprometida.
Mis preguntas son estas: ¿qué diseños alternativos de teclado han existido para la programación, que han ganado popularidad, si alguno de ellos sigue en uso moderno, usas personalmente cualquier diseño alterado y cómo se puede optimizar aún más mi diseño?
Hice los siguientes cambios a un diseño QWERTY estándar. (No uso Dvorak , pero hay una distribución de programador Dvorak que vale la pena mencionar).
- Intercambie números con símbolos en la fila superior, porque los números literales largos o repetidos generalmente se reemplazan con constantes con nombre;
- Intercambie la cita con tilde, porque las comillas inversas son raras en muchos idiomas, pero los destructores son comunes en C ++;
- Cambiar menos con guion bajo, porque los guiones bajos son comunes en los identificadores;
- Cambie las llaves por corchetes, porque los bloques son más comunes que los subíndices; y
- Cambie la comilla doble con una comilla simple, porque las cadenas son más comunes que los literales de caracteres.
Sospecho que este último probablemente sea el más controvertido, ya que interfiere más con la ejecución de texto al requerir el uso de shift para escribir contracciones comunes. Este diseño ha aumentado significativamente mi velocidad de tipeo en C ++, C, Java y Perl, y en cierto modo aumentó en LISP y Python.
Cambiar el diseño del teclado es una mala idea ya que (tal vez) aumentaría la velocidad de escritura en un teclado, pero dañaría severamente la velocidad de escritura en otros teclados o en computadoras en las que no tiene el diseño especial del teclado. He descubierto que a menudo es mejor ajustarse a los valores predeterminados, que tener que cambiarlos en todas partes. (Personalmente, mis dedos están fuertemente sesgados por Emacs, lo que causa mucha fricción de tipeo en todos lados).
En general, creo que tener un buen editor de texto y saber cómo usarlo es mejor que intentar mejorar tu velocidad de escritura. Ser capaz de grabar y reproducir macros a veces es un salvavidas, y una selección de fragmentos de código asignados al atajo puede ser útil porque normalmente hay límites impuestos por el lenguaje sobre lo que se puede convertir en una biblioteca.
En términos más generales, creo que los potenciadores de la productividad real se basan en el conocimiento ...
- Conocer qué herramientas y bibliotecas están disponibles y cómo usarlas.
- Conocer la estructura general del código en el que está trabajando, no solo un poquito.
- Conocer algoritmos clave, patrones de diseño y modismos para que no tenga que reinventarlos.
- Conocer las reglas lo suficientemente bien para que pueda ser flexible, ya sabe cuándo romperlas.
- Conocer a sus compañeros de trabajo y sus fortalezas, debilidades, etc., es decir, saber cuándo resolver algo usted mismo, pero también cuándo y a quién preguntar.
FWIW, no pretendo ser fuerte en todos esos. Siempre he sido demasiado sesgado para resolver problemas yo mismo, y con una tendencia demasiado fuerte a reinventar la rueda y los grandes esquemas arquitectónicos.
De todos modos, tengo la sospecha de que el tiempo dedicado a cambiar y aprender diseños de teclado sería una distracción de cuestiones más importantes.
Estoy jugando con una variante del diseño de Colemak en este momento con grandes cambios de símbolos:
sin SHIFT:
`- {} []; <> () _ =
qwfpgjluy * / # /
arstdhneio ''
zxcvbkm,. !
con SHIFT:
~ 1 2 3 4 5 6 7 8 9 0 & +
QWFPGJLUY @ ^ $ |
ARSTDHNEIO "
ZXCVBKM%:?
Tal vez restauraré la tecla / ...
Pero esto no se basa en ninguna investigación sólida, y también me gustaría ver un diseño optimizado (Optimización que incluye cosas como la alteración de la mano, etc., también la preservación del ZXCV, ...) con un corpus basado en el código fuente, ya que todos estos diseños parecen estar optimizado solo para prosa. Por ejemplo, ''f'' es una letra muy común en C (si, para).
Actualización: actualmente estoy usando
`- {} [] @ <> () _ =
qwkrgyulp *; #
asftdhneio ''/
/ zxcvbjm,. /
con SHIFT:
~ 1 2 3 4 5 6 7 8 9 0 ^ +
QWKRGYULP &! ps
ASFTDHNEIO "|
| ZXCVBJM%:?
Esto se basa en una optimización parcial de 6 teclas intercambiadas tomada de Carpalx con la preservación de los atajos de Corte / Copiar / Pegar / Deshacer habituales y modificada para dar un mejor acceso a los caracteres de programación habituales.
Haga un registrador de teclas simple, luego cuente la cantidad de veces que se presiona cada tecla. Ejecútelo por un día o dos, luego guarde la salida en un archivo de texto. Haz esto de vez en cuando. No importa qué diseño esté usando, ya que solo está viendo qué teclas se están utilizando más.
Si desea hacer un buen diseño, no puede tener miedo de alejarse de la norma. Sugeriría colocar las 11 teclas superiores a lo largo de la fila de inicio, luego las siguientes 11 principales como la fila superior (dejar las 2 teclas sobre la tecla de retorno como las menos utilizadas), luego las 3 primeras 11 como la fila inferior . Debería haber 4 claves sobrantes ahora. Toma esos y ponlos en las ranuras - = y] /. Felicidades! ¡Ahora has hecho un excelente diseño de teclado para tus propósitos! = D
Me gustaría abordar su pregunta de la siguiente manera. La tarea es organizar un teclado de forma que se minimicen las pulsaciones de tecla y el movimiento de la mano para el texto dado.
Pasos hacia una posible solución. Haga un programa que:
- Toma un archivo de texto con código fuente. (¡Cuanto más grande, mejor y de diversas fuentes!)
- Cuenta la frecuencia de uso de cada símbolo (su presencia en el texto).
- (opcional) Basado en el paso 2: el programa genera el recuento de trazos clave para cada símbolo más cuánto debe ir la mano desde la posición central. Como resultado, tendrá una medida de cuán efectivo es el diseño de su teclado.
Ahora manualmente o escribiendo un programa Redefina su diseño de la siguiente manera. Coloque el símbolo utilizado con más frecuencia en una posición central más cerca de su mano fuerte. El segundo símbolo va a tu mano débil en posición central. El tercer símbolo se remonta a tu mano fuerte ... y así sucesivamente. Luego, se mueve gradualmente desde la posición central de las manos a las áreas más "distantes" del teclado. Cuando todo el teclado está lleno, continúa el proceso de asignación de teclas, pero esta vez con la tecla Shift presionada. La otra diferencia sería que no gira la mano fuerte y débil para cada símbolo cuando el Shift está abajo. Con la tecla de mayúsculas hacia abajo primero se llenarían las posiciones centrales en el teclado y luego se moverían a posiciones más distantes.
Cuando haga todo lo que haga, vuelva a realizar el paso 3 para el nuevo diseño para ver cómo se mejoró el diseño.
Puede que tengas que llevar tu teclado contigo todo el tiempo. En el lado positivo, nadie tocará su computadora. Te hará ver como un profesional.
Finalmente, no te olvides de compartir tus hallazgos.
Sigo sosteniendo que la velocidad de tipeo no es el factor principal en el tiempo que lleva completar un proyecto. Si es así, hay un gran problema (Semanas de codificación nos ahorra horas de planificación).
En cuanto a su pregunta, prefiero usar el diseño estándar, ya que significa que no tengo que pasar los primeros 10 minutos mirando estúpido cuando se presenta con un diseño de teclado estándar.
Algunos de los reemplazos que ha sugerido, por ejemplo, la fila superior con los caracteres especiales no hacen una onza de diferencia ya que el dedo exterior en el otro lado debería moverse para cambiar al mismo tiempo.
En mi humilde opinión, una cosa que ayuda a los diseños de encadenamiento anteriores es usar solo atajos de teclado. Se recomiendan Vim y Emacs. Hace que mover texto sea mucho más rápido.