X=労働者ならこれは正しいし、プログラマー⊂労働者なら元の文も正しい事になるけど、プログラマー⊂労働者って本当なのだろうか。
分裂勘違い君劇場 - プログラマの労働条件を過酷にしているのは、過酷な労働条件を受け入れるプログラマです を改変本来、Xは、サービス残業を強要されたら、それを拒否すべきです。
あらかじめ無理なスケジュールだとわかっているプロジェクトも、拒否すべきです。
安い賃金で働くことも拒否すべきです。
確かに、労働者を「労働に対して対価を受け取る人」と定義するなら、アスリートもプログラマーも立派な労働者なのだけど、「その労力に比例して対価を支払う」という狭義の労働者モデルをあてはめるには、労力と生産の関係があまりに非線形なのだ。
どう非線形かは、上掲の「人月の神話」を読んでもらうとして、賃金が安いか高いかを査定するためには、相場が必要。「これだけの能力を持ったプログラマーがこれだけ稼働するとこれだけのプログラムが出来上がる」という。ところが、これが成立しているようでしていない。
例えば、「コード1行につき10円」という取り決めがあったとする。そしてプログラムの中に要素数1000からなる配列を初期化するルーチンが必要だったとする。この場合、
my @a; $a[0] = 1; $a[2] = 1; # ... $a[999] = 1;
というコードを書けば1万10円になるが、
my @a; for (my $i = 0; $i < 0; $i++){ $a[$i] = 1; }
と書けば一気に40円に下落し、
my @a = map { 1 } (1..1000);
と書けばたった10円になってしまう。下に行けば行くほど優れたコードなのに、収入も減ってしまうのだ。
このことはプログラマーの間では常識なのだけど、しかし「コード1行につき10円」に対する代案を、プログラマー側ではなかなか出せない。
もう一つの見積もり法として、「完成した製品全体に対していくら」とか「稼働したサービスが上げる収益の何割か」というものがあって、こちらは能力の高いプログラマーには好評だ。これならmy @a = map { 1 } (1..1000);
とやっても誰にも文句は言われない。白いソースコードも黒いソースコードも、アガリを取るのがいいコードというわけだ。
しかしこちらの見積もり法は、もう労働者のそれとは相容れなくなっている。5割増の残業手当を出されても書けない時には書けないものだし、逆に1日仕事が5分で終わってしまうこともある。それがプログラミングの世界だ。
そもそも、プログラムは工業製品とはいえない。むしろ芸術品に近い。優れたプログラマーほどそのことをわかっている。だからプログラマーが労働者としての権利を主張するのは、作家が労働者としての権利を主張しているような違和感がどうしてもつきまとう。
だから、ことプログラマーに関しては、例のホワイトカラーエクゼンプションを適用するべきだと思う。もっと踏み込んでフリーエージェント制でもいいと思う。サラリープログラマーからすればとんでもない話に聞こえるかも知れないが、とんでもないのはプログラマーという職業そのものなのだし、作家や漫画家からすればむしろそれは当然の世界でもある。
もちろんそういう中で、あえて会社のおかかえになるという選択肢もあるだろう。顧問弁護士や顧問弁理士のように、顧問プログラマーという存在もありうる。当然報酬も顧問〜士に準ずる高いものとなるだろう。いずれにせよ、労働者からエグゼンプトされるのはやむえない。
百歩譲っても、プログラマーというのはメタ労働者ではあっても労働者とは言えないと思う。厳しいようだけど、労働者として扱ってもらいたかったら、プログラマーではなく別の職を選ぶべきだと思う。少なくとも、それを本職にするべきではない。
労働者とは、法(code)に沿って働く人々のことだ。プログラマー(coder)は法そのものを書く以上、実は特権的な地位であり、特権的な地位にある以上は労働者の持つ権利の一部は諦めなければ本来の労働者に対してフェアとは言えないのではないか。
Dan the Self-Employed Programmer
ちょっと怖いです。