プログラミング40年の歴史
(fabiensanglard.net)- 46歳を前に、40年間プログラミングしてきた経験から、従来の104キーキーボード・平面マウス・座り机の組み合わせは、前腕と肩の痛みをきっかけに見直しの対象となった
- マウスはEvoluent VerticalMouse 4のような垂直マウスで改善を感じ、その後はApple Magic Trackpadを中央に置いて左右の手を交互に使う方式へ移行した
- キーボードはKINESIS Freestyle2とAdvantage2を経てErgodox EZに落ち着き、分離幅の調整・カスタムファームウェア・レイヤー切り替え・長押し時の動作変更が中核機能となっている
- VIMモードはファイル移動、定義へのジャンプ、戻る操作などをマウスなしで行えるようにし、手の移動と手首のひねりを減らすことに向いている
- 電動スタンディングデスク、定期的なWall Angelストレッチ、退勤後のロッククライミングまで含め、長時間のプログラミングのための痛み・姿勢・ストレス管理環境を構築している
痛みのあとに変わった入力デバイス
- 40年間プログラミングしており、そのうち半分は職業として行ってきたが、長いあいだ104キーキーボード、平面マウス、座り机という標準構成を使っていた
- 10年ほど前、プログラミング中に前腕と肩の痛みが出始めたことで、作業環境を変え始めた
-
マウスとトラックパッド
- 垂直マウスは痛みの軽減に大いに役立ち、好みのモデルはEvoluent VerticalMouse 4である
- その後、Apple Magic Trackpadを中央に置き、左手と右手を交互に使う方式へ移行した
- 3本指でワークスペース切り替え、拡大・縮小などができる
- 以前はLinux/Windows向けドライバの確保が面倒だったが、今は整理された状態になっている
-
キーボード選定の過程
- 最初の人間工学キーボードはKINESIS Freestyle2で、左右を必要なだけ離せるため、手首を水平にまっすぐ保てた
- ただし
Control、Shift、Altでは依然として手首の動きが必要で、VIMで使うEscも左手首をひねる必要があり、テンティング角度も低かった - KINESIS Advantage2は親指で押せる選択肢が多い点は良かったが、固定幅であることはFreestyle2より後退した部分だった
- 最終的にErgodox EZが必要条件をすべて満たした
- 幅を広くも狭くも調整できる
- カスタムファームウェアが非常に柔軟
- 1回のキー入力で全キーを別のレイヤーに切り替えられる
- キーを長押しすると機能が変わるようにできる
- 個人レイアウトでは
DまたはKの長押しでShiftを代用し、{、[、(のような記号は長押しした単一キーでアクセスする別レイヤーに置いている - Ergodox EZを使ってからは、手首は3軸すべてで常に安静位置に保たれ、痛みなく一日中プログラミングできるようになった
- ハードウェアのチューニングも可能
- DROP Carbon keycaps
- pexonpcs.co.ukのカスタムケーブル
- 3Dプリントのlong legs
- Brown Gateron G Pro
- IBM Model Mのクリックキーボードのファンとして、最初のErgoはCherry MX Blueで組んだが、自宅では問題なくても同僚には不評だった
- 最も静かな選択肢はCherry MX Redで、BlueとRedの中間の選択肢はCherry MX Brownである
手をあまり動かさない作業スタイルと生活習慣
- 目標は、手をできるだけ動かさず、手首をできるだけひねらないことにある
- ほとんどのIDEはマウスクリックを要求するが、多くのエディタのVIMモードは、マウスなしでファイル移動、定義へのジャンプ、戻る操作を可能にする
-
デスクと姿勢
- 立っていると猫背で座り込まずに済み、姿勢が改善される
- Topsky legsとHome Depotのbutcher counter topで電動スタンディングデスクを作った
- 3つの位置メモリにより数秒で立ち姿勢と座り姿勢を切り替えられ、一日の中で交互に使うようにしている
-
ストレッチとストレス管理
- ときどき休憩を取りながらWall Angelを何度か行う
- 退勤後は仕事から切り離してストレスレベルを管理する
- ロッククライミングは登っている間に他のことを考えられないため、仕事の時間ではないのに浮かんでくる最適化アイデアを止めるのに向いている
1件のコメント
Hacker News のコメント
議論はあるだろうが、自分を救ってくれたのは、Emacs+コマンドラインのようなキーボード使用が多い環境を捨てて、Apple Xcodeへ移ったことだった
ビルドは今でもコマンドラインで行うことが多いが、コード編集とウィンドウ切り替えにはマウスをよく使う。Xcodeは望めば単なるテキストエディタとしても使えるし、コピー/貼り付けも、可能ならマウスで選択して行う
macOSの「Exposé」ボタンを設定したゲーミングマウスでウィンドウを探し、画面は27インチiMacを1台だけ使っている。Appleのトラックパッドも手を休ませるために使うが、1日か2日多用すると指が痛くなる
メカニカルキーボードも指を痛めるので、もっと良いキーボードやキーキャップを探している。19歳から45年間、パンチカード、ラインモードエディタ、TECO、TECO系のフルスクリーンエディタ、DEC EDT、Emacsなどを使ってきたし、viも知っているが、viが反復運動過多損傷(RSI)を解決するとは思わない
キーボードショートカットで効率的に編集する方法は分かっているが、今ではそれは間違った方向だと思っている。EmacsとHappy Hacking Keyboardを使っていた時期は、結局かなり痛みがひどかった
マウスを使っても遅くはなく、1日にまともなC++コードを2000行ほど書ける。ただしタイピングの観点ではC++は好きではない
33歳だが、関節痛のような問題はまだなく、同年代で自分より若い人や年上の人たちは、エルゴノミクスキーボード、マッサージ、ストレッチなどで痛みを減らそうとしている
7歳ごろから従来型のマウスとキーボードを使ってきて、1日中コンピュータの前にいても平気だ
最近は、じっと座っていられない性格がここまで役に立っていたのではないかと思う。椅子に深く沈み込んで座ったり、脚を上げたり、足を動かしたり、机に変な姿勢でもたれたり、体をひねってストレッチしたりする
痛いからではなく、ただ体がむずむずするのでそうしていることが多い。ただしプログラミングに深く集中すると動きが少なくなり、そのとき腕や指がこわばることもある。目も痛くなるが、おそらくまばたきが減るせいだと思う
ジムには最低週2回行っており、ロックダウン期間に運動も動きも減ったとき、腰痛やその他の問題が出た
またジムに行くようになると問題は消えたし、ものすごく重いものを持ち上げているわけではない。ベンチプレス100kgをする代わりに、たいてい70kgで終える。重く持ち上げることより動くことが重要で、目的が健康なら、ジムの人たちにもっと上げろと言われても必ずしもそうする必要はない
通常より低い机の高さと低い椅子の高さのほうが快適で、ノートPCは机の上でなければ疲れる。ソファで膝の上にノートPCを置いて使うと首が痛くなる
画面中央を見るために首を傾けないほうがよく、MacBookのトラックパッドを長時間使うと手首がつらくなる。マウスを使わないと不快で、手首を頻繁にひねったり曲げたりしてしまう
椅子は合うものもあるが理由はよく分からず、価格とはまったく関係なさそうだ
高すぎる枕で寝ると首の痛みや頭痛が起き、柔らかいマットレスより非常に硬いマットレスのほうが合っているように感じる。アジアではそのほうが一般的な気がする
長時間のタイピング、特に散文を書くときは少し痛むが、たいていすぐ良くなる。一方、博士課程のときに知っていた30歳くらいの人は、腕のサポーター、スタンディングデスク、エルゴノミクスキーボードとマウス、タイマーでの休憩まで全部やっていたのに、痛みがひどかった。遺伝的に運が悪いケースだ
要点は、どんな動きであれ腱と関節を活性化することで、実際に効果があるように見える
結局いちばん役に立ったのは、キーボードから手を離してストレッチするよう知らせてくれる休憩プログラムと、エルゴノミクスキーボード・マウスを併用することだった
詳細はここに書いてある: https://henrikwarne.com/2012/02/18/how-i-beat-rsi/
数年前、似たような前腕の痛みを感じ始め、分割型キーボードが大いに役立った
Arduinoと2つのフットペダルもプログラミングした。左ペダルはCTRL、右はSHIFT、両方を押すとALTになるようにして、とても効果があった
今は痛みをおおむね管理できているが、時々再発する。一時はプログラミングをやめなければならないのかと思い、本当に怖かった
若い開発者なら、予防1オンスは治療1ポンドに勝るという言葉を本気で受け止めるべきだ。今のうちにエルゴノミクス環境とストレッチ・運動に投資し、痛い状態でタイピングを押し通さず、もっと頻繁に休むべきだ。体を限界の先まで追い込むと、完全には元に戻らないかもしれない
https://github.com/anderspitman/ergo-pedals
Win - Alt - Ctrl - Space - Ctrl - Alt - Winになるようにしたこうすると親指でCtrlを、人差し指でAltを押せる。毎回反対側の修飾キーを使うように身につけ、たとえばCtrl-Sには右Ctrlを使う
この方法で、自分にとって非エルゴノミクス的だったキー入力の大半がなくなった
40年というのは本当にとんでもない時間だ。私は30年間やってきて、そのうち20年は報酬を得てやってきたし、それなりによく分かっているつもりだけれど、そのレベルではない
Fabienはほとんど半神のような存在だ。長い勤務時間まで考えると、この分野で10万時間に近いはずなのに、ここ1〜3年になってようやく本当に足場を固め始めたような感覚がある
この仕事は初日から驚くようなものを作れる一方で、何十年経ってもなお進行中の職業でもある。それでも、これが本当に好きだ
20年前よりはずっと多くのことを知るようになったのは確かだけれど、常にさらに層が増えていく感じがする。このサイトを見ているだけでも、数日おきに読むリストへ追加するものが見つかる
ある意味では、経験の天井に到達したと感じないのは良いことでもある
私の知る限り、速記はコンピュータ入力において最も人間工学的な方法だ
速記は、あるキーの組み合わせをある出力にマッピングする方式で、特定のマッピングを「theory」と呼ぶ
あるマッピングは音声、つまり単語の音に基づく。あるキーを「Kuh」、別のキーを「ah」、3つ目を「tuh」の音に対応させ、全部押してから離すと「cat」が出る、という具合だ。「Al」「Guh」「Or」「If」「Um」で「Algorithm」を作れば、8打ではなく5打で済む。効率を特に狙ったわけでもないのにそうなる
もう一つのマッピングは形を使うものだ。上段の3キーと下段中央の1キーが「T」のように見えるなら、Tから連想されるものにマッピングする
theoryは望むどんなマッピングでもよい。速記は1800年代後半に発明された略記に由来しており、既存のtheoryがたくさんあるので、自分で作る必要はない
よく使う単語や句を押しやすいキーにマッピングすることを「briefs」と呼ぶ。極端に活用すれば、リアルタイムの書き取りで分速370語も可能だ
もちろん、そこまで上手くなる必要はない。仕事の生産性には分速30語でも十分だし、数カ月間、1日15分ずつ練習すれば分速70語に到達できる。プログラマーならできるはずだ
一生コンピュータ入力をするつもりなら、QWERTYやDvorakのような簡単なキー出力マッピングに最適化するのではなく、速記を学ぶほうがよいと思う。PloverとJavelinを見るといい
私のキーボード使用はテキスト編集のショートカットと句読点がほとんどなので、速記がどれほど合うのか分からない
似たものとして、1〜3文字のbashエイリアスを50個以上集めた「辞書」がある
一部には「theory」もできた。gitやkubectlのサブコマンドやオプションに応じて名前のパターンが決まるエイリアス群があり、覚えやすい
非常によく使うコマンドでは記憶法を捨てて、コマンド名とは関係のない1〜2文字の名前を選ぶ。たとえば
r='cd -'だ。「r」を選んだのはEnterの反対側にあり、両手を交互に使えるからだ。たぶんこれも「brief」なのだと思うエイリアスを積み上げ始めたきっかけは、complete-alias[1]と、後の
progcomp_aliasというbashオプションを見つけたことだった。エイリアスとプログラム可能な補完のどちらか一方を選ぶ必要はなく、両方使えた[1]: https://github.com/cykerway/complete-alias
私のキーボードではTabとReturnを親指で押せる。ウィンドウマネージャー関連の作業、マルチモニターやウィンドウ管理も、手をキーボードから離さず、同じ手の2本の指で処理できる
私のキーボードは基本的にマクロキーボードで、「入力」はキーボードの特定のモードだ。viに似ているが、デスクトップ全体に適用される方式だ
分速120語以上で打ち、私が押すキーの大半は抽象化で、残りだけが文字だ
それでも、コンピュータを人間工学的に制御するには分割キーボードに勝るものはないと思う。速記には興味があったが、今の速度と快適さに到達できない可能性が高いのに、あまりに多くの努力が必要だ
プログラミングでより高い分速タイピングが役立つと感じたことはない
キャリア初期に一緒に働いていた人が、1週間ずっとテストした末に1文字だけ変える、という時期を経験していて、それが印象に残っている
そしてAPLプログラマーたちは「単語とは何のことですか?」という反応をするだろう
Vim初心者なら、かっこいいキーボードを買う前に、まず Escを別のキーにマッピングすべき
今の位置に最も重要なキーがあるのは理にかなわない。通常モードに戻るキーがESCなのは、昔はそのキーがホームポジションにはるかに近かったから
個人的にはCaps Lockが好み。各OSがこの簡単なリマッピングを容易にサポートしていて、システム全体に適用されるので、Vimモードを他の場所でも使える。私は主にzshとgdbで使っている
全体として、Escが近くにあるのはかなり便利。何をするにしてもいいが、愚かな歴史的理由のせいで無駄に苦しまないでほしい
Vimを使わない人でも、Caps LockとControlを入れ替えるだけで、コピー&ペーストをそれほど無理な姿勢でせずに済む
Vimユーザーには、Caps Lockを押し続けるとControl、軽く押すとEscapeになるようにマッピングすることを強く勧める
space、挿入モードの終了はshift+spaceにできる一部のターミナルはspaceのようなキーの修飾キー組み合わせに問題があるが、1〜2台のマシンでVimを使い、Kittyのようなものを使えるなら大丈夫だろう
15年ほど前に反復運動過多損傷があったが、解決策はキーの正確な中央をより意識して押すことだった。キーを押す前に触覚で正確な位置を把握すると助けになる
キーがキーボードの左端にあると、狙ったキーの左側のキーを誤って押す心配が減り、位置把握がしやすい。Caps Lockも左端にあるが、ESCは上端にもあるのでさらに助けになる
私の経験では、最も押しやすいキーはキーボードの隅にあるESCと左Controlだ。他の隅のキーである「pause/break」と右矢印はホームポジションから遠すぎて、より難しい
このサイトの多くの投稿で、手をできるだけ動かしたくないという欲求は理解できるが、その根拠は間違っていると思う。36キーキーボードのように手をほとんど動かさなくても、腕の筋肉で手をキーボードの上にずっと浮かせて支えなければならず、人間の脳は重力に逆らって筋肉を静的に保つより、動きを処理するほうが得意だ
テニスラケットでボールを打つときもバックスイングが人間工学的であるように、タイピングでも非常に速いバックスイングが反復運動過多損傷を防ぐうえで重要だと思う。正確な理由は分からないが、キーボード上で手を水平に動かすことが、関連する筋肉が「フリーズモード」に入る可能性を減らしてくれるのだと思う
Ctrl-[をより頻繁に使うようになった。Caps Lockのリマッピングを調べてみるつもり長くプログラミングしてきてタイピングも多いが、1990年ごろにインターネットで反復運動過多損傷の警告を見て注意したことと、自分に合ったやり方を見つけたおかげで、不調なく過ごしている
机に向かうときに重要なことの一つは、足が床に平らにつき、キーボードの高さがたいていの机より低い状態を好むという点。スタンディングデスクも使っている
似たタイプなら、電動昇降デスクを見るときに仕様の最低高を確認するべき。天板の厚みや水平調整のため、実際の最低高は1〜2インチ高くなることがある。特にAmazonの「3-stage」製品は「2-stage」製品より低く下がる
まれに低い固定高の机も見つかる。ある時、大学の実験室にあった白いラミネート机の脚が、同じシリーズのより低い補助テーブルの脚と互換性があることに気づき、夜にこっそり1セットを付け替えたこともある
椅子の肘掛けはいずれにせよ嫌いだし、低い机やキーボードトレイを使うと肘掛けがぶつかることがある
肘掛けを外したいなら、大金を使う前にきれいに外れるか確認すべき。肘掛け付きのAeronはかなりきれいに外れそうに見える。従来型の業務用オフィスチェアにも、うまくできているものがあった
一方で、あるオフィスチェアは肘掛けを外すと、重い溶接スチールフレームの突起が横に残り、いつか脚を裂くかもしれず危険。Steelcase Leap V2の肘掛けは外せるがきれいではなく、払った金額を考えると少しばかげて見える
「arm rest」という言葉は疲れた腕を休ませてくれるように聞こえるが、椅子を使っていて腕の疲労を感じたことはない。完全に機能不全なので必要なく、選択肢があれば外すし、肘掛け付きの椅子は買わない
他の方法としては、通勤時のようによく歩き、全体的に頻繁に立ち上がる。水筒やティーポットのように机に長く留まらせる物を使わず、水を一杯取りに行くといった小さなライフハックもしている。立ち上がらせてくれるものなら何でもよく、キッチンまで少し歩くのも良い。スタンディングデスクも素晴らしい
自分の問題のかなりの部分が肩に関係していると分かってからは、ときどき簡単な運動で肩をほぐしている。歩くことが助けになる理由もそれだ。水泳も良い
長くじっと座っていると肩がこり、手首や手へ向かう神経がその部位を通る。痛みを感じる場所と実際に問題がある場所が必ずしも同じとは限らない
立っていても座っていても、肘を空中に浮かせたままでいなければならないと非常にすぐ不快になるが、そうでなければ12〜14時間の作業でも問題ない
この部屋には見て見ぬふりをされている大問題がある。みんなわざと無視しているのか気になる。
ここでは各自が何をして何をしていないかを話しているが、巨大な問題には誰も触れていない。右利きか左利きかだ。
左利きは、右利きの多数派向けに作られた機器のせいで、右手も鍛えなければならない。優れた縦型マウスのほとんどは右手専用だし、実際ほとんどのマウスがそうだ。メインのマウスのバッテリーが切れたとき用に買った中古のゲーミングマウスも右手専用だ。
デジタルカメラはすべて右手専用で、携帯電話の多くも主に右利き向けだ。
私たち左利きは右手を使わなければならないが、ほとんどの右利きは左手をほとんど使わない。
20年前、30代半ばの頃に家でも右手でマウスを使い始めた。私は左利きだが、15〜20年にわたってサポート業務をしていて、顧客のコンピュータを設定されたまま使わなければならず、たいていマウスは右側にあった。
元恋人に変えてみたらと言われ、手の使用量がずっとバランスよくなった。疲れて痛む左手は休め、あまり使っていなかった右手が仕事を分担するようになった。
協調性を鍛えるために、右手で歯を磨くことも練習した。ロッククライミングのようなものは別として、出勤するために壁を登る必要はないが、ほぼ誰でも歯磨きはしなければならない。
左手をもっと使う方法を学び、左手でマウスを使ったり、タッチパッドを試したりするとよい。左手で歯を磨くことも覚えるべきだ。
手と手首への負担を分散すれば、何十年後かに感謝することになる。
右手首に痛みが出てからは Magic Trackpad を買ってキーボードの左側に置き、左手のタッチパッドと右手のマウスを交互に使っている。とてもよく合っていた。
私も40年間プログラミングをしていて60代前半だが、あれだけタイピングしてきたのに実際の手首の問題がないのは驚きだ。
長年 WASD+マウスのゲーマーでもあり、プログラミングよりゲームのほうが問題を起こしている気がする。
ただ、ロッククライミングをしているので前腕の筋肉はかなり発達している。これを考えると、子どもの頃から時々ひざが痛くなり、力が抜けていた問題を思い出す。解決策は、押す・蹴る筋肉を強化するために、重量をかけたレッグエクステンションをすることだった。
だから手首の問題も筋力トレーニングで乗り越えられるのではないかと思った。
ところが下まで読むと Fabien もクライマーなので、私の仮説は反証されるようだ。
40年には届かないが、1983〜2020年、つまり37年はやっていたと言える。平均的なプログラマーよりもコンピュータで文章を書く時間も多かったが、意味のある反復性ストレス障害の問題は経験しなかった。
議論はあるかもしれないが、理由の一つは私が伝統的なタッチタイピストではないことだと思っている。とはいえ遅いわけでもない。おそらく千人を超えるプログラマーと一緒に働いてきたが、私より明らかに速かったのはプログラマーではなく、私より長く働いていたプロの植字工である母だけだった。他のプログラマーで同じくらいに見えた人は数えるほどしかいない。
これが反復性ストレス障害がないことに関係していると考える理由は、私の7本指くらいを使うやり方では、手がキーボード上を常に動き回るからだ。
手首をたいてい少し不自然な同じ位置に固定したまま、指だけを動かすやり方ではない。そうしたやり方は、反復性ストレス障害の「反復」を最大化する。
手の動きを最小限にするのはよくない。手と手首を健康に保つには、体の他の筋肉・腱・靭帯の複合体と同じように、動かし続ける必要がある。運動と柔軟性の一般原則が手には当てはまらないと考えるのは愚かだ。