【書籍】サピエンス全史で産業革命以後に労働が時間厳守の画一的なものを重視するようになった、 という話を聞いていて思った事。 この話自体は興亡の世界史や砂糖の世界史など、他の本でも良く目にする話で、真偽は分からないが良く言われている話だとは思う。 ここではそれは正しいという前提で、プログラマとの関係を考えてみたい。 といっても工場生産良く知らないので、そっちの方はすごく実態にはそぐわないものになってしまう気がするが。

近代労働というのは時計による時間管理が特徴で、同じ時間に同じように働く事を求める、とある。 産業革命以後、というコンテキストでは、工場労働者が基本となる。 工場の勤務は月曜の朝から、決まった時間まで行われて、それが守れないと工場は困る、という話から始まる。 それ以後の近代オフィスワーカーも工場では無くてもやはり月曜の朝の決まった時間から働き始めるし、 働く時間がきっちり決まっている仕事が多い、それはそうした工場労働者の規律を引き継いだものだ、という話と理解している。 実際多くの仕事が働く時間を決めている。

プログラマはどうだろう?オフィスで働く場合に、そうした産業革命以後の普通のスタイルで働く職場は確かにそれなりにある。 また、大規模開発では、工場労働者に似た性質が強いようにも思う。 画一性が重要で、 人間同士のいろいろな折衝が重要な事からミーティング等も多くなりがちで、 それは同じ場所の同じ時間で働いている方が都合が良い。 仕事の内容も画一的な方が望ましい事は多いかもしれない。 一定の仕事をして一定のアウトプットが出る、そういう仕事という側面はある気がする。 人が一人掛けたらそのプロジェクトが消え去ってしまうのは困るだろう。

一方で小規模開発はあまりそういうのは重要にも思えない。 皆が同じ場所で同じ時間に働くメリットはかなりあるものの、 個人のばらつきの影響はそのメリットによる増加を遥かに凌ぎ、数々の要因の一つ程度の影響しか無いように思う。 また、一定時間働いた結果がその働いた量に応じたアウトプットになる、 という性質はより下がる気がする。 小規模の方が、雑な言い方をすればプロジェクト運営のレベルも低く、いる人のレベルも低く、 失敗の可能性が高い。 属人性も高く、特定の人がいなくなると特定のプロダクトがなくなるのは良くある話だし、 そうして捨てられたプロダクトは良く見かける。 結局は消えていく可能性の高いものなので、その理由の一つに過ぎないキーパーソンがいなくなるという問題だけを強調する理由はあまり無い。 だからそれを避けるために大きなコストを払う気も無い。

大まかには、大規模になればなるほど工場労働者的な、近代産業的な性質が高まるように思う。 一方で小規模はそれ以前の職人的な性質が近い気がする。

ただ、大規模が工場労働者か、というと、違いもある。 大規模なソフトウェア開発が画一性が高まるのは、個々のプログラマのレベルが上がるから、という側面がかなりある。 一定の時間働くと一定のアウトプットが期待出来るのは、参加者のレベルが高いから、という部分もかなりある。

大規模なソフトウェア開発は、基本的にはなるべく優秀な人を雇って少人数でやろうとしているのが多いと思う。 なるべく少人数にしてもこの人数だ、という。 実際大規模ソフトウェア開発に従事している人の給料は極めて高い事が多い。 それはそれだけ個々のレベルは高いプログラマを集める事で、必要な人数は少なくて済むようにしようとしていると思う。

また、大規模ソフトウェア開発では多くの開発者は替えが効くが、替えはそんなに簡単には見つからないとも思っているように思う。 延々とインタビューしても全然ヘッドカウントを埋められない、というのは皆が体験している事で、 替えは居るんだが今居る人を留めるより楽に得られるというものでも無く、 なんとなく産業革命の工場労働者、というコンテキストと実態があってないような気はする。 似た性質もいくつかあるのは確かだが、似てない事も結構あって、 なんか同じものという気はしないんだよなぁ。

必要な専門性の高さという所に違いがあるような気もする。 給料を上げても、素人が突然大規模開発に参加して戦力になるのは難しい。 工場労働にもそういう側面はあるとは思うのだけれど、 なんか違う気もする。

大規模ソフトウェアというのは、たくさんのものを作るのでは無くて一つの大きなものを作る、 という所に違いがあるようにも思う。 大規模ソフトウェアの失敗は、完全な失敗で完全に無駄になる。 しかもそれなりにある。 生産量が落ちる、というのとは違っていて、一定の水準を下回ると瓦解してしまうのだよな。 そして失敗はすごくよくある。

また、大規模ソフトウェア開発の方がより近代産業的なものであるとしても、 ソフトウェア開発をなるべく大規模ソフトウェア開発にしよう、とはみんな思っていないと思う。 むしろ参加者の多くが「大規模にしない方がいいんじゃないか?」と強く思うだろう。 近代化しようとしている人はいない。これは近代化を嫌悪しているからとかじゃなくて、 大規模というのがすごく避けた方がいいものだからだ。 大規模化は目指すものでは無くて、避けようとしつつどうしてもなってしまった何か、と思う。

この辺も、なんか産業革命が起こって近代化を推し進めた、的な感じと、 ソフトウェア開発の実態のなんとなくの乖離を感じる。

でもなんか大規模組織が小さな受託案件をいっぱいこなす、みたいなのはあるよな。 あれは小さいものをたくさん作るので、より工場労働とかに近い性質を持つ気もする。 孫請けの受託みたいな。 ただそういうものって主流という感じでは無くて、たくさんある業務の一形態って感じだよな。 しかもかなり縮小している産業に思う。

一定の時間ちゃんと働く、という事の重要度が低い気がする。 ソフトウェア開発は良く失敗するし、全然働かないでサボってるせいで進まない、というのも確かにある。 サボってばっかで進まないものは、一定時間ちゃんと働かせる事で改善するとは思う。 だからそういう側面は無いでは無い。

でもそれはソフトウェア開発の失敗の主な原因では無いように思う。 みんながサボるから失敗する、というのが基本では無い。 自分が今やっているプロジェクトは非常に困難なプロジェクトであり、上手く行ってない所もあるが、 参加者がサボっている、というのは問題にはなっていない。それより遥かにたくさんの問題がある。 しかもそれというのは、プロジェクトごとに違う気がする。

なんか失敗率が高いんだよな、ソフトウェア開発。しかも失敗も曖昧で、作ったけど意味が無い、というものが出来る事がすごく多い。 こういうのは失敗なのかどうか曖昧だったりする。 工場生産でも全然売れないものが出来てしまう事はあるだろうけれど、 そんなに多くは無いんじゃないか。 ソフトウェア開発は良くあるよなぁ。

ソフトウェア開発は、黒字ならいいってもんでも無いんだよな。 なんかその会社などの立ち位置から、そのタイミングで成功するか失敗するかで生死が決まってしまうような時、 というのは良くあって、そういうタイミングで黒字だけれど大きく成長はしない、みたいな物に開発リソースを使ってしまうと、 会社の浮沈が決まってしまうレベルの失敗となる。 その辺もなんか工場生産と違いがある気もする。 ある程度固定した生産した結果、みたいなものが無いんだよな。 3000行のコードにいくらの値がつく、というものではない。

生産するもののばらつきが大きくて、人の差が与える影響も大きくて、 その辺が均質な労働力というものの価値を低くしている気がする。 価値はあるんだが、他の項目の方が重要度が高い、みたいな。

現状、フルタイムで働く方が仕事は多い。この辺は産業革命以後の近代労働、という気がする。 一方でフレックス的な時間の自由はだいたいある。これは、均質性を少しそこなってても重視したい要素を重視している結果なんじゃないか。

オフィスで働く方が多数派かは微妙な所。オフィスに戻れという人たちがいる一方で、戻ってない人たちも結構いる。 どちらかを主流とするよりは、多様である、という方が実態には近い気もする。

そして働くスタイルの多様性は増している気がする。これはCovid-19という要因の影響が大きくて、 産業革命以後の何かの進展の結果、というのとは違う気もするが、少なくとも均質に向かっている訳では無い気がする。 またGoogleやAmazonやFacebookが昔ほど圧倒的強さを持ってプログラマを集めて大規模化を推し進めている、という気もしない。 近年の不調からレイオフなども増えて、その分多様化は進んでいるような気もする。

多様化に関しては、一定の方向性がある、というよりは、行ったり来たりしている気もするな。 2000年代初頭はもっと多様だった気もする。そのあと均一化が進んで、また多様になって…みたいなのを繰り返している気がする。 しかもその軸も実態は大きく違う物を一つの尺度で見ているだけという面があって、あんまり統一的に語れそうも無い。

ただなんとなくの大雑把な現場からの印象としては、 プログラマは産業革命以後の近代労働のスタイルの影響は大きく受けていながら、 それ以外の特徴も結構大きくて、 「産業革命以後の近代産業の労働者」に関する記述があんまり自分に当てはまっている感じはしない。 どちらかといえば自分は産業革命以前の労働スタイルの説明の方がマッチする所が多い気がする。