Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2015-07-24

プログラマーが最速の仕事術を知っている理由 07:15

はじめに


 「最速」

 それはプログラマーなら誰もが心がけているキーワードである。

 プログラマーにとって最も重要な関心事は、効率化だ。

 熟練したプログラマーほど実際にはキーボードに向かわなくなるという。

 なぜか?

 

 それは、プログラミングに熟達すればするほど、むしろコードをガリガリ書く時間よりも書かない時間にこそ仕事の真髄があると解るからだ。

 熟練プログラマの仕事は一瞬で終わる。素人が数か月、ああでもないこうでもないと大騒ぎしてやっと終わるような仕事も、ものの数時間で終わらせるスーパープログラマーは確かに存在する。

 世界でもプログラマーほど個人の生産性の違いに大きな差がある職業も珍しい。

 執筆時点で、世界最速の男は100メートルを9秒58で走るウサイン・ボルトだ。彼が人類最速の男だとしよう。筆者は趣味でジョギングをしているが、1キロ走るのにだいたい5分かかる。ということはそのペースだと100メートルに30秒はかかることになる。スプリントレースとジョギングでは大きく異なるが、同じ「走る」という行為で比較すると、人類最速の男と、一般的中年男性の運動能力にはざっと10倍の差があるということがわかる。

 だが熟練したプログラマーは、軽々と素人の何百倍、何億倍という効率の差を見せる。

 例えば、こんなことがあった。

 アメリカのボストンの北にある大学で特別講義をやったときのことだ。

 

 筆者は生徒たちを前に、「今から90秒以内にゲームを作って見せます」と言って実際に彼らに時間を測るよう言った。

 それから実際にその場でゲームをプログラミングした。

 

 実際に「完成」と言うまでに要した時間は46秒だった。

 すると生徒の一人がたまらず笑い始めた。

 その笑いはなぜか向こうの教師にも広がり、しまいには教室全体が笑いに包まれた。

 

 「どういうことだ?」

 

 筆者がややムッとして聞くと、最初に笑い始めた彼が言った。

 

 「いや、実は我々がこの二週間、ゲームプログラミングの課題が出て、これまで散々四苦八苦しながらようやく出来たというのに、あなたは46秒でやってしまったから驚いて笑ってしまったんです」

 

 これはとても特殊な例だろうか。

 筆者はそうは思わない。

 

 プログラミングの世界では熟練したプログラマーのたった一瞬の思い付きが世界を永遠に変えてしまうことがある。

 Windows、Mac、iPhoneFacebookTwitter…そうした数々のものを生み出したのは皆プログラマーである。

 

 プログラマーは効率を最優先する。

 高速に仕事を終えることがプログラマーにとって最大の報酬だ。

 そしてプログラマーは自らが考えた手抜きの方法を、喜んで他のプログラマーと共有する。

 

 それを繰り返すことで、我々プログラマーは進化してきた。

 この進化のスピードは、極めて速い。

 

 19世紀末に初めてアメリカのハーマン・ホラリスという発明家が自動集計器を作ったとき、人力で13年掛かってしまう集計を、わずか18カ月で終えたという。つまり人間に対して8.6倍の効率で集計ができた。現在、成人男性と100ます計算で人間とコンピュータが速度を競うとすると、成人男性が平均2分であるのに対し、コンピュータは25ナノ秒で計算を終える。つまり48億倍の速度ということになる。この100年でのコンピュータの処理速度は5.6億倍にまで高速化した。地球が生まれてから現代までが約46億年だから、それに匹敵するような進歩を遂げているのがコンピュータの世界なのだ。


 人間が創り出した最も高速な移動手段は時速2万8千キロメートルで飛び、月まで到達したサターンV型ロケットだが、これは人間の歩行が時速4kmであることを考えると高々7000倍でしかない。これに対し、コンピュータの計算能力は人間の計算能力の実に48億倍に達する。

 

 そのコンピュータを自在に操るプログラマーにとって、進化についていけないことは即ち死を意味する。そしてコンピュータの進化とは即ち、効率化・高速化である。

 

 プログラマーだけが複雑な情報処理を最速に終わらせる方法を知っているのである。

 そして現代、仕事といえば大半が情報処理だ。

 ミーティング、プレゼンテーション、リサーチ、それらは全て情報処理の異なる側面に過ぎない。

 ホワイトカラーの仕事のなかで、情報処理でないものを探す方が難しいほどだ。

 

 であれば、最速の仕事術をプログラマーだけが知っているというのは言い過ぎにはならないだろう。


 なぜ、プログラマーは頭の使い方を心得ていると言えるのか。それは、プログラマーほど、自分が賢くないことを知っている人間はいないからだ。


 弁護士はヘマをして裁判に負けるし、MBAホルダーのコンサルタントは提案した事業が失敗しても責任はとらない。

 

 ところがプログラマーは、プログラマーだけは、自分の書いたプログラムにバグ(誤り)があるとき、それは100%自分の責任なのである。そしてバグのないプログラムは決して存在しないのだ。


 すなわち、プログラマーはどれだけ自分が思い上がろうとも、プログラムを書いている限り自分の知性の限界を思い知らされ続けることになる。それも他ならない、自らの唯一の相棒であるコンピュータによってだ。


 したがってプログラマーは常に自分の知性の限界を超え続けなければならないことを宿命づけられているのである。

 筆者とて、自分が完璧な存在だとは露ほどにも思ったことはない。

 ただ、情報処理の方法について他の職業に負けるのは恥だと考えている程度にはプライドがある。

 そして前述したように、ホワイトカラーの大半の仕事は情報処理である。

 したがって、最速の仕事術を常に求めているのはプログラマーであるということになる。


 本書は、そんな不遜なプログラマーによる、仕事術の本である。


 というわけで「最速の仕事術はプログラマーが知っている」Kindle版も書籍版も本日発売

 目次はこんな感じ(手元の原稿ベースなので実際のものとは多少異なります)

はじめに

・1章 誰にでも伝わる書類作成

  • プログラマーの高速メール術 “DRY(Don't Repeat Yourself)”.
  • ローマ字入力を使うと損をする
  • 来週の自分は他人である。議事録は“PIE(Program Intently and Expressively.)” 原則で書け!
  • シンプルは金  “KISS(Keep It Simple, Stupid.)”
  • プログラマーはMircosoft Wordを使わない 〜Markdownをマスターしろ
  • 企画を宇宙戦艦にするな! YAGNI(You aren't gonna need it)
  • プレゼンは直前に書け

・2章 プログラマーの情報整理術

  • 出ものアイデアところかまわず ユビキタスキャプチャをマスターしろ!
  • プログラマーと図書館学
  • ファイルはツリー構造とタグで分類せよ
  • 備忘録やちょっとしたやりとりにはGyazoを使え!
  • 書類トレイはFIFO超整理法LIFO
  • 書類フォルダに穴を開ける理由 - ループの内側から最適化しろ
  • 本当に重要な情報はWebにない
  • 検索エンジンの使い方 
  • インターネットワークで情報網を広げる
  • クリエイティビティは移動距離に比例する

・3章 バグとの戦い ミスを防ぎ問題を突き止める技術を仕事に活かす

  • 危機を認識することの難しさ
  • 戦術的ミスは不可避、戦略的ミスはテスト計画を立てろ
  • 匿名チャットで内部からの声を吸い上げてトップの「思い込み」から脱却する
  • まず仕事を一部やめてみる 〜デバッグのプロセス
  • 違和感を大事にする
  • フェイルセーフと例外処理
  • プリフェッチ 新しい予定は1日以上の間隔を持って入れろ
  • 知らぬが仏 情報を制約することでミスを防ぐデメテルの法則

・4章 成果を最大化するチームの動かし方

  • 優れたリーダーの条件をたいていの人は間違って考えている
  • プログラミングとは、自分のいないところで自分の思い通りに自分以外の存在を動かすこと
  • リーダーは額に汗して働いてはならない。プログラマーとコンピュータの法則
  • パイプライン処理で効率的に仕事を運用しろ
  • マルチスレッディングを制してこそチームの能力を最大化できる
  • 投機的実行で戦略的に時代の先を読め
  • 会議を12倍高速化する
  • コーチングには強化学習を導入せよ
  • 社内ハッカソンでアイデアを形にする遺伝的アルゴリズム
  • 学歴や経歴は関係ない。行動を予測しやすい人物がリーダーとして成功する

・5章 経営とアーキテクチャ

  • プログラマーは時空を操る。借金と貯金の等価性
  • フレームワークとライブラリと取締役の選び方
  • 組織と仕事の構造(アーキテクチャ)を考える
  • アーキテクトの「アルプス越え」
  • プログラマーは未来を予見する

 ピンと来た方はぜひ

Kindle版

  

書籍版


 ただ、最速の仕事術を知ってるからといって、実際に仕事が速いとは限らないんだよなあ。


 ほら、スポーツのインストラクターだって、やり方は知っていても実際にできるとは限らないし

 (と、予防線を張っておく)