Idealny układ klawiatury do programowania [zamknięty]

89

Często słyszę narzekania, że ​​języki programowania, które intensywnie używają symboli dla zwięzłości, w szczególności C i C ++ (nie będę dotykać APL), są trudne do wpisania, ponieważ wymagają częstego używania klawisza Shift. Rok lub dwa temu sam się tym zmęczyłem, pobrałem program Microsoft Keyboard Layout Creator , wprowadziłem kilka zmian w moim układzie i ani razu nie obejrzałem się za siebie. Różnica prędkości jest zdumiewająca; dzięki tym kilku prostym zmianom jestem w stanie pisać kod w C ++ około 30% szybciej, w zależności oczywiście od tego, jak bardzo jest włochaty; a co najważniejsze, moja prędkość pisania zwykłym tekstem nie jest ograniczona.

Moje pytania są następujące: jakie alternatywne układy klawiatury istnieją w programowaniu, które zyskały popularność, czy któryś z nich jest nadal w użyciu, czy osobiście używasz jakiegoś zmienionego układu i jak można dalej zoptymalizować mój układ?

Dokonałem następujących zmian w standardowym układzie QWERTY. (Nie używam Dvoraka , ale warto wspomnieć o układzie programisty Dvoraka ).

  • Zamień liczby na symbole w górnym wierszu, ponieważ długie lub powtarzające się liczby literałów są zwykle zastępowane nazwanymi stałymi;
  • Zamień cudzysłowy na tyldę, ponieważ w wielu językach są rzadkie, ale destruktory są powszechne w C ++;
  • Zamień minus z podkreśleniem, ponieważ podkreślenia są powszechne w identyfikatorach;
  • Zamień nawiasy klamrowe na nawiasy kwadratowe, ponieważ bloki są częstsze niż indeksy dolne; i
  • Zamień podwójny cudzysłów na pojedynczy cudzysłów, ponieważ ciągi znaków są bardziej powszechne niż literały znakowe.

Podejrzewam, że ta ostatnia będzie prawdopodobnie najbardziej kontrowersyjna, ponieważ najbardziej przeszkadza w wyświetlaniu tekstu, wymagając użycia shift do wpisywania typowych skurczów. Ten układ znacznie zwiększył moją szybkość pisania w C ++, C, Javie i Perlu oraz nieco zwiększył ją w LISP i Pythonie.

Jon Purdy
źródło
32
Może po prostu myślę zbyt wolno - ale surowa prędkość pisania zwykle nie jest moim czynnikiem ograniczającym podczas tworzenia oprogramowania. Gdyby tak było, prawdopodobnie pomyślałbym, że robię coś złego.
Lucero,
9
@Lucero: Ogólnie rzecz biorąc , nie, ale kiedy (w końcu!) Zorientowałem się, co powinienem robić, im szybciej i wygodniej będę mógł to wpisać, tym lepiej. Kiedy już zrobisz wszystko, co myślisz, czasami jest po prostu dużo szlifowania kodu ... :-)
TJ Crowder
3
@Jon: Zdecydowanie polecam uczynienie tego CW przed zamknięciem jako subiektywne (co w końcu jest).
TJ Crowder,
20
@TJ: wykonane CW. Dobry układ to nie tylko kwestia surowej wydajności, ale raczej komfortu - ale komfort jest bardzo ważny dla wydajności.
Jon Purdy,
3
To zabawne, jak kilka osób cię uderzyło, sugerowałbym ich zignorować. Nie chodzi tylko o szybkość pisania (która jest istotna, jeśli potrafisz pisać na tyle, by móc „programować tak, jak myślisz”), ale przewaga nad tym ergonomia. Ale szybkość i ergonomia idą w parze: ruchy, które obciążają ręce, są powolne, zmęczenie prowadzi do błędów, a naprawianie tych podatków jeszcze bardziej. W dłuższej perspektywie dostosowanie układu klawiatury do własnych potrzeb może być różnicą między RSI a brakiem RSI.
po prostu ktoś

Odpowiedzi:

32

Nadal uważam, że szybkość pisania nie jest głównym czynnikiem wpływającym na czas ukończenia projektu. Jeśli tak, jest duży problem (tygodnie kodowania oszczędzają nam wiele godzin planowania).

Jeśli chodzi o twoje pytanie, wolę używać standardowego układu, ponieważ oznacza to, że nie muszę spędzać pierwszych 10 minut wyglądając głupio, gdy przedstawiam standardowy układ klawiatury.

Niektóre z zaproponowanych przez Ciebie zamian, np. Górny wiersz ze znakami specjalnymi, nie robi żadnej różnicy, ponieważ zewnętrzny palec drugiej ręki powinien przesuwać się w tym samym czasie.

IMHO Jedną rzeczą, która pomaga powyżej łączenia układów w łańcuchy, jest używanie tylko skrótów klawiaturowych. Zalecane są Vim i Emacs. Znacznie przyspiesza przenoszenie tekstu.

Yacoby
źródło
22
Och, nie, szybkość pisania w żadnym wypadku nie jest wąskim gardłem, ale jednocześnie, dlaczego pozwolić, aby coś tak głupiego jak klawiatura stanęło Ci na drodze? Nie miałem problemu z przełączaniem się między moim układem a innymi, ponieważ często używam obu; Po prostu wolę swoje. I muszę przyznać, że emacs przyspiesza programowanie - kiedy nie muszę szukać sekwencji klawiszy.
Jon Purdy,
4
Aha, i jednoczesność ruchów lewej i prawej ręki również nie robi różnicy: modyfikator nadal musi być wciśnięty przed uderzeniem w klawisz. Z pewnością różnica milisekund, ale znowu, po co sobie przeszkadzać? Programowanie z układem, który nie działa, przypomina programowanie na lepkiej klawiaturze.
Jon Purdy,
7
Utrzymuję, że utrzymując w pamięci kilka układów klawiatury, sabotujesz pamięć mięśniową, a tym samym spowalniasz pisanie.
JesperE
1
Innym problemem związanym z klawiszem Shift są sekwencje, w których wykonujesz naprzemiennie, więc obie ręce skaczą z górnego rzędu do klawisza Shift iz powrotem. Nie twierdzę jednak, że jest to wystarczająco częste, aby się martwić, ale rzeczy takie jak „(! * X)” mogą kwalifikować się jako irytujące.
Steve314
2
-1: nie wnosi nic do dyskusji (argument „wyglądający głupio” nie jest poparty ani jedną datą z doświadczenia, jest to obawa dotycząca przyszłości) i nie można go naprawić.
Evgeni Sergeev
19

Podszedłbym do twojego pytania w następujący sposób. Zadaniem jest takie zorganizowanie klawiatury, aby dla danego tekstu zminimalizować naciskanie klawiszy i ruch dłoni.

Kroki w kierunku możliwego rozwiązania. Stwórz program, który:

  1. Pobiera plik tekstowy z kodem źródłowym. (Im większy, tym lepszy iz różnych źródeł!)
  2. Liczy częstotliwość użycia każdego symbolu (jego obecność w tekście).
  3. (opcjonalnie) Na podstawie kroku 2: Program generuje liczbę uderzeń klawisza dla każdego symbolu oraz odległość, na jaką ręka musi się przesunąć od pozycji środkowej. W rezultacie będziesz mieć miarę, jak efektywny jest twój układ klawiatury.

Teraz ręcznie lub pisząc program Przedefiniuj swój układ w następujący sposób. Umieść najczęściej używany symbol w centralnej pozycji, bliżej swojej silnej ręki. Drugi symbol trafia do twojej słabej ręki na środkowej pozycji. Trzeci symbol wraca do twojej silnej ręki ... i tak dalej. Następnie stopniowo przechodzisz od centralnej pozycji dłoni do bardziej „odległych” obszarów klawiatury. Gdy cała klawiatura jest pełna, kontynuujesz proces przypisywania klawiszy, ale tym razem z wciśniętym klawiszem Shift. Inną różnicą byłoby to, że nie obracasz silnej i słabej ręki dla każdego symbolu, gdy Shift jest w dół. Z wciśniętym klawiszem Shift najpierw wypełniasz środkowe pozycje na klawiaturze, a następnie przechodzisz do bardziej odległych pozycji.

Po wykonaniu wszystkich czynności wykonaj ponownie krok 3 dla nowego układu, aby zobaczyć, jak układ został ulepszony.

Być może będziesz musiał nosić klawiaturę przez cały czas. Z drugiej strony nikt nie dotknie twojego komputera. Sprawi, że będziesz wyglądać jak profesjonalista.

Na koniec nie zapomnij podzielić się swoimi spostrzeżeniami.

Ge Spi
źródło
Bardzo podoba mi się ta odpowiedź: P
pjincz
Jeśli ktoś chciałby skomplikować sprawę, można by wziąć pod uwagę kombinacje znaków i spróbować naprzemiennie wykonywać ręce lub unikać uderzeń tym samym palcem (jak "kilo" na QWERTY)
niesamowita rzecz
15

Gram w tej chwili wariantem układu Colemak z dużymi zmianami symboli:

bez SHIFT:

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

z SHIFT:

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

Może przywrócę / klucz ...

Ale to nie jest oparte na żadnych rzetelnych badaniach i chciałbym również zobaczyć zoptymalizowany układ (Optymalizacja, w tym takie rzeczy, jak zmiana ręki itp., Także zachowanie ZXCV, ...) z korpusem opartym na kodzie źródłowym, ponieważ wszystkie te układy wydają się być zoptymalizowane tylko pod kątem prozy. Na przykład „f” jest bardzo popularną literą w języku C (jeśli, dla).

Aktualizacja: obecnie używam

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

z SHIFT:

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

Jest to oparte na częściowej optymalizacji 6-klawiszowej zamiany klawiszy, zaczerpniętej z Carpalx z zachowaniem zwykłych skrótów Wytnij / Kopiuj / Wklej / Cofnij i zmodyfikowanej, aby zapewnić lepszy dostęp do zwykłych znaków programowania.

Jan
źródło
1
Podoba mi się pomysł, aby znaki były domyślne zamiast liczb. czyli: shift + 1, aby uzyskać jeden, a naciśnięcie 1 daje!
Ray,
14

Utwórz prosty rejestrator klawiszy, a następnie policz, ile razy naciśnięto każdy klawisz. Uruchom go na dzień lub dwa, a następnie zapisz wynik w pliku tekstowym. Rób to od czasu do czasu. Nie ma znaczenia, jakiego układu używasz, ponieważ po prostu widzisz, które klawisze są używane najczęściej.

Jeśli chcesz zrobić dobry układ, nie możesz bać się odejścia od normy. Sugerowałbym umieszczenie pierwszych 11 klawiszy w głównym rzędzie, następnie 11 górnych klawiszy w górnym rzędzie (pozostaw 2 klawisze nad klawiszem powrotu jako najmniej używane), a następnie 3 górne 11 klawiszy jako dolny rząd . Teraz powinny zostać 4 klucze. Weź je i umieść w szczelinach - = i] \. Gratulacje! Stworzyłeś teraz świetny układ klawiatury do swoich celów! = D

Tgwizman
źródło
1
Bardzo dobra odpowiedź: klawiaturę należy oddać właścicielowi
Julien__
2
Jeśli chodzi o statystyki użytkowania klawiatury, istnieją już dobre programy, które mogą wyświetlać mapę popularności, na przykład ten: WhatPulse
Mihai MATEI
[Odwiedzanie komentarzy do starych postów] To naprawdę fajny (lub gorący;]) pomysł. Będę musiał sam to sprawdzić!
Tgwizman
10

Ogólnie uważam, że posiadanie dobrego edytora tekstu i wiedza, jak go używać, jest lepsze niż próba poprawienia szybkości pisania. Możliwość nagrywania i odtwarzania makr czasami ratuje życie, a wybór fragmentów kodu przypisanych skrótom może być przydatny, ponieważ zwykle istnieją ograniczenia językowe dotyczące tego, co można przekształcić w bibliotekę.

Mówiąc bardziej ogólnie, myślę, że rzeczywisty wzrost wydajności polega na wiedzy ...

  • Wiedzieć, jakie narzędzia i biblioteki są dostępne i jak z nich korzystać.
  • Znajomość ogólnej struktury kodu, nad którym pracujesz, a nie tylko jego odrobinę.
  • Znajomość kluczowych algorytmów, wzorców projektowych i idiomów, dzięki czemu nie musisz ich odkrywać na nowo.
  • Znając zasady na tyle dobrze, że możesz być elastyczny - wiesz, kiedy je łamać.
  • Znajomość swoich współpracowników oraz ich mocnych i słabych stron itp. - czyli wiedzieć, kiedy samemu coś wymyślić, ale także kiedy i kogo zapytać.

FWIW, nie twierdzę, że jestem silny w tym wszystkim. Zawsze byłem zbyt nastawiony na samodzielne rozwiązywanie problemów i ze zbyt silną tendencją do odkrywania na nowo koła i wielkich schematów architektonicznych.

W każdym razie mam takie podejrzenie, że czas spędzony na zmianie i nauce układów klawiatury byłby odwróceniem uwagi od ważniejszych kwestii.

Steve314
źródło
1
Zgadzam się z tobą pod każdym względem! Dobre wykorzystanie narzędzi i idiomów to po prostu dobre programowanie. Ale to jest pytanie o jedną bardzo konkretną rzecz i hej, piętnaście minut dwa lata temu zaoszczędziło mi od tego czasu rozsądnej frustracji.
Jon Purdy,
@Jon - rozumiem, ale myślę, że moje nawyki związane z pisaniem są już dość mocno zaprogramowane - zmiana byłaby ciężką pracą.
Steve314
-1: nie brzmi tak, jakby było oparte na doświadczeniach z alternatywnymi układami klawiatury; jest sprzeczne z moim doświadczeniem z nimi. Digresy wykraczające poza temat. Nie zapewnia konkretnych działań. Nie można naprawić.
Evgeni Sergeev
-4

Zmiana układu klawiatury jest złym pomysłem, ponieważ (być może) zwiększyłaby szybkość pisania na jednej klawiaturze, ale poważnie zaszkodziłaby szybkości pisania na innych klawiaturach lub na komputerach, na których nie masz specjalnego układu klawiatury. Odkryłem, że często lepiej jest dostosować się do ustawień domyślnych, że trzeba je zmieniać wszędzie. (Osobiście moje palce są mocno ukierunkowane na Emacsa, co powoduje wiele tarcia podczas pisania wszędzie indziej.)

JesperE
źródło
7
Z radością przełączam się między dwoma układami. Jon mówi, że minął „rok lub dwa” i nie ma problemów z podróżowaniem w tę iz powrotem. Zasadniczo YMMV.
TJ Crowder,
4
Uważam, że przełączanie między klawiaturami i układami klawiatury jest tak łatwe / trudne, jak przełączanie się między mówieniem w różnych językach - jeśli dobrze je znasz, po kilku minutach odzyskujesz pełną prędkość myśli.
liori
1
@liori: dobrze powiedziane, chociaż to, czy będzie to rzędu minut, czy sekund, zależy całkowicie od tego, jak jestem zmęczony. : P
Jon Purdy,
2
@Jason D: Ważne punkty, ale cieszę się, że mnie nie dotyczą ... Rzadko używam komputerów innych ludzi.
liori
2
@Liori. Wiele firm ma sale konferencyjne ze współdzielonymi komputerami. Wielu programistów pozwoli komuś innemu „kierować” swoim komputerem podczas oznaczania zespołu w trudnym problemie. Jeśli inni ODMAWIĄ dotykania twojego komputera z powodu niestandardowego układu, możesz utrudniać wspólne rozwiązywanie problemów. A dla Twojego pracodawcy eliminuje to większość osobistych korzyści, jakie możesz czerpać z wybranego układu. Pamiętaj, rozwój nie jest zazwyczaj jednym człowiekiem przeciwko światu. Zwykle odbywa się to jako zespół.
Jason D