プログラマーの生産性は近くにいる開発メンバーからも分かりづらい部分があるのかもしれません。
開発者のAlexander Mikhailian氏はブログ記事「The Worst Kind of Programmer」を公開し、25年のキャリアを経て、ある特定のタイプのプログラマーが業界の多くの問題の原因になっていることが分かったと主張しています。
同記事では、二人のリードプログラマーによって破壊されそうになったプロジェクトの話をがとりあげられています。二人はフロントエンドとバックエンドの開発チームをそれぞれ率いており、他のチームがビジネス要件で作業中だった間に懸命に働きます。
フロントエンドのリードはNXやRx、その他流行の技術を使って、Angularのモノリポジトリを作成し、Angularをベースフレームワークとしながらも、公式のAngularチュートリアルとは似ても似つかないワークフローを設定します。バックエンドのリードは、Vavrライブラリと高度に洗練されたJPAエンティティの階層に、複数レベルの継承、ディスクリミネーターやジェネレーターを加え、Spring Bootプロジェクトを立ち上げることに意欲を燃やします。
チームメンバーは感心して彼らを観察していたものの、ビジネス側が要求を吐き出し始めると、バックエンドとフロントエンドのプロジェクトがビジネス要件に取り組むには複雑すぎることがわかります。二人の開発リードはチームの他のメンバーを合わせたよりも懸命に働きますが、突然フロントエンドのリードが辞めてしまいます。バックエンドのリードの負担は増え続け、数ヶ月後バックエンドのリーダーも辞め、チームは納期に間に合わせるためにビジネス側からのプレッシャーが高まるなか、カタツムリのようなペースで仕事を続けることになります。
ヌル比較でVavrオブジェクトが使われたり、Angular TypescriptがプレーンなJSにランダムに混じったりするほどコードの質は落ち、チームはかろうじてバグだらけの製品を納品できたものの、未来は暗く、最初のリード開発者が作成した何千行ものコードを書き直せるような人材はいないのです。
同氏はプログラマー仲間からは最高だと思われるものの、実際は最悪なプログラマーの資質を次のようにリストアップしています。
- 抽象的な問題を解くことに満足を見出す能力: 優れた数学スキル、輝かしいリートコード・プロフィール、クロスワードを解いたりパズルを作ったりする適性は、その人が実生活に実用性のない問題に取り組めることを示す兆候である。彼らは結果ではなく、プロセスに集中する。
- 長時間労働に耐える能力: 人は健康でなければならないし、仕事に捧げることのできるまとまった時間を確保しなければならない。家族、子供、手根管症候群はすべて、あなたがその種の人間でないことを示すサインだ。
- ソフトウェア・エンジニアリングにおける情熱: 聡明でやる気のあるプログラマーは、自分が今楽しんでいる技術を、自分の報酬を得るプロジェクトに組み込む方法をいつでも見つけることができる。ビジネスは退屈だが、コーディングは簡単だ。それなら、みんなが熱狂している最新技術を取り入れることで、少しでも楽しくしてはどうだろう。さらに、これは履歴書のもうひとつのトレンディな項目になるだろう
- ナルシシズムと自信: これはおそらくダニング=クルーガー効果(自己を正しく評価できず自分の能力を過大評価してしまう)に関連していると思われるが、最悪のタイプはたいてい、20代後半から30代前半の比較的若く聡明な人たちである。彼らは常にオーバーアチーバーとして賞賛され、批判に遭うことはあまりない。
最悪の事態へ対処するたに管理職に訴えてもうまくいかず、問題の存在を認識することが解決の第一歩だとしています。ソフトウェアはチームメンバー全員がアプローチできるものである必要があり、「GolangやLua、その他のシンプルなプログラミング言語(Rustと対立する手段)」や「スクラム」、「DevOps」などが有効だとのことです。
Hacker Newsでもこの記事に関する議論が行われて、特に、最近注目のRust言語が「Rustのチームは...錆びる。なぜなら、この言語はエンジニアリング・プロジェクトの結果ではなく、それ自体に集中することを奨励しているからだ」と批判されている事が注目を集めています。
プロジェクトを率いる立場になった場合は、自分の選択が単なる腕自慢・素材自慢になっていないか常に注意しておく必要があるといえそうです。