メモ

プログラマーを解雇して新しい人員に置き換えることがソフトウェアにとって致命的になり得るという指摘


IT業界は人材の入れ替わりが激しいことが知られており、有能な開発者は好待遇を求めてさまざまなチームを渡り歩いているほか、企業側も不景気時には積極的に人員整理を行います。ところが、ソフトウェア開発チームの運営に関する複数の著書を持つBaldur Bjarnason氏は、「プログラマーを解雇して新しい人員に置き換えることは、ソフトウェアにとって致命的になり得る」と主張しています。

Theory-building and why employee churn is lethal to software companies – Baldur Bjarnason
https://www.baldurbjarnason.com/2022/theory-building/

Bjarnason氏はソフトウェアのプログラマーを庭師にたとえた上で、「ソフトウェアは一時的な庭であり、その運命は庭師と密接に関わっています」と述べています。Bjarnason氏は、プログラマーは庭の生態系を熟知する庭師のように、ソフトウェアのさまざまなパーツの接続や相互のパーツが与える影響、全体にとって有益または不利益になるものについての感覚を持っていると主張しています。


多くの企業やプロジェクトマネージャーは、開発に参加するプログラマーを代替可能な存在として考えており、まるでレゴブロックのように人員を入れ替えます。しかし、実際にソフトウェアを生かし続けるのは、そのソフトウェアが何のために、そしてどのように構築され、実際に機能しているのかについての正確な「メンタルモデル」を持っているプログラマーであり、簡単に代替することはできないとのこと。

Bjarnason氏は、ソフトウェアにおいてプログラマーとコードは密接に関係しており、プログラマーの心の中にある洞察や知識がソフトウェアの変化や成長を左右し、コードが現実世界との対話の役割を果たしていると主張しています。ソフトウェアへの理解度はプログラマーが生み出すコードの価値にも影響し、メンタルモデルを持たないプログラマーが書いたコードが増えすぎると、いずれ大惨事を起こす可能性があるそうです。

もちろん、ソフトウェアの開発プロジェクトではソフトウェアに関するドキュメントが作成され、途中から加入した開発者が開発や保守を引き継げるようにしています。しかし、複雑なソフトウェアの内部を誰にでもわかるよう文書化することは高度なスキルであり、多くのプログラマーはそのスキルを持っていないとBjarnason氏は指摘。そのため、ほとんどのコードドキュメントはプログラマーがソフトウェア内部のメンタルモデルを発達させる前にはあまり役立たず、むしろメンタルモデルを構築した後に役立つものだと述べています。


メンタルモデルが未発達なプログラマーの増加がソフトウェアにもたらす問題としては、「ソフトウェアの経年劣化」が挙げられます。ソフトウェア自体に変化が加えられなくても、プラットフォームや依存関係の更新によってソフトウェアにも影響が及ぶことがあり、プログラマーはソフトウェアの機能を維持するために修正を行う必要があります。しかし、複雑なコードが統合されたソフトウェアでは、メンタルモデルを持たないプログラマーはさまざまな更新がソフトウェアに及ぼす影響に気づかず、修正するべき部分を見つけられないことがあるとのこと。

ソフトウェアについてのメンタルモデルを構築する最も簡単な方法は、実際にソフトウェアが成長している時にプロジェクトに取り組むことです。Bjarnason氏はこのタイプを「第1世代のプログラマー」と呼び、第1世代のプログラマーはさまざまなコンポーネントの相互作用や特定箇所を変更する最善の方法、ソフトウェアの劣化を最小限に抑える方法、実際には使われていないコードなどをよく理解しています。

一方、第1世代のプログラマーと共に仕事をしているプログラマーのことを、Bjarnason氏は「第2世代のプログラマー」と呼んでいます。第2世代のプログラマーが意味のわからないコードに遭遇した場合は、第1世代のプログラマーが解説することで、第2世代のプログラマーもメンタルモデルを発達させていきます。時間が経過するにつれて、第2世代のプログラマーがソフトウェア開発の中心となり、やがて在職中に書いたコードが大半になると、第2世代のプログラマーが事実上の第1世代のプログラマーになるとのこと。

Bjarnason氏は、ソフトウェア開発においてはチームの安定性が必要不可欠であり、各チームは過半数が第1世代のプログラマーで構成されつつも、ある程度は第2世代のプログラマーもいることが望ましいとしています。もし、第1世代のプログラマーが少なすぎると、メンタルモデルが不十分な第2世代のプログラマーが担当する作業が多くなり、ソフトウェア開発に遅れが生じます。また、第2世代のプログラマーが少なすぎると、今度は新機能の更新が遅れてしまうそうで、いずれの開発者がチームを離れてもソフトウェア開発にとってダメージになり得るとのこと。


Bjarnason氏は、「プログラマーを入れ替えすぎると、彼らの持っているメンタルモデルがコードの現実から切り離されてコードが死んでしまいます。死んだコードは現在のプログラマーによって育てられた、新しいコードによってのみ置き換えることができます」と述べ、ソフトウェア開発のプログラマーは簡単に代用可能なものではないと主張しています。

多くのソフトウェア開発チームが絶えずコードのどこかを修正しているのは、チームが問題にアプローチするより良い方法を見つけたからではなく、チームの誰も正確なメンタルモデルを持っておらず、コードがどのように機能し、他の部分と相互作用しているのかを理解していないからだとのこと。Bjarnason氏はこうした問題を解決するため、マネージャーはソフトウェア開発の基本的な性質をよく理解した上でチームを管理する必要があると述べました。

この記事のタイトルとURLをコピーする

・関連記事
プログラミングを勉強するには「言語能力」と「問題解決能力」も重要 - GIGAZINE

30代後半や50代からでもソフトウェア開発者になるのには遅くないという10人の実例 - GIGAZINE

IT業界で「半世紀」近くのキャリアを積んで得られた教訓とは? - GIGAZINE

長く成果を上げ続けるチームや組織の構築に必要なスキルとは? - GIGAZINE

優れたソフトウェア開発チームが持つ共通点とは? - GIGAZINE

活動的なコミュニティをゼロから構築するために重要なポイントとは? - GIGAZINE

オープンソースの開発現場で新人を迎え入れるために取り組むべき10個のこと - GIGAZINE

in メモ, Posted by log1h_ik

You can read the machine translated English article here.