Programlama için İdeal Klavye Düzeni [kapalı]


89

Kısalık için sembolleri yoğun şekilde kullanan programlama dillerinin, en önemlisi C ve C ++ (APL'ye dokunmayacağım), shift tuşunun sık kullanılmasını gerektirdiği için yazmanın zor olduğuna dair şikayetleri sık sık duyuyorum. Bir veya iki yıl önce, kendimden bıktım, Microsoft'un Klavye Düzeni Oluşturucusunu indirdim , düzenimde birkaç değişiklik yaptım ve bir kez olsun geriye bakmadım. Hız farkı hayret verici; Bu birkaç basit değişiklikle, elbette ne kadar tüylü olduğuna bağlı olarak C ++ kodunu yaklaşık% 30 daha hızlı yazabiliyorum; en iyisi, sıradan çalışan metinde yazma hızımdan ödün verilmiyor.

Sorularım şunlar: programlama için popüler olan hangi alternatif klavye düzenleri mevcuttu, bunlardan herhangi biri hala modern kullanımda mı, kişisel olarak değiştirilmiş herhangi bir düzeni kullanıyor musunuz ve düzenim nasıl daha fazla optimize edilebilir?

Standart bir QWERTY düzeninde aşağıdaki değişiklikleri yaptım. ( Dvorak kullanmıyorum ama bahsetmeye değer bir programcı Dvorak düzeni var.)

  • Numaraları üst satırdaki sembollerle değiştirin , çünkü uzun veya tekrarlanan değişmez sayılar genellikle adlandırılmış sabitlerle değiştirilir;
  • Geri alıntıyı tilde ile değiştirin, çünkü birçok dilde ters alıntılar nadirdir, ancak C ++ 'da yıkıcılar yaygındır;
  • Eksi alt çizgiyi alt çizgi ile değiştirin, çünkü tanımlayıcılarda alt çizgiler yaygındır;
  • Küme parantezlerini köşeli parantezlerle değiştirin, çünkü bloklar alt simgelerden daha yaygındır; ve
  • Çift tırnağı tek tırnakla değiştirin, çünkü dizeler karakter değişmezlerinden daha yaygındır.

Bu sonuncunun muhtemelen en tartışmalı olacağından şüpheleniyorum, çünkü ortak kasılmaları yazmak için vardiya kullanımını gerektirerek akan metne en çok müdahale ediyor. Bu düzen C ++, C, Java ve Perl'de yazma hızımı önemli ölçüde artırdı ve LISP ve Python'da biraz artırdı.


32
Belki de sadece çok yavaş düşündüğüm için - ancak ham yazma hızı genellikle yazılım geliştirirken benim sınırlayıcı faktörüm değildir. Öyle olsaydı, muhtemelen yanlış bir şey yaptığımı düşünürdüm.
Lucero

9
@Lucero: Genel olarak , hayır, ama (sonunda!) Ne yapmam gerektiğini anladığımda, ne kadar hızlı ve rahat yazabilirsem o kadar iyi. Düşüncenizi bir kez yaptıktan sonra, bazen yapılacak çok fazla kod öğütme vardır ... :-)
TJ Crowder

3
@Jon: Subjektif olarak kapanmadan önce bunu bir CW yapmanızı şiddetle tavsiye ediyoruz (sonuçta öyle).
TJ Crowder

20
@TJ: CW yaptı. İyi bir düzen, rahatlık olduğu kadar ham performans meselesi değildir - ancak konfor, performans için çok önemlidir.
Jon Purdy

3
Pek çok kişi tarafından ezilmen çok komik, onları görmezden gelmeni öneririm. Sadece yazma hızı değil ( "düşündüğünüz gibi programlayabilecek kadar yazabiliyorsanız bu bir faktördür), ergonomi bunu gölgede bırakır. Ancak hız ve ergonomi birlikte hareket eder: ellerinizi zorlayan hareketler yavaş gerçekleşir, yorgunluk hatalara yol açar ve bu vergileri ellerinizi daha da fazla sabitler. Ve uzun vadede, klavye düzeninizi ihtiyaçlarınıza uyacak şekilde ayarlamak, RSI veya RSI olmaması arasındaki fark olabilir.
just somebody

Yanıtlar:


32

Hala yazım hızının bir projenin tamamlanması için geçen sürede ana faktör olmadığını düşünüyorum. Eğer öyleyse, büyük bir sorun var (Haftalar süren kodlama bizi planlama saatlerinden kurtarır).

Sorunuzla ilgili olarak, standart bir klavye düzeni sunulduğunda ilk 10 dakikayı aptal görünmek zorunda kalmadığım için standart düzeni kullanmayı tercih ediyorum.

Önerdiğiniz değişikliklerin bazıları, örneğin özel karakterlerin bulunduğu üst satır, diğer yandan dış parmağın aynı anda kayması için hareket etmesi gerektiğinden, bir ons fark yaratmaz.

IMHO Zincirleme düzenlerinin üzerinde yardımcı olan bir şey, yalnızca klavye kısayollarını kullanmaktır. Vim ve Emacs önerilir. Metnin taşınmasını çok daha hızlı hale getirir.


22
Hayır, yazma hızı hiçbir şekilde bir darboğaz değildir, ama aynı zamanda neden klavye kadar aptalca bir şeyin yolunuza çıkmasına izin veresiniz? Düzenim ve diğerleri arasında gidip gelmekte hiç sorun yaşamadım çünkü ikisini de sık sık kullanıyorum; Ben sadece benimkini tercih ederim. Ve itiraf etmeliyim ki, emacs programlamayı olabildiğince hızlı yapar - bir tuş dizisine bakmam gerekmediğinde.
Jon Purdy

4
Oh, ayrıca sol ve sağ el hareketlerinin eşzamanlılığı da bir fark yaratmaz: tuşa basılmadan önce değiştiricinin yine de basılı olması gerekir . Elbette milisaniyelik bir fark var, ama yine, neden kendinizi engelliyorsunuz? Sizin için çalışmayan bir düzen ile programlama, yapışkan bir klavyede programlama gibidir.
Jon Purdy

7
Hafızada birkaç klavye düzeni tutarak kas hafızanızı sabote ettiğinizi ve böylece yazmanızı yavaşlattığınızı düşünüyorum.
JesperE

1
Shift tuşuyla ilgili diğer sorun, değişmekte olduğunuz dizilerdir, bu nedenle her iki el de üst satırdan shift tuşuna ve geri atlıyor. Endişelenecek kadar yaygın olduğunu söylemiyorum ama "(! * X)" gibi şeyler rahatsız edici olabilir.
Steve314

2
-1: Tartışmaya herhangi bir katkı sağlamaz ("aptal görünme" argümanı deneyime ait tek bir veri tarafından desteklenmez, ileriye dönük bir endişedir) ve düzeltilemez.
Evgeni Sergeev

19

Sorunuza şu şekilde yaklaşırdım. Görev, klavyeyi, verilen metin için tuş vuruşlarını ve el hareketini en aza indirecek şekilde düzenlemektir.

Olası bir çözüme doğru adımlar. Şunları yapan bir program yapın:

  1. Kaynak kodlu bir metin dosyası alır. (Ne kadar büyükse o kadar iyi ve çeşitli kaynaklardan!)
  2. Her sembolün kullanım sıklığını (metindeki varlığını) sayar.
  3. (isteğe bağlı) 2. adıma göre: Program, her sembol için tuş vuruş sayısını ve ayrıca elin merkezi konumdan ne kadar uzağa gitmesi gerektiğini üretir. Sonuç olarak, klavye düzeninizin ne kadar etkili olduğunu bir ölçüye sahip olacaksınız.

Şimdi manuel olarak veya bir program yazarak Düzeninizi aşağıdaki şekilde yeniden tanımlayın. En sık kullanılan sembolü, güçlü elinize daha yakın bir merkezi konuma koyun. İkinci sembol, merkezi konumdaki zayıf elinize gider. Üçüncü sembol, güçlü elinize geri döner ... vb. Sonra yavaş yavaş ellerinizin orta konumundan klavyenin daha "uzak" alanlarına geçersiniz. Tüm klavye dolduğunda, tuş atama işlemine devam edersiniz ancak bu sefer Shift tuşuna basılır. Diğer fark, Shift aşağıdayken her sembol için güçlü ve zayıf eli döndürmemeniz olacaktır. Shift tuşunu aşağıya doğru kaydırdığınızda, önce klavyedeki merkezi konumları doldurursunuz ve ardından daha uzak konumlara geçersiniz.

Tüm bunları yaptığınızda, düzenin nasıl geliştirildiğini görmek için yeni düzen için 3. adımı tekrar gerçekleştirin.

Klavyenizi her zaman yanınızda taşımanız gerekebilir. İyi tarafta, hiç kimse bilgisayarınıza dokunmayacak. Sizi bir Profesyonel gibi gösterecek.

Son olarak, bulgularınızı paylaşmayı unutmayın.


Bu yanıtı gerçekten çok beğendim: P
pjincz

İşleri daha karmaşık hale getirmek istendiğinde, karakter kombinasyonlarını hesaba katabilir ve elleri değiştirebilir veya aynı parmak vuruşlarından kaçınmaya çalışabilir (QWERTY'de "kilo" gibi)
awe lotta

15

Şu anda Colemak düzeninin bir varyantıyla oynuyorum ve ağır sembol değişiklikleriyle:

SHIFT olmadan:

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

SHIFT ile:

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

Belki / anahtarını geri yüklerim ...

Ancak bu herhangi bir sağlam araştırmaya dayanmamaktadır ve ayrıca kaynak kodu tabanlı bir külliyat ile optimize edilmiş bir düzen (el değiştirme vb. Gibi şeyler içeren optimizasyon, ayrıca ZXCV koruması ...) görmeyi çok isterim, çünkü tüm bu düzenler yalnızca nesir için optimize edilebilir. Örneğin, 'f' C'de çok yaygın bir harftir (if, for).

Güncelleme: Şu anda kullanıyorum

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

SHIFT ile:

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

Bu, her zamanki Kes / Kopyala / Yapıştır / Geri Al kısayollarının korunmasıyla Carpalx'ten alınan ve normal programlama karakterlerine daha iyi erişim sağlamak için değiştirilen 6 tuşlu bir kısmi optimizasyona dayanmaktadır .


1
Karakterleri sayılar yerine varsayılan yapma fikrini seviyorum. yani: + 1'i bir almak için değiştirin ve 1'e basmak size verir!
Ray

14

Basit bir tuş kaydedici yapın, ardından her tuşa kaç kez basıldığını sayın. Bir veya iki gün çalıştırın, ardından çıktıyı bir metin dosyasına kaydedin. Bunu ara sıra yapın. En çok hangi tuşların kullanıldığını gördüğünüz için hangi düzeni kullandığınız önemli değildir.

İyi bir düzen oluşturmak istiyorsanız, normdan uzaklaşmaktan korkamazsınız. En üstteki 11 tuşu ana satıra koymanızı, ardından en üstteki sonraki 11 tuşu üst satıra koymanızı (en az kullanılan tuşlar olarak dönüş tuşunun üstündeki 2 tuşu bırakın), ardından 3. üstteki 11 tuşu alt satır olarak koymanızı öneririm . Artık 4 anahtar kalmış olmalı. Bunları alın ve - = ve] \ yuvalarına yerleştirin. Tebrikler! Artık amaçlarınız için harika bir klavye düzeni yaptınız! = D


1
Çok iyi cevap: klavye sahibine özel olmalıdır
Julien__

2
Klavye kullanım istatistikleri için, şunun gibi bir ısı
Mihai

[Eski gönderi yorumlarını ziyaret etmek] Bu gerçekten harika (veya hararetli;]) bir fikir. Bunu kendim kontrol etmem gerekecek!
Tgwizman

10

Genel olarak, iyi bir metin düzenleyiciye sahip olmanın ve onu nasıl kullanacağınızı bilmenin yazma hızınızı artırmaya çalışmaktan daha iyi olduğunu düşünüyorum. Makroları kaydedebilmek ve yeniden oynatabilmek bazen bir cankurtarandır ve kısayol tarafından atanmış kod parçacıkları seçimi kullanışlı olabilir çünkü neyin bir kitaplığa dönüştürülebileceğine dair normalde dil tarafından uygulanan sınırlar vardır.

Daha genel olarak, gerçek üretkenliği artırıcıların tamamen bilgi ile ilgili olduğunu düşünüyorum ...

  • Hangi araçların ve kitaplıkların mevcut olduğunu ve bunların nasıl kullanılacağını bilmek.
  • Sadece küçük parçanızın değil, üzerinde çalıştığınız kodun genel yapısını bilmek.
  • Anahtar algoritmaları, tasarım kalıplarını ve deyimleri bilmek, böylece onları yeniden icat etmek zorunda kalmazsınız.
  • Kuralları yeterince iyi bilmek, esnek olabilmek için - onları ne zaman çiğnemeniz gerektiğini bilirsiniz.
  • İş arkadaşlarınızı ve onların güçlü yanlarını, zayıf yönlerini vb. Bilmek - yani ne zaman bir şeyi kendiniz çözeceğinizi, aynı zamanda ne zaman ve kime soracağınızı bilmek.

FWIW, tüm bunlarda güçlü olduğumu iddia etmiyorum. Sorunları kendim çözme konusunda her zaman çok önyargılı oldum ve tekerleği ve büyük mimari şemaları yeniden icat etmeye yönelik çok güçlü bir eğilimim vardı.

Her neyse, klavye düzenlerini değiştirmek ve öğrenmek için harcanan zamanın daha önemli konulardan rahatsız olacağından şüpheleniyorum.


1
Her konuda sana katılıyorum! Araçları ve deyimleri iyi kullanmak sadece iyi bir programlamadır. Ama bu çok özel bir konu hakkında bir soru ve hey, iki yıl önce on beş dakika, o zamandan beri beni makul miktarda hayal kırıklığından kurtardı.
Jon Purdy

@Jon - noktayı anladım, ancak yazma alışkanlıklarımın şimdiye kadar oldukça güçlü bir şekilde programlandığını düşünüyorum - değişim zor bir iş olurdu.
Steve314

-1: Alternatif klavye düzenleriyle ilgili deneyime dayalı gibi görünmüyor; onlarla olan deneyimlerime aykırı. Konunun çok ötesinde bir konunun araları. Somut eylem öğeleri sağlamaz. Düzeltilemez.
Evgeni Sergeev

-4

Klavye düzenini değiştirmek kötü bir fikirdir çünkü (belki) bir klavyede yazma hızınızı artırır, ancak diğer klavyelerde veya özel klavye düzeninizin olmadığı bilgisayarlarda yazma hızınıza ciddi şekilde zarar verir. Kendinizi varsayılanlara, her yerde değiştirmek zorunda kalmanın genellikle daha iyi olduğunu buldum. (Şahsen, parmaklarım aşırı derecede Emacs önyargılı, bu da her yerde çok fazla yazım sürtünmesine neden oluyor.)


7
İki düzen arasında mutlu bir şekilde geçiş yapıyorum. Jon, "bir veya iki yıl" olduğunu ve ileri geri gitmekte hiçbir sıkıntısı olmadığını bildirdi. YMMV, temelde.
TJ Crowder

4
Klavye ve klavye düzenleri arasında geçiş yapmak, farklı dillerde konuşmak arasında geçiş yapmak kadar kolay / zor buluyorum - eğer onları iyi biliyorsanız, birkaç dakika sonra tam düşünme hızına kavuşursunuz.
liori

1
@liori: iyi söyledin, yine de dakikalar mı yoksa saniye mi, tamamen ne kadar yorgun olduğuma bağlı. : P
Jon Purdy

2
@Jason D: Geçerli noktalar, ama benim için geçerli olmadıklarına sevindim ... Nadiren başkalarının bilgisayarlarını kullanıyorum.
liori

2
@ Liori. Pek çok şirket, paylaşılan bilgisayarlara sahip konferans salonlarına sahiptir. Ve pek çok geliştirici, zor bir sorunu etiketleme sırasında başka birinin bilgisayarlarını "sürmesine" izin verir. Başkaları, standart olmayan düzeniniz nedeniyle bilgisayarınıza dokunmayı REDDEDİYORSA, işbirliğine dayalı problem çözmeyi engelliyor olabilirsiniz. Ve işvereniniz için, bu , seçilen düzen ile elde ettiğiniz kişisel faydaların büyük kısmını ortadan kaldırır . Unutmayın, gelişme genellikle dünyaya karşı bir adam değildir. Genellikle ekip olarak yapılır.
Jason D
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.