Hatena::ブログ(Diary)

山本大の日記 RSSフィード Twitter

株式会社レベルエンター(http://levelenter.com/)で、プログラミングを若手に教える仕事をメインにやっています。

2009-02-10

プログラマーの誇りを見せ付けろ

僕は今回の案件で、システムレスポンスに徹底的にこだわってる。

それには理由がある。

それは、プログラマの誇りを見せたいからだ。




この案件は、既存機能をコピーして似た機能を作るというものだ。



既存機能は、Webシステムなのに1アクションで

1分や2分以上のレスポンスタイムはザラで、

悪いときには数分後にタイムアウトして、

さらに悪いときには、アプリケーション全体をロックしてしまっていた。


顧客はそれでも我慢して使っていてくれたそうだ。

今回の改修に際して、顧客がパフォーマンスを要求するのは当然だった。



それにしても酷いアリサマだとコードを見てみると

酷い。

確かにパフォーマンスは出ないのも無理はない。



いや、それどころか僕は、このSI業界の問題を感じざるを得なかった。

この機能はそこそこ難しく、業務的にも重要だ。

しかし、そのコードは、新人〜3年目ぐらいのプログラマが書いたとしか思えないコードだった。



例えば、

Stringを+でツナギまくってパフォーマンスが激劣化していた。*1

SQLで、よく考えれば要らないJoinが山ほどあった。

・すべてMap引数を取り回し、Mapの中身はすべてStringに置き換えられていた。

・数字もDateもStringだ。*2

・1000行以上もあるSQLは、適切にインデント付けされておらず、読むことすら億劫になる。

その他、Sessionの使い方、クラス分け、変数名の付け方、コメントの書き方に至るまで、

新人が試行錯誤して作った跡が見られる。


この業界の問題、それは

プログラムが、新人〜3年目の作業と位置づけられていることだ。



僕はこの認識を変えたい。

だから徹底的に、スキルの差によってどれ程のパフォーマンス差が出るか示したいと思った。*3


自慢したいわけではない、

10年近くコードと真剣に向き合ってきたから、

新人〜3年目に負けるはずはない。


このコーディングに際して、まず徹底的なリファクタリングから取り掛かった。

SQLを読みやすくインデント付けし、Mapを取りやめて適切な型のオブジェクトにし、

StringBufferをつかって、Joinを削った。

作り直したといっても良い。


もちろんチューニングは徹底的に行なった。

実装工数の三分の一を使った。 

先週まで、1アクション3秒の壁を越えられなかったけど、今日2秒を越えた。

検索自体は、0.5秒以内。改修前は、早くとも30秒だったので60倍の高速化だ。

最もパフォーマンス差が出たアクションでは、1000倍以上の差となった。


これを顧客に納品する。


今まで、1つ1つのアクションに対してイライラし続けていた機能は、

サクサクと動くようになる。

この機能は、サクサク動くと業務上の使い道が大きく広がることは間違いない。



顧客は感じてくれるだろう。

サクサク動くことの快感を。


顧客は疑問に思ってくれるだろう。

「なぜ既存機能よりも情報量の多い、この機能がこんなに早いのか?」と


そして問い合わせてくれたら良いと思う。


なぜこの機能はこんなに早くて、

他の機能はウンザリするほど遅いのかを。


そのときには、答える。

プログラミングスキルの差としか言えませんと。



新人〜3年目が悪いわけじゃない。

ベテランがコードを書かなさ過ぎる。



僕のスキル程度は、ザラに居るはず。

しかし彼らは、設計書のメッセージIDや、設計書更新日付の整合性や

フォントや罫線の切れを合わせるのに貴重な労力を割きすぎるんだ。


システム開発は、顧客の要件を実現するサービス業だ。


要件の実現がキモなのに。

実装がキモなのに。

なぜ、ベテランが頭だけやるのか。

僕にはどう考えても、理解不能だ。


今回、僕は頭の先から尻尾までやった。

それが普通であってほしい。



(追記)
前任者をけなしてるつもりはありませんです。業界の問題を感じただけで。

マネージメントやチームプレイの出来ないやつだとか、いろいろ言われるけど、
実質、予定工数から1人月前倒しで毎日定時に帰ってます。

まぁ、勢いで書いた短いエントリーで全てを伝えるのは無理なので
あとは、読者様のご想像にお任せするしかないですね。

*1java versionは1.3です

*2:map.put("key",new Integer(100).toString())ってこと。

*3:性能改善は顧客のたっての希望があった

r_ikedar_ikeda 2009/02/12 00:56 身の回りにまともなベテランがいないです。どこ行ったんだろう。
プログラミングの本いっさい読んでない人にとんちんかんな指摘されたりとか
クラス名やメソッド名を設計書で決めてリファクタリングするのも億劫になる体制とか
そんな現場ばかりです(でした)。

iad_otomamayiad_otomamay 2009/02/12 01:27 >r_ikedaさん
コメントありがとうございます。
私も昔、見習うべきベテランが居ない状況でした。でも頼るべきは自分だと気づいたんです。
体制を変えるには、自分を磨いて発言権を持たなくては遠吠えになるばかりです。
僕の場合必死に勉強してOracle Platinum Master取って、主導権を握れるようにしました。
力を磨けば若くても認められる変えられるというのがこの業界の良いところかもしれませんよ。
がんばってください。

たかはしたかはし 2009/02/12 10:32 初めまして。自社プロダクト開発系PGです。興味深く拝見しました。

私も同じことを感じています。結局は経営陣の技術に対する見方の問題かと思います。
極端な事例だとは思いますが、弊社代表が以前言った言葉が象徴的でした。
  「プログラム出来るインターンを募集しよう!」
彼らは動く=高品質、なのでしょう。ソースコードは彼らの目では理解できないものなので、それ以外の品質を理解しづらいのだと思っています。
PG はそれを理解させる努力をしなければならないのですが・・・。相手に技術に対する理解がないと例え話レベルの話を気長にするくらいしか。

なかなか難しいですね。

peroonperoon 2009/02/12 18:43 プログラマーの35歳定年説なんて言葉もありますけれど、本当はベテランプログラマーが必要なんですね。プログラマーでやっていこうという人には勇気が出る記事だと思います!

shivashantishivashanti 2009/02/12 20:26 結局、あなたが見せつけたい「プログラマーの誇り」とは何なんでしょうか?
スキルの差?頭からしっぽまでやること(やれること)?サクサク動くプロダクト?

iad_otomamayiad_otomamay 2009/02/12 20:38 >relax_aさん
僕も外注でプロジェクトに参加することが多いのですが、
まずは何も言わずに、与えられた枠組みのなかでBestを尽くすようにしています。
信頼がもらえたら発言もしやすいですね。

>たかはしさん
僕も経営に携わっていますが、
現場の実情を理解する取り組みは経営には必須ですよね。
うちの社長も、エンジニアとは無縁の人ですがUMLを勉強したり、
新しい技術や現場の声を沢山聞く人です。
現場の実情を知らないと危なくて経営なんてできないと思うんですけどね。

>peroonさん
35歳定年説は、35歳でスクラップになるほど働き詰めにさせ、
業務以外の勉強時間もないということが問題だと思います。
35歳まで日々勉強して積み重ねていれば、働き盛りだと思いますよ。

>shivashantiさん
プログラムでしょうか。プログラマーですから。

ああああああ 2009/02/12 22:15 プログラマが重要であれば、
プログラマを評価した会社が生き残って、
プログラマを評価した国が生き残るので、
自然に修正されると楽観的に思っています。
あと、本質的にCreativeでない職種をコードで
置き換えていけばプログラマが残るのでww

iad_otomamayiad_otomamay 2009/02/12 22:53 >あああさん
僕も楽観派に近いかもしれません。
この不況に生き残るのは本質的に強い会社であってほしいですね。

pigmentpigment 2009/02/13 00:47 初コメントです。
あ〜後から仕様変更ばっかしやがってテーブルなんざチューニングの限界超えてるぜ!面倒だからXMLデータ型に押し込んでしまえ!と思う今日この頃・・・
現役でガリガリコーディングしとる40歳です。
SOAPの受け口は一つにまとめ、パラメータもXMLにすると見やすくなるよ〜?
沢山WebMethodつくってると見づらくなるっしょ?

iad_otomamayiad_otomamay 2009/02/13 01:29 >pigmentさん
ガリガリコーディング素敵ですね。
これからも業界の牽引をお願いします。

同業です同業です 2009/02/14 00:27 前任のダメっぷりに怒りはするけど、後任を褒めることは無いんじゃない?
それなりのお金を払っているんだから出来て当然。
まぁ、ここまで極端なのは別として、派手なUIにしておけば客なんて納得するし、
ましてや実装を気にする人なんて皆無ですよ。
残念ですがそれが現実でした。
というか、レスポンスが1,2分がざらのwebって、どれだけ寛大な(アホな)客なんだ?

soryamuridasoryamurida 2009/03/01 05:24 実に溜飲が下がるエントリです。

ただ、(一部の)コメントの人たちは視野が狭い気がする。

「プログラムが、新人〜3年目の作業と位置付けられていること」
というところにばかり食いついてしまっており、

「頭の先から尻尾までやった。」
という重要な点が理解されていない気がする。

SEとか言う職種があるのは日本ぐらいなものです。
(つまり、SEとやらの職種とプログラマが分かれているというのは
日本ぐらいなものです)
このあたり、もっと認識されてほしいと、切に願います。

iad_otomamayiad_otomamay 2009/03/01 11:02 >soryamuridaさん
コメントありがとうございます。
頭から尻尾までやってこそ最高品質のものが提供できると実感しています。
プログラムができることの価値がもう一度見直されるべきだと思います。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/iad_otomamay/20090210/p1