Um layout de teclado ideal para programação [fechado]

87

Freqüentemente ouço reclamações de que linguagens de programação que fazem uso intenso de símbolos para abreviar, principalmente C e C ++ (não vou tocar em APL), são difíceis de digitar porque exigem o uso frequente da tecla shift. Um ou dois anos atrás, eu mesmo me cansei disso, baixei o Criador de layout de teclado da Microsoft , fiz algumas mudanças em meu layout e nunca olhei para trás. A diferença de velocidade é impressionante; com essas poucas mudanças simples, sou capaz de digitar código C ++ cerca de 30% mais rápido, dependendo, é claro, de quão complicado ele é; o melhor de tudo é que minha velocidade de digitação em textos corridos comuns não é comprometida.

Minhas perguntas são as seguintes: quais layouts de teclado alternativos existiram para programação, que ganharam popularidade, algum deles ainda está em uso moderno, você pessoalmente usa algum layout alterado e como meu layout pode ser otimizado ainda mais?

Fiz as seguintes alterações em um layout QWERTY padrão. (Eu não uso Dvorak , mas há um layout de Dvorak para programador que vale a pena mencionar.)

  • Troque números por símbolos na linha superior, porque números literais longos ou repetidos são normalmente substituídos por constantes nomeadas;
  • Troque crase por til, porque crase são raros em muitas linguagens, mas destruidores são comuns em C ++;
  • Troque o sinal de menos por sublinhado, porque os sublinhados são comuns em identificadores;
  • Troque as chaves por colchetes, porque os blocos são mais comuns do que os subscritos; e
  • Troque aspas duplas por aspas simples, porque strings são mais comuns do que literais de caracteres.

Suspeito que este último provavelmente será o mais controverso, pois interfere mais com o texto corrido, exigindo o uso de shift para digitar as contrações comuns. Este layout aumentou significativamente minha velocidade de digitação em C ++, C, Java e Perl, e aumentou um pouco em LISP e Python.

Jon Purdy
fonte
32
Talvez seja apenas porque eu estou pensando muito devagar - mas a velocidade de digitação bruta geralmente não é meu fator limitante ao desenvolver software. Se fosse, provavelmente pensaria que estou fazendo algo errado.
Lucero de
9
@Lucero: De modo geral , não, mas quando eu (finalmente!) Descobrir o que devo fazer, quanto mais rápido e confortável eu puder digitar, melhor. Depois de pensar muito, às vezes há muito trabalho de moagem de código a fazer ... :-)
TJ Crowder
3
@Jon: Recomendo fortemente que este seja um CW antes de ser encerrado como subjetivo (o que, afinal, é).
TJ Crowder
20
@TJ: feito CW. Um bom layout não é tanto uma questão de desempenho bruto, mas de conforto - mas o conforto é muito importante para o desempenho.
Jon Purdy
3
É engraçado como você foi atacado por algumas pessoas, eu sugiro ignorá-las. Não se trata apenas da velocidade de digitação (que é um fator se você consegue digitar o suficiente para "programar como pensa"), a ergonomia supera isso. Mas velocidade e ergonomia andam juntas: movimentos que sobrecarregam suas mãos são lentos para realizar, o cansaço leva a erros e conserta ainda mais as suas mãos. E, a longo prazo, ajustar o layout do teclado para atender às suas necessidades pode ser a diferença entre RSI ou não RSI.
apenas alguém de

Respostas:

30

Ainda sustento que a velocidade de digitação não é o principal fator no tempo que leva para um projeto ser concluído. Se for, há um grande problema (semanas de codificação economizam horas de planejamento).

Em relação à sua pergunta, prefiro usar o layout padrão, pois isso significa que não tenho que passar os primeiros 10 minutos parecendo estúpido quando apresentado a um layout de teclado padrão.

Algumas das substituições que você sugeriu, por exemplo, a linha superior com os caracteres especiais não fazem a menor diferença, pois o dedo externo, por outro lado, deve mover-se para se deslocar ao mesmo tempo.

IMHO Uma coisa que ajuda acima de layouts de encadeamento é usar apenas atalhos de teclado. Vim e Emacs são recomendados. Isso torna a movimentação do texto muito mais rápida.

Yacoby
fonte
20
Oh, não, a velocidade de digitação não é um gargalo de forma alguma, mas ao mesmo tempo, por que deixar algo tão bobo como um teclado ficar no seu caminho? Não tive problemas para alternar entre meu layout e os outros, porque uso ambos com frequência; Eu simplesmente prefiro o meu. E devo admitir, o emacs torna a programação mais rápida possível - quando não preciso procurar uma sequência de teclas.
Jon Purdy de
4
Ah, e a simultaneidade dos movimentos da mão esquerda e direita também não faz diferença: o modificador ainda precisa ser pressionado antes que a tecla seja pressionada . Uma diferença de milissegundos, certamente, mas, novamente, por que se atrapalhar? Programar com um layout que não funciona para você é como programar em um teclado aderente.
Jon Purdy
6
Afirmo que, ao manter vários layouts de teclado na memória, você está sabotando a memória muscular e, portanto, tornando a digitação mais lenta.
JesperE
1
O outro problema com a tecla shift são as sequências em que você está alternando, de modo que ambas as mãos saltam da linha superior para a tecla shift e vice-versa. Não estou dizendo que é comum o suficiente para se preocupar, mas coisas como "(! * X)" podem ser qualificadas como irritantes.
Steve314
1
-1: Não contribui em nada para a discussão (o argumento da "aparência estúpida" não é apoiado por nenhum dado da experiência, é uma preocupação voltada para o futuro) e não pode ser corrigido.
Evgeni Sergeev
16

Eu abordaria sua pergunta da seguinte maneira. A tarefa é organizar um teclado de forma a minimizar os toques nas teclas e o movimento das mãos para um determinado texto.

Passos em direção a uma possível solução. Faça um programa que:

  1. Obtém um arquivo de texto com o código-fonte. (Quanto maior, melhor e de várias fontes!)
  2. Conta a frequência de uso de cada símbolo (sua presença no texto).
  3. (opcional) Com base na etapa 2: O programa gera a contagem de batidas de tecla para cada símbolo mais a distância que a mão deve percorrer da posição central. Como resultado, você terá uma avaliação da eficácia do layout do teclado.

Agora manualmente ou escrevendo um programa Redefina seu layout da seguinte maneira. Coloque o símbolo usado com mais frequência em uma posição central, mais perto de sua mão forte. O segundo símbolo vai para a sua mão fraca na posição central. O terceiro símbolo volta para sua mão forte ... e assim por diante. Em seguida, você move gradualmente da posição central das mãos para áreas mais "distantes" do teclado. Quando todo o teclado estiver cheio, você continua o processo de atribuição de teclas, mas desta vez com a tecla Shift pressionada. A outra diferença é que você não gira a mão forte e fraca para cada símbolo quando o Shift está pressionado. Com a tecla shift pressionada, primeiro você preenche as posições centrais do teclado e, em seguida, passa para posições mais distantes.

Ao fazer tudo isso, execute a etapa 3 novamente para o novo layout para ver como o layout foi aprimorado.

Você pode ter que carregar o teclado com você o tempo todo. Pelo lado positivo, ninguém tocará em seu computador. Isso vai fazer você parecer um profissional.

Finalmente, não se esqueça de compartilhar suas descobertas.

Ge Spi
fonte
Eu realmente gosto desta resposta
,:
13

Estou brincando com uma variante do layout Colemak no momento, com grandes mudanças de símbolos:

sem SHIFT:

`- {} []; <> () _ =
qwfpgjluy * / # \
arstdhneio '
zxcvbkm,. !

com SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 & +
QWFPGJLUY @ ^ $ |
ARSTDHNEIO "
ZXCVBKM%:?

Talvez eu restaure a chave / ...

Mas isso não é baseado em nenhuma pesquisa sólida, e eu também adoraria ver um layout otimizado (otimização incluindo coisas como alteração de mãos, etc, também preservação de ZXCV, ...) com um corpus baseado em código fonte, porque todos esses layouts parecem ser otimizado apenas para prosa. Por exemplo, 'f' é uma letra muito comum em C (if, for).

Atualização: Atualmente estou usando

`- {} [] @ <> () _ =
qwkrgyulp *; #
asftdhneio '\
\ zxcvbjm,. /

com SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 ^ +
QWKRGYULP &! $
ASFTDHNEIO "|
| ZXCVBJM%:?

Isso é baseado em uma otimização parcial de troca de 6 teclas tirada de Carpalx com preservação dos atalhos Cortar / Copiar / Colar / Desfazer usuais e modificados para dar um melhor acesso aos caracteres de programação usuais.

janeiro
fonte
1
Gosto da ideia de tornar os caracteres padrão em vez dos números. ou seja: shift + 1 para obter um, e pressionando 1 dá a você!
Ray,
12

Faça um registro de chaves simples e conte o número de vezes que cada tecla é pressionada. Execute-o por um ou dois dias e salve a saída em um arquivo de texto. Faça isso de vez em quando. Não importa o layout que você está usando, pois você está apenas vendo quais teclas estão sendo mais usadas.

Se você deseja fazer um bom layout, não pode ter medo de fugir da norma. Eu sugiro colocar as 11 primeiras chaves ao longo da linha inicial, depois as próximas 11 chaves superiores como a linha superior (deixe as 2 chaves acima da tecla de retorno como as menos usadas) e, em seguida, as 11 primeiras chaves superiores como a linha inferior . Deve haver 4 chaves restantes agora. Pegue-os e coloque-os nos slots - = e] \. Parabéns! Agora você criou um ótimo layout de teclado para seus propósitos! = D

Tgwizman
fonte
1
Muito boa resposta: o teclado deve ser personalizado para o proprietário
Julien__
1
Para estatísticas de uso do teclado, já existem bons programas que podem mostrar um mapa de calor, como este: WhatPulse
Mihai MATEI
[Visitando comentários de postagens antigas] Essa é realmente uma ideia muito legal (ou acalorada;]). Vou ter que verificar isso sozinho!
Tgwizman
9

No geral, acho que ter um bom editor de texto e saber como usá-lo é melhor do que tentar melhorar a velocidade de digitação. Ser capaz de gravar e reproduzir macros às vezes é um salva-vidas, e uma seleção de fragmentos de código atribuídos por atalho pode ser útil porque normalmente há limites impostos pela linguagem sobre o que pode ser transformado em uma biblioteca.

De maneira mais geral, acho que os verdadeiros aumentadores de produtividade são todos sobre o conhecimento ...

  • Saber quais ferramentas e bibliotecas estão disponíveis e como usá-las.
  • Conhecer a estrutura geral do código em que você está trabalhando, não apenas um pouco.
  • Conhecer os principais algoritmos, padrões de design e expressões idiomáticas para que você não precise reinventá-los.
  • Conhecer as regras bem o suficiente para ser flexível - você sabe quando quebrá-las.
  • Conhecer seus colegas de trabalho e seus pontos fortes, fracos, etc. - ou seja, saber quando descobrir algo sozinho, mas também quando e a quem perguntar.

FWIW, não estou afirmando ser forte em todos eles. Sempre fui muito preconceituoso para resolver problemas sozinho e com uma tendência muito forte para reinventar a roda e grandes esquemas arquitetônicos.

De qualquer forma, suspeito que o tempo gasto mudando e aprendendo os layouts do teclado seria uma distração para questões mais importantes.

Steve314
fonte
Eu concordo com você em todos os aspectos! Fazer bom uso de ferramentas e expressões idiomáticas é apenas uma boa programação. Mas esta é uma pergunta sobre uma coisa muito específica e, ei, quinze minutos, dois anos atrás, me salvou de uma quantidade razoável de frustração desde então.
Jon Purdy
@Jon - entendi, mas acho que meus hábitos de digitação estão fortemente programados agora - mudar seria um trabalho árduo.
Steve314
-1: Não parece ser baseado na experiência com layouts de teclado alternativos; vai contra minha experiência com eles. Digresses muito além do assunto. Não fornece itens de ação concretos. Não pode ser corrigido.
Evgeni Sergeev
-5

Alterar o layout do teclado é uma má ideia, pois (talvez) aumentaria sua velocidade de digitação em um teclado, mas prejudicaria gravemente sua velocidade de digitação em outros teclados ou em computadores onde você não tem seu layout de teclado especial. Eu descobri que geralmente é melhor se ajustar aos padrões, ter que alterá-los em todos os lugares. (Pessoalmente, meus dedos são fortemente influenciados pelo Emacs, o que causa muito atrito de digitação em todos os outros lugares.)

JesperE
fonte
6
Eu felizmente alterno entre dois layouts. Jon relata que já se passou "um ou dois anos" e ele não tem problemas para ir e voltar. YMMV, basicamente.
TJ Crowder
4
Acho que alternar entre teclados e layouts de teclado é tão fácil / difícil quanto alternar entre falar em diferentes idiomas - se você os conhece bem, após alguns minutos você recupera a velocidade total do pensamento.
liori
1
@liori: bem dito, embora seja na ordem de minutos ou segundos depende inteiramente de como estou cansado. : P
Jon Purdy
1
@liori "depois de alguns minutos ..." Parece que as empresas (multinacionais) e as nações padronizam os idiomas para alguns propósitos. 1) Velocidade de comunicação. 2) precisão de comunicação. Suspeito que padronizar layouts de teclado traz benefícios semelhantes.
Jason D
2
@Jason D: Pontos válidos, mas estou feliz que não se apliquem a mim ... Raramente uso os computadores de outras pessoas.
liori