年齢としては40歳くらい。朝は早くから居るし、夜もそこそこ遅くまで頑張っていた。それもCOBOL一筋。ならら当然サクサクと仕事をしてくれるだろう、と思っていた。
ある日、その人はサブリーダーからCOBOLでデータフォーマット変換プログラムを1本託されていた。
入力レコードのフォーマットはレコードごとに持つレコード区分によって異なり、1件読み込んだらそのレコード区分(5種類)を判定し、レコード区分に合ったフォーマットに変換し1件出力する、というもの。入力ファイルは1つ、出力ファイルはレコード区分数だけあるから5つ、論理的には 入力ファイルの入力件数 = 5つの出力ファイルへの出力件数の合計 となる。
そう、分かる人には分かるだろうが、データ定義さえきちんとできればCOBOLに於いてはかなり簡単な部類のプログラムなのだ。
金曜朝に渡され、なぜか土曜も出勤して作成していた。土曜の夜に進捗を確認したら2日間で「まだ半分くらい」とのことであった。
通常な出力レコードにCOPY句を使うか、プログラム内に出力レコードフォーマットを定義して項目間でMOVE文を書けば、*1設計書はあるので半日仕事のはず。
不思議に思いソースコードを見せて貰うと、すべて部分列参照でデータを移そうとしていた*2。通常、こういう処理はCOPY句を入手するか作成するかをする。入力にREDEFINES*3も、入出力にCOPY句も使ってはいけない、との指示を受けた、とのことであったが、サブリーターに確認すると「そんな制約は一切ない」とのことであった。
経験年数ばかり長いだけで、中身は2~3年目のプログラマにも劣るくらいスカスカであった。
座席が遠かったので気づかなかったが、後で聞くと「昼間はよく居眠りをしていた」とのこと。これほど酷いエンジニアもなかなかいないが、無駄に経験年数だけを積んでいる人は感覚的には10人中2~3人は混じっているかな、と思う。
IT業界って、そういう人も平気で混じっているところが恐ろしい。
*1 ある項目からある項目へデータを転送する命令。COBOLの MOVE A TO B は、VBなどの B = A と同じ意味。
*2 VBでいうTYPE文を別ファイルとして適宜呼び出せるようにして共有できるようにできるもの。データの定義だけではなく処理も切り出せるが、一般的にはデータフォーマットの定義に使うことが多い。
*3 今でこそRDB全盛期だが、昔はファイルのマッチング処理によってデータの結合を行うのが一般的であった。しかしマッチング処理させるよりは1ファイルの中に概要、詳細1、詳細2というようにフォーマットの異なるデータを連続して入れておいたほうが処理効率がよいため「マルチフォーマット」というものがあった。そのマルチフォーマットデータを読み込んだ際に1つの物理的なレコードを、概要、詳細1、詳細2のような複数のフォーマットで閲覧できるようにするのがREDEFINESである。これだけでは説明不足ではあるが、ここではこのくらいの説明とさせていただく。
ある日、その人はサブリーダーからCOBOLでデータフォーマット変換プログラムを1本託されていた。
入力レコードのフォーマットはレコードごとに持つレコード区分によって異なり、1件読み込んだらそのレコード区分(5種類)を判定し、レコード区分に合ったフォーマットに変換し1件出力する、というもの。入力ファイルは1つ、出力ファイルはレコード区分数だけあるから5つ、論理的には 入力ファイルの入力件数 = 5つの出力ファイルへの出力件数の合計 となる。
そう、分かる人には分かるだろうが、データ定義さえきちんとできればCOBOLに於いてはかなり簡単な部類のプログラムなのだ。
金曜朝に渡され、なぜか土曜も出勤して作成していた。土曜の夜に進捗を確認したら2日間で「まだ半分くらい」とのことであった。
通常な出力レコードにCOPY句を使うか、プログラム内に出力レコードフォーマットを定義して項目間でMOVE文を書けば、*1設計書はあるので半日仕事のはず。
不思議に思いソースコードを見せて貰うと、すべて部分列参照でデータを移そうとしていた*2。通常、こういう処理はCOPY句を入手するか作成するかをする。入力にREDEFINES*3も、入出力にCOPY句も使ってはいけない、との指示を受けた、とのことであったが、サブリーターに確認すると「そんな制約は一切ない」とのことであった。
経験年数ばかり長いだけで、中身は2~3年目のプログラマにも劣るくらいスカスカであった。
座席が遠かったので気づかなかったが、後で聞くと「昼間はよく居眠りをしていた」とのこと。これほど酷いエンジニアもなかなかいないが、無駄に経験年数だけを積んでいる人は感覚的には10人中2~3人は混じっているかな、と思う。
IT業界って、そういう人も平気で混じっているところが恐ろしい。
*1 ある項目からある項目へデータを転送する命令。COBOLの MOVE A TO B は、VBなどの B = A と同じ意味。
*2 VBでいうTYPE文を別ファイルとして適宜呼び出せるようにして共有できるようにできるもの。データの定義だけではなく処理も切り出せるが、一般的にはデータフォーマットの定義に使うことが多い。
*3 今でこそRDB全盛期だが、昔はファイルのマッチング処理によってデータの結合を行うのが一般的であった。しかしマッチング処理させるよりは1ファイルの中に概要、詳細1、詳細2というようにフォーマットの異なるデータを連続して入れておいたほうが処理効率がよいため「マルチフォーマット」というものがあった。そのマルチフォーマットデータを読み込んだ際に1つの物理的なレコードを、概要、詳細1、詳細2のような複数のフォーマットで閲覧できるようにするのがREDEFINESである。これだけでは説明不足ではあるが、ここではこのくらいの説明とさせていただく。