Hatena::ブログ(Diary)

elm200 の日記 このページをアンテナに追加 RSSフィード Twitter

2010-09-24

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


昨日、

人生の転機 - 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。修正済。

ななしこななしこ 2010/09/25 21:08 ”美しい”コードって、実は無駄が無くて悪さもしにくいですよね。だから長い目で見たら費用面でもトクだと思うのですが・・・。私はそんなコードが書ける事を指導されましたが、書けないままソフトウェア技術者を断念しました。思い出語り申し訳ありません。

gungnir_odingungnir_odin 2010/09/25 22:36 あー。わかるなぁ。

上記で、「受託開発ソフトウェア」としているモノについては、
更に、技術者派遣を大いに使う傾向があるため、高いスキルの技術者が常にアサインされるとは限らない。

その為、効率の良いコードよりも、ifとforだけで書かれたコードの方が上の人間にはには理解しやすいため評価される。

効率が良いコードは「トリッキー」の一言で排除される。

何か不条理だよね。

any-keyany-key 2010/09/26 02:17 うん。いくらPerl系が美しいコード書いててもありゃ暗号だ

で、解説する時は「コード見りゃ判るだろうが!」と思うもんだが、判らない人には判らない。
多人数で開発すると完成度より(一番下の開発者にも判る)解説コストが高くなったりする。
経営者に取っては完成度より、メンテのしやすさや、(ソース管理者の)代替性が高い事を評価しやすい
#完成度の高さを高付加価値として売るよりも、プログラマを代替可能な歯車にする方が楽

プログラマは本当評価されにくい職業になりましたね

にゅにゅ 2010/09/26 04:29 道具と心を合体させてる男の人って…

末端PG末端PG 2010/09/26 06:42 昔関わったNTTDの案件とかだと、コーディング規約で『一条件文の中ではand,orは一個しかダメ』とか言われましたねw
スキルの無い人向けの対策らしいのですが、ネストが激しすぎて初心者も上級者も理解しにくい事に・・・orz

ツイッターから来ましたツイッターから来ました 2010/09/26 07:50 美しいコードと一言で言われると個人的な価値観なので拒否反応がでますが、おっしゃるとおり2番目のコードはふざけすぎですね。私も外部業者に委託したソースに対して自分が追加対応をする時に検証していて、こういうソースを見た事あります。本当に目を覆いたくなりますね。かといってソコを修正するのもできませんし。お気持ちお察しいたします。

ななこななこ 2010/09/26 08:27 トランス状態になるのはプログラマ以外の職種でもあると思うが。法規とかどういう精神状態で作っていると思う?このレベル(分かりやすい例であるけれど)のエレガントさを云々と語るプログラマは稚拙。法務専門部署の人は黙ってもっと現実みてるでしょ。と社内と元理論物理屋の現エンジニアは思ったりする。

MA-SAMA-SA 2010/09/26 09:26 美しいコード、とは、動作速度を要求されない場合、可読性に優れたコードだと思居ます。 
その後の、メンテや移植を考えれば、効率的、かつ経済的ですからね。 
コードを書いた人が、いつまでもメンテしたり、移植作業したりする訳もなく、人が変わる事が常ですからねぇ。

sakurai_youheisakurai_youhei 2010/09/26 12:06 インフラでもそういうことあるある。

こんにちは。こんにちは。 2010/09/26 13:26 他の業種に転職しても、美しくない仕事をヤル奴は
星の数ほどいるからね。

美しいコードを書けるなら、この業界に残って美し
いコードを書く文化を育てるというのが理想的だと
私は思います。

hogehoge 2010/09/26 13:30 たまに短く書いた方が良いコードだと思っている輩がいる。
極限まで短くしたコードは自己満足なコードでしなかく、
可読性、保守性という意味では「トリッキー」と言われても仕方がない。
とはいえ、同じ処理がそこら中に散らばっているソースを見ると腹が立つのは事実。

gomergomer 2010/09/26 15:52 >プログラミングに没頭するほど、私は、社会性を失っていく自分に気がつく。
これ、ありますね。
なんかネットゲーにハマって帰ってきた時のような感覚。仕事だから時間を無駄にしたとは思わないけど、「これで良いんだろうか。自分はまともな社会人なんだろうか。10年後もこういう仕事をしてるんだろうか」って不安になると言うか。
転職して3年目、プログラムが好きなのに、あえてそれを捨てて今の仕事に付いた初心が思い出せました。ありがとう。

chinchintaratarachinchintaratara 2010/09/27 12:59 プログラマではないけれどすごくよくわかる。。
どの業界であっても基本的にツクリテというのは同じジレンマをかかえていますよね。
デザイナーであってもマークアップエンジニアであっても、溶接工であっても、芸術家であっても。
専門分化がすすんだ今の時代特有の問題なのでしょうね。

MKMK 2010/09/28 10:38 同業者です。気持ちはすごくわかります。
でも、そのあたりの割り切りができない人は職業として
プログラマをするのは無理だと思います。
やめて正解だったんじゃないかな。

tetoritetori 2010/09/30 20:18 でも、同じところに没頭している人たちとはすごく仲好くなりますよね。だれかと専門性を共有しているというのはいいものです。まあ、おばちゃんとのご近所関係談議には疎くなるけど

プログラマプログラマ 2010/10/04 02:35 コメント入れればいいだけじゃないの?バカでもわかるように。
個人的にはステップ数が少ないほど良くできたコードだとは思わない。
多少ステップ数が多くなっても理解しやすいように組む。
ただの自己満になってはいけないから。上の例については問題外。
まあステップ数で工数出したりするからわざとじゃない?

tricksterextricksterex 2010/10/07 11:30 プログラミングの技術と社会に必要なソフトウェアをイメージできる二つの能力が必要だと思う。後者は、コミュニケーションが必要で、そこから社会との接点も生まれてくるのではないかと思ったり。

AMZAMZ 2010/10/07 18:32 上のコードは「美しいな」と思います。仕様変更の必要がなさそうですし。
でも私は、下のコードの方が好きです。ソースコメントがなくても、
どんなバカでもこのソースを見ただけで何をしたいのか直感的にわかるからです。

個人的には、コストとリスクが分かりやすく、その上で速さを求めます。
下のコードは美しくないけれど、でも好きです。
ただし、下のコードしか書けないプログラマはエンジニアとしてどうかとは思いますが。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。