「技術は簡単。難しいのは人間(プログラマー)」
"Managing the Unmanageable" という本があります。「管理できない生き物の管理」というニュアンスですかね
「技術は簡単。難しいのは人間(プログラマー)」
というテーマを、現代の文脈で捉えた本で、本家アマゾンのレビューで「21世紀版『人月の神話』だ」と言われているそんな本です。
特に、この本の第一章、「なぜプログラマーは管理不能に見えるのか(Why Programmers Seem Unmanageable)」は、非常に秀逸です。僕は何度も読み返しているのですが、かなり的確に比喩を混じえながら**「プログラマーとはどんな生き物か」** ということを述べています。
この内容、現実のプログラマーやCTOにとっては「あるある」「そうそう」で終わる内容ですが、これを、CEO、プロダクトマネージャー、ディレクターといった非エンジニアの経営/マネージャー層に、会話などで軽く紹介すると、こっちがびっくりするほど食いついてくることが何度かありました。
今回は、「エンジニアやCTOを理解できないと感じている非エンジニアマネージャー層」にむけて、この秀逸な第一章からさらに僕の好きな部分を取り出して紹介してみます。(僕の解釈が入ってますので正確な翻訳ではないのでご了承ください)
何故プログラマーは管理不能に見えるのか?
###ソフトウェアをゼロから作ることは、小説を書くことと似ている
隣接した分野である建設や電子工学を応用できるとすることがよくあります。が、物理的なものや厳密な現象を組み合わせていくそれらの分野と、真っ白な紙の上に、頭で考えた無形の概念を組み立てて行くプログラミングは、それらとは似て非なるものである。
ソフトウェア工学やプロセス管理手法の多くはプログラマーの管理を改善しない
それらは、野球に例えると、「野球のルール」「ゲームの進め方」「細かな戦略」について語っているのであって、監督がどのようにうまく選手一人一人を扱うか、については語っていない。
プログラマーとはどんな人種なのか
もしプログラマーという職業がなかったら、今プログラマーをしている人々はどんな職についてるのか?
50%は教師、会計士、研究者といった真面目な知的職業についているが、残り50%は、音楽、小説家、画家、詩人といった芸術家になっていると思われる。プログラマーの50%はそういう「自由人気質」を持っている。
プログラミングはとにかく楽しい
何が楽しいのか?(「人月の神話」からの引用)
- ものづくりの純粋な楽しさ
- 誰か他の人に役立つ物を作ることの喜び
- 部品同士が連動する複雑なパズルが、繊細なサイクルで動作する。そういうものへの熱中
- 決して同じことの繰り返しにならない。常に学び続ける楽しみ
- 詩のような、純粋概念一歩手前のものを扱う楽しみ
人間は「楽しい」ことを行っているとき、そもそも誰かから管理されたがるか?これと、上記の「自由人気質が多い」という点と合わせると、プログラマーが管理しにくく見える原因が見えてくるような気がする。
「優れたプログラマー」とは?
- 「優れたプログラマー」は熟練工。プログラミングの才能より、理論と実践が重要
- 「優れたプログラマー」 は、コードやプログラムを直観的に構成する能力があり、コーディング前に設計するように十分に訓練されている
- 明確かつ簡潔で機能的で、高品質のコードを最小限の時間で作成できる
- (これは有名ですが)「優れたプログラマー」は、だめなプログラマーの十倍の生産性がある
「優れたプログラマー」は自分の仕事に意義を求める
スケジュール、経営陣からのの圧力、または報酬によって主に動機付けされているプログラマーは、通常、「優れたプログラマー」ではない。ほとんどの素晴らしいプログラマーは、世界に変化を起こす、人々が実際に使用するプログラムや製品を作るという、高次の欲求によって動機付けられている。
プログラマーの管理はなぜ成功しないのか
プログラマーの管理とは「猫の放牧」である
猫は自由奔放で、個性的で、狡猾で、遊び心があり、好奇心が強い自立した生き物です。これらの形容詞はすべて、プログラマーにも適用できる。そもそも猫を集めて放牧したいと思って、そしてその管理で成功したい と考える人がそもそもいないか、管理している相手を猫でなく羊か何かだと勘違いしているのが、プログラマーの管理がなかなか成功しない状況なのでは。
プログラマーを管理するには特別なマネージャーが必要
プログラマーは「自由人気質」なので、典型的な動機づけ技法は通常成功しない。適切な技術的な管理の下、開発プラクティスとプロセスを整えた上で、プログラマの意識を「世界の変革」に向けることが重要です。それには、プログラマーがどのように仕事を理解かを理解し、効果的に動機づけしつつ、結果をスケジュール通りに提供できるようにする特別なタイプのマネージャーが必要です。
報酬が主要な動機である多くの仕事とは異なり、仕事自体や職場環境がもっと重要な傾向があります。プログラミングは、特別な取り扱いが効果的に行われることを要求する独創的なプロセスです。良い管理者は、プログラミングに肯定的な文化を確立しながら、これらのことに注意を払わなければならない。
悩むエンジニアマネージャーに勇気を
今回は、「エンジニアやCTOを理解できないと感じている非エンジニアマネージャー層」にむけて、第一章を紹介してみました。同時に、「非エンジニアマネージャー層と意思疎通に苦しんでいるエンジニア & マネージャー層(CTO)」も、自分がいつも思っていることが言語化されることでちょっと勇気が出たりするかな?(僕は出ました)
この本は、この後
- 効果的な採用(著者が住むサンフランシスコ~ベイエリアの事情中心ですが)
- 参画したプログラマーの立ち上げ
- 優秀なプログラマーマネージャーになるには
- プログラマーを動機づける
- 成功するプログラミングカルチャーの確立
- 成功するソフトウェアデリバリー
といった章立てになっています。和訳はまだ出ていないですが、非常におすすめの本です。