私がソフトウェア技術者をやめた理由

昨日、

人生の転機 - Rails で行こう!

の中で「ソフトウェア作りが嫌いだ」と言い切ってしまったことが引っかかっている。

私の職業生活でもっとも多くの時間を注いだのがソフトウェア作りだ。その作業に対して、実際のところ、好きとか嫌いとか一言で割り切れるはずがない。複雑な感情を持っているというのが正直なところだ。

私の職業プログラマのとしての最大の欠点は、ソースコードに対して強い美意識を持たずにいられなかったところだろう。生来の生真面目な性格が災いし、私の基準で美しいとはいえないソースコードを敵視しすぎた。

簡単な例を挙げよう。

うるう年を計算するアルゴリズムを考えてみる。うるう年とは、「4で割り切れて、かつ100で割り切れない年。ただし、400で割り切れたら、やはりうるう年」である。

def leap_year?(y)
  (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))
end

これを次のように計算している商用プロダクトのソースコードを目撃したことがある(オリジナルは Visual Basic 6 であった)。

def leap_year?(y)
   if y == 1996
      return true
   elsif y == 2000
      return true
   elsif y == 2004
      return true
   elsif y == 2008
      return true
   elsif y == 2012
      return true
   elsif y == 2016
      return true
   elsif y == 2020
      return true
   elsif y == 2024
      return true
   elsif y == 2028
      return true
   end
   return false
end

このコードでは当然1992年以前、2032年以降については、正確な計算ができない。しかし、業界的にこの手のコードは「アリ」なのだ。誰も20年も同じコードを使いやしないからだ。一行で書けるものをわざわざ20行弱も掛けて書いている。

受託開発ソフトウェアの世界には、こうした冗長なコードが溢れている。なぜなら、参加するプログラマの多くが簡潔でエレガントなコードを理解できないからだ。

ソースコードを見たこともない経営者たちが、こうしたガラクタのようなスパゲティコードだらけのソフトウェアプロダクトを抱きしめて「うちの技術者たちは優秀だ」と得意げに吹聴している姿を見ると、皮肉の一つも言いたくなったものだ。

ソフトウェア業界(特に受託開発業界)は、基本的に正直者が馬鹿を見る世界である。顧客(あるいは経営者)が、保守性というソフトウェアの最も重要な品質を正しく評価できないという、情報の非対称性が存在するからだ。ソフトウェアの品質が、本当にいいか悪いかではなく、いかにまともであるかのように見せかけて、手を抜くかが経営者の腕の見せ所になった(売り手と買い手の間の情報の非対称性を是正する手段を持たない産業では、どこでも同様であろう)。

ソフトウェア技術者は私にとって報われない職業であった。それがソフトウェア技術者をやめようと考えた一つの理由である。

もうひとつ、より個人的な理由がある。

私は、プログラムを書いていると、一種のフロー状態に入ってしまう。気がつくと4時間くらい経過している、なんていうことがよくある。フロー状態というと聞こえはいいが、私にとってはあまり愉快な体験ではない。プログラミングに没頭するほど、私は、社会性を失っていく自分に気がつく。「対コンピュータモード」「対人モード」と2つのモードがあり、これらは相互に排他的なのだ。長大なコードを数週間に渡って書き続けた後などは、親しい友人に会っても、最初の1時間くらいは話のピントが合わない。この2つのモードの行き来にはかなりの心理的コストが掛かる。

コンピュータと心が合体するような「対コンピュータモード」は、非コミュだった少年時代には、それほど嫌ではなかったが、それなりの社交性を身に着けてきている現在では、たいへん苦痛になってきている。フロー状態まで没入しなければいいだろうというかもしれないが、子供の頃の習慣で、どうしても避けられないのである。

あくまでも断っておくが、私はソフトウェア業界全般や、個々のソフトウェア技術者を批判しているのではない。ソフトウェアが三度の飯より好きで、職業プログラマとしてカネをもらっているのが申し訳ないくらいだ、という人はそれはそれで素晴らしい。きっと、その人にとっては、天職なのだろう。

私は、かつてコンピュータマニアだったが、いまはそこから抜け出そうとあがいて、まだ不完全にしか成功していない、そんな人間だ。人それぞれ背負うものは違うだろうが、これが私にとっての業(ごう)なのである。新しい道の模索はまだまだ続いていく。

P.S.
2000年はうるう年だべさ・・・。「冗長コード」のほうがバグってたorz。修正済。