天才プログラマと言われて頭に思い描く人物が複数いて、共通点が実はそんなに無いので共通点を洗い出すのはやめて「自分だったらできないだろうなぁ」という事例を思い出した順に列挙してみます。

しょぼそうな高速化がめちゃくちゃ刺さる

凡人に理解できないような天才的なアルゴリズムを用いてめちゃくちゃ計算量を減らしている、なんてことは実はほぼ見かけなくて実際によくあるのがこのパターンです。賢いアルゴリズムというだけなら素養のある秀才ならなんだかんだ思いつくので個人的には天才とまでは感じません。

天才は「Aを受け取って計算してBを返す」みたいな一見平凡な処理に対し「Aの配列を受け取って結果をBの配列にして返す」みたいな誰でも思いつくようなしょぼそうな効率化を行って途方もない効率化を果たします。もちろん凡人が任意の場所でそういう細かい最適化を入れて同様の効率化が再現されるわけではないのですが、天才はただのバッチ化やキャッシュ等で10倍速以上に高速化できる秘孔を適切に突いてきます。脳内にモデル化している計算機のエミュレーション精度が異様に高いのではないかと想像しています。

とにかく異常に手が速い

天才はノッてる時のコーディング速度が異常です。一日で1〜2万行ぐらいの異常なペースでそれなりに頑健なシステムを作ってきます。凡人は数百行書いてはバグり散らしてデバッグに数日溶かし…というサイクルを回していますが、天才は一晩でモジュールいくつかを書き上げて動く物を出してきます。そういう天才は似たような目的のコードをいくつも読んでパターン化して良い部分を適切に模倣できるので実装の作法に試行錯誤する時間が短いのではないかと想像しています。

斬新なインタフェースを備えている

ソフトウェアとは抽象化の連続です。同じ抽象化をする限りはその裏で行える実装の幅には限界がありますが、内部の仕様からくる都合を上手に隠蔽した抽象化は速度面やコーナーケースで意外な恩恵を示す事があります。パッと見ただけでは何だか野暮ったくて使いにくいAPIだなぁと感じる事もありますが、深く内面を理解したり他の抽象化と比べていくともはや元のAPIには戻れないような中毒性を備えたインタフェースにロックインする事になります。天才は異世界からの転生者のように「こうやって抽象化するのが一番自然だろ?」と事も無げに言いますが、凡人からするとコロンブスの卵のようです。

無味乾燥なデジタルの世界において物事をどう捉えるかというのは想像以上に大きな影響を我々の思考に及ぼしており、どんなに新しい概念でも想像しやすいメタファーに寄せて考える事で一気にフォーカスしやすくなります(これは別の可能性を無意識に切り捨てる事と表裏一体です)。天才が描き出す抽象化は自然とチーム全体の基底ベクトルのような働きをしてくれます。

1年

利用規約プライバシーポリシーに同意の上ご利用ください

熊崎 宏樹さんの過去の回答
    Loading...