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

それには理由がある。

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

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


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

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

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

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

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

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


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

酷い。

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


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

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

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


例えば、

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

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

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

・数字もDateもStringだ。

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

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

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

この業界の問題、それは

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

これを顧客に納品する。

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

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

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


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

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

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

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

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

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

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

そのときには、答える。

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


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

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


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

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

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

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

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

実装がキモなのに。

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

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

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

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

リアクション

  1. toyoyuishidaからリブログしました
  2. bananachipsishidaからリブログしました
  3. mitmulishidaからリブログしました
  4. ishidakiri2からリブログしました
  5. snowburstwinkcatからリブログしました
  6. e-tagkiri2からリブログしました
  7. roxicyazinからリブログしました
  8. netgamegeekbr117からリブログしました
  9. yazinkiri2からリブログしました
  10. winkcatkiri2からリブログしました
  11. br117hepton-rkからリブログしました
  12. fujihajimefujihajimeからリブログしました
  13. kiri2toshi0104からリブログしました
  14. g616blackhearthepton-rkからリブログしました
  15. ambincfujihajimeからリブログしました
  16. datteehepton-rkからリブログしました
  17. fujihajimehepton-rkからリブログしました
  18. toshi0104hepton-rkからリブログしました
  19. hepton-rkgkojayからリブログしました
  20. hjklgsikimiからリブログしました
  21. sikimimomniauroraからリブログしました
  22. kingc100wakahouからリブログしました
  23. momniaurorapeckoriからリブログしました
  24. laugh-ninwakahouからリブログしました
  25. jacopeverwakahouからリブログしました
  26. teracywakahouからリブログしました
  27. munuupeckoriからリブログしました
  28. peckorinya-buroからリブログしました
  29. wstkennya-buroからリブログしました
  30. nya-burowakahouからリブログしました
  31. wakahouunch0からリブログしました
  32. kamitoxlisからリブログしました
  33. unch0xlisからリブログしました
  34. xlis7bitからリブログしました
  35. senchoaltimeterからリブログしました
  36. aoix2mitukiiiからリブログしました
  37. hagixyr24からリブログしました
  38. yr24c610からリブログしました
  39. c610yukiminagawaからリブログしました