Entry

レガシーなコードに絶望する新人君の話

2011年04月13日

新人君が入ってくる時期なので,偉そうに書くぞシリーズ。

某所でソフトベンダに入社した新人君が恨みつらみを書いているのを見て,少し暗い気持ちになってしまいました。その人は C++ の規格やプログラミングテクニックにかなり精通しているようで,ソフトベンダで書かれている「レガシーで時代遅れなコード」に苛立っているみたいでした。俺は一生こんなレガシーな糞コードを書いて,凡人として過すのか……とか云々。

ま,その気持ちも分からなくはないんですよ。実際,あたしもそう考えていた時期があって,このサイトでも不満を吐露する記事を書いた覚えがある。今も不満はある。入社後10年以上たっても,いまだにそういう考えを持っている同僚もいる。んなもんで,あたしゃそういう人を洗脳するつもりはないし,諭すつもりもありません。

もっとも,そゆ人もせっかく凄い技術を持っているのだから,ちょっと処世術というか気持ちの持って行き場所があると,やりやすくなるんじゃないかと思います。オッサンの戯言だと思って,聞いてもらえると嬉しいです。

まず,考えてもらいたいのは,プログラムを書くとどうしてお金を稼げるのか,ということです。もちろん,ソフトベンダはプログラムを書いて,それを売ることでお金を稼いでいます。そして,プログラマはその利益からお給料をもらいます。問題は,お客さんはどうしてそのプログラムを買うのか,ということです。

理由はいろいろあるんでしょうけれど,あたしのところは,主要取引先が製造業なので,ソフトウェアを導入することが自社の生産性向上につながることを見込んで買ってくれているはずです。端的に言ってしまえば,お客さんの生産性が向上するソフトが「いいソフト」で,生産性が悪くなるあるいはコストに見合わないソフトが「ダメなソフト」になります。製造業の生産性は,とても詳細に定量化されているので,「いいソフト」かそうでないかは,割と簡単に結果が出ます。

一方,うちとは異なる分野,例えばゲームベンダやウェブサービス,個人ユーザを相手にするようなところは,勝手が違うと思います。あたしは詳しくないけれども,ぶっちゃけた話「売れたからいいソフト」みたいに原因と結果が逆転しているところもあります。

ともあれ,とりあえずは,自分の会社がどういうソフトを理想としていて,何で飯を食っているのか確認してみてはどうかと思います。仕事もお客さんも降って湧いてくるようなものではない,というとは確かなことです。

もうひとつ。会社が何で飯を食っているのかが分かったら,それを自分の理想と擦り合わせてみることです。例えば,「うちでは boost どころかテンプレートも使用禁止なんだけど,おかしくね?」とか「C++0x なんて今時常識でしょ?」とか思っている向きは,それらを導入することが会社の飯の種とどう結びつくのか,またどう改善するのか,実証してみればいい。

例として,C++ でテンプレートを使う場合を考えてみます。テンプレートは非常に強力な C++ の機能ですけれど,開発プロセス全般から見て常に最適な選択肢と言えるのでしょうか。他のプログラマの技術水準については横に置いておくにしても,デバッギングのコストや保守のコスト,ライブラリ提供時の売り方(普通実装は見せないので)など,開発時とは異なる視点が必要になります。デバッギングのコストは開発時のコストなんだけれども,これを考えないプログラマが非常に多かったりもする。

また,C++0x にしても,これをサポートする処理系を開発部門全体で用意することができるのか,開発体制を変更する必要があるのではないか,既存コード(資産)との折り合いはどうつけるのか,それに見合った利益を会社は得られるのかといった問題があります。そゆことを棚上げにして,ただ「イケてるから」とかいった理由だけで C++0x を叫んでも,残念ながら誰もあなたの言うことを聞かないでしょう。あなたの実験台として会社や他の社員がリスクに晒されるいわれはないからです。

さらに,もっとも重要なことは,お客さんから見たら,実装手段が C だろうとレガシーな C++ だろうと C++0x だろうと,多くの場合,これらの変更だけでは何も変わるところがないということです。変更がないなら,お客さんの生産性も変わらないわけで,普通お金はもらえません。会社で何かをするには,そのための予算を付ける必要があるわけだけれども,そのコストを誰が負担するか,考えてみると簡単なことです。つまり,お客さんは普通その原資を提供してくれないよ,ということ。あなたがひとりでそのコストを肩代りするというなら別だけれども,そうでないなら会社なり他のプログラマなりを巻き込んで協力してもらう必要があります。

で,処世術みたいなもの。次から選んでみてはどうでしょう。

  1. 趣味では自分で理想のプログラムを書いて,会社では会社の開発環境に合わせる(気持ちは落ち着くかも)。
  2. 周囲に自分の理想が会社やお客さんにもメリットがあることなのだと説いて回りの協力を募る。
  3. 会社で既存の開発環境に合わせたプログラムを書き,「自分で」利益をあげ,その利益から導入コストをまかなう。一応,根回しもするが,2 程ではない。
  4. しちめんどくさいので,起業して理想の開発環境を作る。

あたしの場合は,3 でもって Intel 製の C++ コンパイラを自社開発環境の標準にしてもらいました。コーディング規約も少し変えてもらった。おかげで,コンパイラアップグレード時の製品/ライセンス管理もしなくちゃいけなくなったんですが……(やらなきゃよかった)。

お金ももらえて,プログラミングもできる環境つのは,今のところそゆ環境だったりします。もっと楽な方法があるといいんですけどね。

C++0x に関して言えば,標準化委員会がコンパイラベンダや言語研究者のような言語マニアばっかで構成されているのも,問題といえば問題だったりもする(以下参照)。

There are a lot of compiler, tools, and language experts on the committee. Those and library builders dominate, and that's a pity. Ideally, we'd have a majority of experienced developers to help guide the work.

C++の次期仕様「C++0x」のポイント ~Bjarne Stroustrup氏との対話~(2/2):CodeZine

それだけならいいにしても,C++0x 周りでは,それを理解できている(と思っている)ことに変なプライドがあったりする人がいたりするもんで,そゆのは単に「めんどくさい人」だったりもする。そゆのに染まっている向きでそれで食っていきたい人は,普通のソフトベンダじゃなくて,コンパイラのベンダ(Microsoft とか Intel とか)に入社するなり,学者になるなりすればいいとも思うんだけれども,どうなんだろ。そこまではなれないということか。

【追記】
反応をいただいたので,お返事をば

@middlander こういう言葉を新人に向けてしまうところに、業界としての歪みを感じる。 / qune: レガシーなコードに絶望する新人君の話 http://htn.to/oHtSev

Twitter / Ernest Croft: こういう言葉を新人に向けてしまうところに、業界として ...

「こういう言葉」がどういう言葉なのか,そしてそれのどこに「歪み」を感じるのか,つぶやきだけじゃ分らないのでもう少し詳しく教えてほしいんですけれど,この業界が歪んでることはあたしも認めますよ(参照:qune: 官僚的な IT 業界はこれからも続くだろうけどどうでもいいという話; 参照エントリでいわゆる「根回し」は別の意味で使っているので,ここでの話と取り違えないでくださいね)。

うちは独立系ベンダだから,まだ(条件さえ揃えれば)ある程度社内で言いたいことが通るけれども,受託仕事では大抵元請けから開発環境を指定されたりします。受託ばっかのところは,自社のコードなんてそもそもないところもあるし,コーディング規約や使用可能なライブラリも大抵元請けから指定されるので,プログラマどころか会社自体が開発環境を自由にできないところもあったりします。それと比べれば,個人的には,まだ恵まれてる環境だと思うんですが。

あたしがこのエントリで言いたかったのは,結局のところ「絶望に浸って悶々とするんじゃなくて,やりようによっては居心地のいい作業環境を自分で作れるよ。そのためには考えなくちゃいけないこともあるけどね。」ということでした。希望を持ってもらえたらと思ったんだけれども,こんな制限にすらくじけちゃうなら,仙人よろしく一生霞を食って悶々としてろとしか言えないです,正直(他にやり方はあるんだろうか?)。これはどこの業界も同じだと思うんだけど。

あとこちら。

@middlander それと、ぼくが前にいた会社でもそうだったけど、こういうときの「処世術」の選択肢に「転職」が入ってこないのが象徴的ですね。一足飛びに「起業」になってしまうという。自覚的なのかどうかは分からないけど。

Twitter / Ernest Croft: @middlander それと、ぼくが前にいた会社で ...

何が「象徴的」なのか,これまたよく分らないんですけれど,転職でその高邁な理想を実現できるなら,転職も選択肢に入れていいと思います。あたしはそうは思わないので,自覚的に外したんですけど(その高邁な理想は,転職で済むようなちっさいことなんですか,と)。それとも,転職理由には「前職の開発環境/規約がレガシーで気に食わなかったから」とか書くんでしょうか?ナメた話だと個人的には思います。売れ筋のパッケージを持っている会社のコードは,どこもレガシーだったりするし。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN