属人化は悪か


属人化は悪か

最近PureScriptを勉強してるが、こういうのをやってると、仕事で使った場合どうなるんだろうかとかよく考える。

型パズルは当然TypeScriptより厳密で安全そうな感じがするが、なぜこんなに厳密なのかをチームメンバーが理解できないとPureScriptがチームで採用されることはないだろう。TypeScriptと一口に言っても型の安全性を目的として使う人ばかりではなく、単にコード補完が賢くなって嬉しいから使う人もいるし、なんとなくかっこいいから使う人もいるし、フレームワークがTypeScript前提だから使う人もいるだろう。

多分だが、PureScriptやHaskellを仕事で採用しているチームでは、扱っているプロダクトが特殊か、またはチームメンバーが少数精鋭なのだろうと思う。10人以上のチームでこれらの言語を使っている図はあまり想像できない。10人以上いたらほぼ確実に関数型言語のパラダイムに馴染めない人が出てくるだろうと思う。下手したら長年の開発経験を持つ人ほど手続き型の言語のように書けないということを安全性ではなく不自由さとして感じ、開発がストレスになると思う。

そうすると、これらの関数型言語を採用したチームはある意味で属人化していると言える。PHPやPythonやTypeScriptを採用しているチームは、まあほとんどの開発者がそこまで頑張って勉強しなくてもなんとなく扱うことのできる言語であるため、その言語を採用した事自体が属人化をもたらすことはない。しかし関数型言語の場合は事情が違ってくる。関数型言語を扱える開発者は少数派であるため、そういった言語を採用すること自体が属人化と言っても良いくらいの様相を帯びてくる。関数型言語を書いたことがない人は、HaskellでFizzBuzzを書くことにすらだいぶ苦労すると思う。

属人化は昨今の風潮だと誰も逆らえない「悪」だとされている。属人化した業務プロセスは徹底的に排除すべしということになっている。開発の現場も同様だ。他人が読めない直せない保守できないコードは書くなと言われる。変なDSL作るなと言われる。言語やフレームワークが用意した標準的な方法を使えと言われる。ライブラリは独自拡張するなと言われる。

しかしそれらは本当のことなのだろうか。属人化が悪だというのは、チームの規模をどんどん拡大することが前提だからであり、自分たちの仕事を「誰にでもできる簡単なお仕事」にまでプロトコル化し、組織の規模を10人から100人、100人から1000人に拡大したいからである。「簡単なお仕事」であれば採用も簡単になるし、採用が簡単になれば人事の評価も上がるし、現場も喜ぶし、開発スピードが上がって社長も喜ぶし、人売受託開発の会社なら単純に売上が爆増する。ついでにリファクタリングも簡単になるし、みんながニッコリというわけだ。しかしそれはあまりに労働集約的な発想ではないだろうか。スタートアップやベンチャーとはそういうもんだったろうか。ポール・グレアムはLispで会社を当てたと言ってなかったか。

WebやITに限って言えば、「属人化は悪である」という命題は完全に偽だと思う。属人化それ自体が良かったり悪かったりするわけではない。それは生産性とは関係がない。むしろ突出した生産性を発揮したければ必要な条件だとすら言える。とてもスキルが高い人材の、その人自身にしか書けない読めない直せないコードこそが、競争における優位性の源泉であり、凡人が100人集まっても解けない複雑な問題を解くことができる。ありえないほどのパフォーマンス改善やありえないほど高速なバグ修正が可能になる。

こういった物語は古き良きITバブル時代の英雄譚のようにみなされるようになった。しかし「属人化は悪である」という時代になった今こそ、優秀な人材ほど属人化を避けて平凡な生産性しか発揮しなくなっており、変なことを自分にしかわからない方法でやろうとしている開発者が何か面白いものを世に出すチャンスが潜んでいるのではないかと思う。というか思いたい。関数型言語を採用するチームは、そのような兆候の一つを示している。Haskellでプロダクトのすべてのロジックを書くのは99%以上の「CTO」が避けようとするだろう。しかしごく僅かな開発者はHaskellの優位性を知っている。少数精鋭のチームであればHaskellを使いながら生産性を落とさずに済むことも多分知っている。そしてHaskellが書けるチームであればいざとなればRustだろうがPHPだろうがCだろうが書けるということも知っている。「多くの物理学者は、必要とあらば、フランス文学の博士課程を終えることだってできる1」のと同様にだ。

Footnotes

  1. ポール・グレアム『ハッカーと画家』p49 https://amzn.asia/d/aCRfBY6