この資格は酷い

試験内容 - 試験を知る - 個人の方 - Java™プログラミング能力認定試験│資格検定のサーティファイ│あなたのスキルアップを応援します|
仕事関係で名前が挙がり調べてみたのですが、これは酷い。何が酷いって 1 級の問題の元となるプログラムが凄まじく酷いです。
ググってみると酷さに定評のある資格のようで、今年の 1 月に id:ryoasai さんが詳しく批判しています。(この記事は大変よくまとまっているので一読をおススメします)
ただ……別に COBOL を擁護したい気持ちは全く無いし、OO 的にダメダメなのも間違いないのですが、オブジェクト指向の理解以前の問題があって、こんな書き方をするのであれば COBOL でも C でもまるでダメだと感じたのでそのあたりを書いておこうと思います。

定数じゃない定数

定数がことごとくインスタンス変数になってる。さすがに基礎知識の範疇と言っていいと思う。意味が分からなくても定数の文法ぐらいは覚えて static final って書くぐらいはして欲しい。
COBOL には標準では定数のきまりが無かったかもしれない(うろ覚え)けど、コンパイラがレベル番号とかで定数の宣言を用意していたはずで、それが使えるなら使うよう言われますよね? 代入がエラーになってくれるわけだし……
ついでに結構あるマジックナンバーも定数にしておくべきところ*1ですね。

メソッド名で嘘をつく

writeForCSV() メソッドが不可思議。いかにもファイルに書き出しそうなメソッドですがファイルに書いていません*2。C の関数名であっても、COBOL の SECTION(で良かったんでしたっけ?)名であっても、やってる事と違う名前を付けたら普通怒られます。
まあ、よく見ると to CSV ではなく、for CSV なので、間違っているのは write の方で、たぶん getStringForCSV() とか、getCSVString() のつもりだったのでしょう。

コピペ

〜List 系のクラスは順序正しくデータを管理したいようです。似たようなコードがすべてのクラスにあります。
TreeSet を使えば楽に実装できるでしょう。TreeSet が List でないので見つけられなかったとしても(こんなところで車輪の再発明はイマイチですが)せめて共通クラスを作る努力が欲しいところです。
そこから「データ毎に比較したい項目が違う、どうしよう……」「ん、Comparator ってのがあるぞ??」という流れで OO の世界へと向かってくれるかもしれませんしね。
COBOL でもたぶん、SEARCH(で良かったっけ?)使わずにコピペで似たようなコードを量産してたら怒られますよね?

変数名

変数名には意味が分かるものを付ける(sts1, sts2...とかダメ)も酷いですね。それぞれが何であるのかさっぱりわかりません。ひょっとするとこういう名前付けは COBOL では一般的なのかもしれませんが、きちんと意味が分かる名前を付けましょう。


このあたりはどのプログラム言語であっても気をつけて欲しい、せめてこれぐらいは新人であってもできて欲しいところ……だと個人的には思うので、「こんな書き方をするのであれば COBOL でも C でもまるでダメ」なのです。

*1:javaで書いて何でそんな事態になってるんだよっ! という点については……65535歩譲って見なかった事にしたとして

*2:そもそも何でデータを表すクラスがファイルへの出力形式に関して取り扱ってるの? xml に出力する事になったら writeForXML とかやるの? という点については(ry