web-dev-qa-db-fra.com

Une disposition de clavier idéale pour la programmation

J'entends souvent des plaintes selon lesquelles les langages de programmation qui font un usage intensif des symboles pour la brièveté, notamment C et C++ (je ne vais pas toucher APL), sont difficiles à taper car ils nécessitent une utilisation fréquente de la touche Maj. Il y a un an ou deux, j'en ai eu assez moi-même, j'ai téléchargé Keyboard Layout Creator de Microsoft, j'ai apporté quelques modifications à ma disposition et je n'ai jamais regardé en arrière. La différence de vitesse est stupéfiante; avec ces quelques changements simples, je suis capable de taper du code C++ environ 30% plus rapidement, en fonction bien sûr de la pilosité; le meilleur de tous, ma vitesse de frappe dans le texte courant ordinaire n'est pas compromise.

Mes questions sont les suivantes: quelles dispositions de clavier alternatives ont existé pour la programmation, qui ont gagné en popularité, sont-elles encore en usage moderne, utilisez-vous personnellement une disposition modifiée et comment optimiser ma disposition?

J'ai apporté les modifications suivantes à une disposition standard QWERTY. (Je n'utilise pas Dvorak , mais il y a une disposition programmeur Dvorak qui vaut mentionner.)

  • Remplacez les nombres par des symboles dans la ligne supérieure, car les nombres littéraux longs ou répétés sont généralement remplacés par des constantes nommées;
  • Swap backquote with tilde, because backquotes are rare in many languages ​​but destructors are common in C++;
  • Échangez moins avec un trait de soulignement, car les traits de soulignement sont courants dans les identificateurs;
  • Échangez les accolades avec des crochets, parce que les blocs sont plus courants que les indices; et
  • Échangez les guillemets doubles par des guillemets simples, car les chaînes sont plus courantes que les littéraux de caractères.

Je soupçonne que ce dernier sera probablement le plus controversé, car il interfère le plus avec le texte en cours en nécessitant l'utilisation du décalage pour taper les contractions courantes. Cette disposition a considérablement augmenté ma vitesse de frappe en C++, C, Java et Perl, et l'a quelque peu augmentée en LISP et en Python.

78
Jon Purdy

Je soutiens toujours que la vitesse de frappe n'est pas le principal facteur dans le temps nécessaire à la réalisation d'un projet. Si c'est le cas, il y a un gros problème (des semaines de codage nous font gagner des heures de planification).

Concernant votre question, je préfère utiliser la disposition standard car cela signifie que je n'ai pas à passer les 10 premières minutes à avoir l'air stupide quand on me présente une disposition de clavier standard.

Certains des remplacements que vous avez suggérés, par exemple la rangée du haut avec les caractères spéciaux ne fait aucune différence, car le doigt extérieur, d'autre part, devrait se déplacer pour se déplacer en même temps.

IMHO Une chose qui aide au-dessus des dispositions de chaînage est d'utiliser uniquement des raccourcis clavier. Vim et Emacs sont recommandés. Cela permet de déplacer le texte beaucoup plus rapidement.

32
Yacoby

J'aborderais votre question de la manière suivante. La tâche consiste à organiser un clavier de manière à minimiser les touches et le mouvement de la main pour un texte donné.

Étapes vers une solution possible. Créez un programme qui:

  1. Prend un fichier texte avec le code source. (Le plus grand sera le mieux et provenant de diverses sources!)
  2. Compte la fréquence d'utilisation de chaque symbole (sa présence dans le texte).
  3. (facultatif) Basé sur l'étape 2: Le programme génère le nombre de coups de touche pour chaque symbole plus la distance à parcourir par rapport à la position centrale. En conséquence, vous aurez une mesure de l'efficacité de votre disposition de clavier.

Maintenant manuellement ou en écrivant un programme Redéfinissez votre mise en page de la manière suivante. Placez le symbole le plus fréquemment utilisé dans une position centrale plus proche de votre main forte. Le deuxième symbole va à votre main faible en position centrale. Le troisième symbole remonte à votre main forte ... et ainsi de suite. Ensuite, vous vous déplacez progressivement de la position centrale des mains vers des zones plus "distantes" du clavier. Lorsque tout le clavier est plein, vous continuez le processus d'attribution des touches, mais cette fois avec la touche Maj enfoncée. L'autre différence serait que vous ne faites pas tourner la main forte et faible pour chaque symbole lorsque le Maj est baissé. Avec la touche Maj enfoncée, vous remplissez d'abord les positions centrales du clavier, puis vous déplacez vers des positions plus éloignées.

Lorsque vous faites tout cela, répétez l'étape 3 pour la nouvelle mise en page pour voir comment la mise en page a été améliorée.

Vous devrez peut-être toujours emporter votre clavier avec vous. Du bon côté, personne ne touchera votre ordinateur. Cela vous fera ressembler à un Pro.

Enfin, n'oubliez pas de partager vos résultats.

14
Ge Spi

Je joue avec une variante de la disposition de Colemak en ce moment avec de gros changements de symboles:

sans SHIFT:

`- {} []; <> () _ =
q w f p g j l u y */# \
a r s t d h n e i o '
z x c v b k m,. !

avec SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 & +
Q W F P G J L U Y @ ^ $ |
A R S T D H N E I O "
Z X C V B K M%:?

Je vais peut-être restaurer la clé/...

Mais cela n'est basé sur aucune recherche sonore, et j'aimerais aussi voir une mise en page optimisée (optimisation comprenant des choses comme la modification de la main, etc., également la préservation ZXCV, ...) avec un corpus basé sur le code source, car toutes ces mises en page semblent être optimisé pour la prose uniquement. Par exemple, "f" est une lettre très courante en C (si, pour).

Mise à jour: j'utilise actuellement

`- {} [] @ <> () _ =
q w k r g y u l p *; #
a s f t d h n e i o '\
\z x c v b j m,. /

avec SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 ^ +
Q W K R G Y U L P &! $
A S F T D H N E I O "|
| Z X C V B J M%:?

Ceci est basé sur une optimisation partielle de 6 touches de swap tirée de Carpalx avec conservation des raccourcis habituels Couper/Copier/Coller/Annuler et modifiés pour donner un meilleur accès aux caractères de programmation habituels.

12
Jan

Faites un simple enregistreur de frappe, puis comptez le nombre de fois que chaque touche est enfoncée. Exécutez-le pendant un jour ou deux, puis enregistrez la sortie dans un fichier texte. Faites-le de temps en temps. Peu importe la disposition que vous utilisez, car vous voyez simplement quelles touches sont les plus utilisées.

Si vous voulez faire une bonne mise en page, vous ne pouvez pas avoir peur de vous éloigner de la norme. Je suggérerais de placer les 11 premières touches le long de la ligne d'accueil, puis les 11 premières touches suivantes comme ligne supérieure (laissez les 2 clés au-dessus de la touche de retour comme clés les moins utilisées), puis les 3ièmes 11 premières touches comme ligne inférieure . Il devrait rester 4 clés maintenant. Prenez-les et mettez-les dans les emplacements - = et] \. Félicitations! Vous avez maintenant créé une excellente disposition de clavier pour vos besoins! = D

10
Tgwizman

Dans l'ensemble, je pense qu'il est préférable d'avoir un bon éditeur de texte et de savoir comment l'utiliser que d'essayer d'améliorer votre vitesse de frappe. La possibilité d'enregistrer et de relire des macros est parfois une bouée de sauvetage, et une sélection d'extraits de code attribués par raccourci peut être pratique car il y a normalement des limites imposées par la langue sur ce qui peut être transformé en bibliothèque.

Plus généralement, je pense que les véritables améliorateurs de productivité sont tous liés à la connaissance ...

  • Savoir quels outils et bibliothèques sont disponibles et comment les utiliser.
  • Connaître la structure globale du code sur lequel vous travaillez, pas seulement votre petit peu.
  • Connaître les algorithmes clés, les modèles de conception et les idiomes pour que vous n'ayez pas à les réinventer.
  • Connaître suffisamment les règles pour être flexible - vous savez quand les enfreindre.
  • Connaître vos collègues et leurs forces, faiblesses, etc. - c'est-à-dire savoir quand trouver quelque chose par vous-même, mais aussi quand et à qui demander.

FWIW, je ne prétends pas être fort sur tout cela. J'ai toujours été trop partisan de résoudre les problèmes moi-même et avec une tendance trop forte à réinventer la roue et les grands projets architecturaux.

Quoi qu'il en soit, je soupçonne simplement que le temps passé à changer et à apprendre les dispositions du clavier serait une distraction pour les problèmes plus importants.

9
Steve314