※本記事は、Andrew Binstockによる”Really Know Your Tools“を翻訳したものです。


偉大なプログラマーは皆、主要ツールについての深い知識を持っている。ツールのエキスパートでないなら、必要な時間をかけること。その手はじめはここから

著者:Andrew Binstock

2019年10月16日

私の仕事でよいところの1つは、偉大な開発者や真のドメイン・エキスパート、テクニカル・イノベーター、そして「魔法使い」に出会えることです。そういった人々と話す中で、偉大なプログラマーを偉大たらしめているものは何かについて、たびたび議論することができました。偉大なプログラマーを観察してわかる特性は、「コードがきれいでたくさんのテストを書く」という安直な答えで表せるものではなく、高く評価されることがほとんどないものです。つまり、真に大成するためには、疑問点を表面だけでなく、深いところまで徹底的に調査することが必要だということがわかります。

私が個人的にエキスパートを観察してわかったのは、偉大な開発者はいくつかの特性を共有しているということです。その特性を(順不同で)挙げてみます。解決しようとしている問題を完全に理解する辛抱強さ。頭の中に多くの情報を同時に蓄えておく能力。小規模なものから大規模なものにすばやく移り、再び戻る能力。そして最後に、使っている主なツールについての深い知識です。こういった特性のうち、最初と最後は自分で簡単に身につけることができるものです。その他の2つは、どちらかといえば生来の能力に近いものです。しかしもちろん、訓練や懸命な努力によって獲得することもできます。

ツールについての深い知識を得るのは、20年前よりも現在の方が難しくなっています。現在のフルスタック開発者は、数十種類のツールを恒常的に使っているかもしれません。そのため、すべてを細部までマスターするというのは現実的でなくなっています。しかし、私が熟慮したうえで指摘しておきたいのは、主なツールは完全に使いこなせるようになっている必要があるということです。

基本的なことから考えてみましょう。皆さんは完全なブラインド・タッチができるでしょうか。自分の手を見ずにタイピングができないなら、徐々に自分を大変不利な立場に追いやっていることになります。仕事が遅くなるだけではありません。非常に認識しづらい形で、タイピングがさらに必要なちょっとしたことを避けたくなるはずです。たとえば、コードが数行では収まらないことを試そうとは思わず、繰り返し行っているタスクについて、ちょっとしたスクリプトを書いて自動化しようとも思わないでしょう。たとえタイピングが不完全であっても(皆さんは手元を見ずにすべての数字をタイプできるでしょうか。!=などはどうでしょう)、筋肉の記憶を鍛えるために使った時間は、スピードと、キーボードではなく画面だけに集中できる能力という形で報われるはずです。

次に、ソフトウェア・ツールについて考えてみましょう。皆さんは、エディタやIDEのことをどのくらい知っているでしょうか。多くの開発者は、頻繁に使ういくつかのコマンドは使いこなせますが、その他のコマンドはそうではありません。コードを入力してコンパイルし、テストを実行するという枠を越える場合、メニューやマウスを使わざるを得なくなります。こういった限定的な知識には、不完全なタイピングと同じような欠点があります。すなわち、仕事が遅くなり、新しいことを試すのを目には見えない形で避けたくなります。また、簡単なタスクを完了しようとする場合も、絶えず小さな中断に見舞われます。

次号には、『The Pragmatic Programmer』の書評を掲載する予定です。  

エディタやIDEを十分使いこなせるとは、どういうことでしょうか。『The Pragmatic Programmer』の20周年記念版で、David Thomas氏とAndrew Hunt氏は、真の意味で開発環境を使いこなすために必要と感じているものについて述べています。皆さんは、以下のことをすべてキーボードから行うことができるでしょうか。

  • カーソルを動かし、文字や単語、行、段落単位で選択する
  • 対応するデリミタ、関数、モジュールなど、構文単位でカーソルを動かす
  • 変更を行った後にコードのインデントを調整する
  • コード・ブロックを1回のコマンドでコメント化およびコメント解除する
  • 変更を元に戻す、やり直す
  • エディタ・ウィンドウを複数のパネルに分割し、その間を移動する
  • 特定の行番号に移動する
  • 選択した行を並べ替える
  • 文字列と正規表現の両方を検索し、以前の検索を繰り返す
  • 一時的に複数のカーソルを作成し、それぞれのカーソルでテキストを編集する
  • 現在のプロジェクトのコンパイル・エラーを表示する
  • 現在のプロジェクトのテストを実行する

私がこのリストに付け加えたいと思っているのは、コードをコミットしてセントラル・リポジトリにプッシュすることができる、コードをコンパイルすることができる、デバッガで問題のあるコードをステップ実行することができるという点です。

いずれかで「No」と答えた方も、大丈夫です(私も確実に含まれますが、そのような人はたくさんいます)。しかし、偉大なプログラマーの大多数は、こういったことのすべて(またはそのほとんど)を簡単に行う方法を知っているものです。Thomas氏とHunt氏は、必要なスキルを獲得できる方法を示しています。その中でもっとも重要なのは、「マウスに触れない」ということです。こうすることで、調べざるを得なくなり、コマンドも身につきます。

また、両氏はさらにその先の提案も行っています。エディタやIDEのすぐ外側で行っているタスクを見つけ、そのタスクを自動化するか、または容易にするプラグインを探すことです。こうすることで、主なツールに関する専門知識が増え、さらに多くの作業に対応できるようになります。

偉大なプログラマーとペアプログラミングを行ったことがある方なら、そういった人のスピードや器用さを実際に目の当たりにしているはずです。コードやテストを書いてすぐに、ウィンドウを開いてメモをとったりユーティリティを実行したりしてリファクタリングを行います。これを見るのは楽しいことです(そして実際、さまざまなソーシャル・メディアで見ることができます)。そのような人を目指しましょう。重要なのはツールを知ることです。

 

Java Magazine 日本版Vol.47の他の記事

Java 13のswitch式と再実装されたSocket APIの内側
Javaにテキスト・ブロックが登場
言語の内側:シールド型
TeaVMを使ってブラウザでJavaを動かす
クイズに挑戦:1次元配列(中級者向け)
クイズに挑戦:カスタム例外(上級者向け)
クイズに挑戦:ロケールの読取りと設定(上級者向け)
クイズに挑戦:関数型インタフェース(上級者向け)


Andrew Binstock

Andrew Binstock(javamag_us@oracle.com、@platypusguy):Java Magazine編集長。Dr. Dobb’s Journalの元編集長。オープンソースのiText PDFライブラリを扱う会社(2015年に他社によって買収)の共同創業者。16刷を経て、現在もロング・テールとして扱われている、Cでのアルゴリズム実装についての書籍を執筆。以前はUNIX Reviewで編集長を務め、その前にはC Gazetteを創刊し編集長を務めた。 妻とともにシリコン・バレーに住んでおり、コーディングや編集をしていないときは、ピアノを学んでいる。