
■ データ集計
同僚と組んで仕事をしていたのですが、何やら妙に残業をしています。彼が担当しているのは、あるデータを特定のキーで集計して、合計を出力するというありふれたプログラムです。
正直、私なら3日もあれば余裕を持って終わります。別に自慢でもなんでもなく、まともなプログラマーなら簡単に作ってしまうレベルではないでしょうか?
気にはなっていたのですが、私も残業続きで対応する余裕がなく、横目に見てるだけでした。ですが、納期が迫っているのに、いつまでたっても終わったと言わないし、黙り込んだまま残業を続けています。こちらから聞いても「ほとんど出来てる」と繰り返すばかり。
業を煮やして、作成中のプログラムを見せてもらったのですが、筆舌に尽くしがたい奇妙なロジックになっています。
データ集計のプログラムなんて、ロジックは決まりきっています。
1.集計するキーを表す前回キーと、集計用のワークエリアを準備
2.集計対象のデータを集計するキーでソート
3.1件目のキーを1で用意した前回キーに退避
4.データを順に読むこむループを開始
5.データを1件読み込む
6.読み込んだデータのキーを作成し、前回キーと比較
7.不一致であれば、出力エリアに集計結果を出力し、集計用エリアをクリア
8.読み込んだデータの数値を集計用エリアに加算(キーの一致、不一致に関わらず行う)
9.次のデータを読み込み、データがあればループの上端(3)に戻る
10.データがなければループを抜け、集計用エリアの値を出力エリアに出力する
かなり適当に書いたので、どっか抜けているような気がします。けど、大きな流れはこんなところでしょう。
基本中の基本中だと思うのですが、何を思ったのかデータ読み込みのループの中でさらにループをかけたり、妙なカウンタを大量に生成してたり、もう、何が何やら分かりません。
・・ ・いや、一年生じゃないんだからさぁ。
■ ロジック教育
仕事を取り上げても良かったのですが、やむなく指導することにしました。彼と、ついでに新人を呼びつけて上で書いた集計ロジックの基本をフローを書きながら指導しました。
問題の彼は死んだ魚のような目をしていたし、新人君は分かってるんだか分かってないんだか良く分からない顔してるし、今ひとつ成果は怪しかったのですが、まぁ、新人君には近いうちに自分で経験してもらうことにしましょう。
さて、問題はもう一人。実は、納期が翌日に迫っているのに動いていないという状況(前日の夜にプログラムを見て発覚した)だったので、私が後ろについて直接指導しながら仕上げました。
いい方法じゃない(彼のプライド的な問題で)のは分かってましたが、十分以上の時間があったのに仕上げられず、それを報告もしなかった彼にも責任はあると思ったので、納期の方を優先しました。
■ 余談
ところで、今回の最大の問題はロジックを書けなかったという能力不足ではなく、それを納期ギリギリまで放置した無責任な仕事のしかたです。
もっと早く報告していれば別の手も打てたってのに、もう、何やってんだか。手が回ってなかったとは言っても、ちゃんと声も掛けていたのに・・・
後で話を聞いたら、どうやらテストをきちんとしてなかったらしく、何となく動いたから良いやと思ってたそうです。プログラムを書くにの3日かかったなら、テストにも同じくらいの時間をかけないとダメだと話したのですが、これ、実は前にも言ってるんですよね。
あぁ、きちんと教育しないと、こんなのになっちゃうんですね。新人君には、この辺りの基本を叩き込まないとダメですね。
■ 後書き
記事で書いた集計ロジックですが、実際には実現する方法は幾らでもあると思います。私が書いたのは古典的な方法ですね。
ただ、こういう基本的なロジックはきちんと教育すべきだと思います。昔は、この類の基本的なロジックを解説した教材が沢山あったと思うのですが、最近は、その機能を実現するクラスの使い方という感じで、直接目的を果たす方法論に傾いている気がします。
・・・気のせいかなぁ。
前回:新人襲来5 マナー
次回:新人襲来7 説教
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end —
スポンサードリンク


