ブログトップ 記事一覧 ログイン 無料ブログ開設

idesaku blog

2009-07-03

[]ひどすぎるネーミング

UKTKKNSHINF

こういう名前の変数が出てくるのだが、意味わかる?

答え:受付禁止情報

今読んでいるPL/SQLコードは本当にひどい出来なのだが、その中でもネーミングが群を抜いてひどすぎてむしろ笑えてくるので、ここでさらしてみたい。

先ほどの例でわかると思うが、悪しきネーミング習慣である子音母音抜きの嵐である。変数名だろうが関数名だろうがこのルールで命名されているので、暗号文を読んでいるような気分になる。

他には、例えばこんなのがある。

SKSI
作成
HNKN
変換
KKT
確定
CHKN
中間
DTM
Datetime
DTA
Data

こうして見ると、ktkrwktkとなんら違いがない。

"作成"のような、比較的簡単に対応する英単語が見つかるものまで日本語子音母音抜きで書くという徹底ぶり。でも"情報"はINFだったりする統一感のなさ。そしてこれらが単独ならまだしも、複合して出てくるから始末に負えない。なぜなら、単語間の区切りが無いからだ。例えば、YYKTRKSUKTKSYSIINFHYJまでくるととても読めたものではない*1

また、英単語そのままでよいはずのところも意味不明の改悪をしている。INFは一般的だからいいが、DTMと書かれたら普通は別のものを連想するだろう*2。特にDataをDTAにするところなんて神懸かっている。"a"を一つ抜くことで誰が幸せになるというのか。

俺は変数名に日本語のローマ字読みを使うことは反対しない。しかし、普通にローマ字書きすればいいのに、なんでこういうマネをするのか。

おそらく、PL/SQLの識別子には30文字までしか使えないらしいので極力短くしているのだろう。しかし、PL/SQLはパッケージを使えるんだから、それを利用してもっと責務を分割してわかりやすい構成と名称にすることはできたはずだ。数百行の関数が頻出しているのを見れば、そうできないはずがない。コード全体の設計のまずさが、ネーミングにまで悪影響を及ぼしている。

そう、ネーミング以外にも、長すぎる関数、無意味なコメント、変更箇所をコメントアウトして残す、などなど技術者を詐称するカスがやりがちなアンチパターンを一通り取りそろえているのだ。それゆえに、なにか事情があってこのような有様になっているのだろう、と好意的に考えられない。おそらく単に担当者が無能なのである*3

ただでさえ読みづらいコードを必死に頭に収めようとようとしているのに、こうした名前の変数の意味を解読している間にそれまで読み込んだ処理内容が頭から抜け落ちてしまう。恐ろしく困難なミッションである。そのくせ、これを成し遂げたところで自分のキャリアにとって何のプラスにもならない。何より、この妙なネーミングに適応するのがいやだ、脳が汚染される気がする。

ここは地獄だ。

2009/07/05、追加記事書きました

*1:予約取消受付詳細情報表示

*2:そもそも、その変数が日時型であることは宣言部分でわかることで、変数名に含める必要はない。悪名高きハンガリアンシステムハンガリアン記法と同じだ。

*3:優秀な担当者がどこぞのバカが決めたくだらないルールに縛られた結果、という可能性もある

姫橘姫橘 2009/07/03 16:49 既に汚染された俺参上!
だいたい読めてしまって軽く鬱だわ。。。

まあ、俺がそっちに居た時期にやっていた作業がまさにそれだ。
ひどかろうwwwひどかろうwwwww

反面教師のお手本に近いソースコードだよね。

なまえなまえ 2009/07/03 19:35 >変更箇所をコメントアウトして残す
軍曹のデスマ日記を思わず思い出しましたw

あひるさんあひるさん 2009/07/04 03:48 間違った理解が広まってるけど、本当のハンガリアン記法は変数の型ではなく、処理的な意味合いをprefixとして変数名に与える事なのさ。
たとえばパスワードを格納する変数の場合、crptPasswdのような名前をつけて、crptは暗号化されている事を示すと共有しておけば、処理を追わなくても暗号化された文字列が格納されていると分かるようになるわけさ。
逆に平文が入ってたらバグだってわかるし、キチンと理解して使えば有用なのだよ。
おそらく子音省略記法も何かしら本当の効用があるんじゃないかね。知らんけど。
PL/SQLのデバッグしてたらここにたどり着いてしまったので記念カキコです。すみません。
つーかもう帰りたい。

TedTed 2009/07/04 04:42 あひるさんも書いているけれど、悪いのはシステムハンガリアン。
本来の記法はアプリケーションハンガリアン。よろしこ。

それにしてもローマ字表記の母音抜きって、30年以上前の 8080 アセンブラ、インテルニーモニックの経験がある残党、しかも英語嫌いな無能がルールを決めた臭いがする。
変更箇所をコメントアウトで残すってのも、構成管理ツール使えない無能の仕業だね。

gokinozaurusugokinozaurusu 2009/07/04 05:38 PL/SQL関係なく、古い技術が関わってくるものにはありがちですね。
Oracle自体古参だし、あとはCOBOLでもあるみたい。
俺はJavaでこれに苦しみましたが。
規約だしすでにこれで膨大なソースがあるので容易に直せない。
変更箇所をコメントアウトも規約だし、
変更箇所の前後にBEGINとENDのコメントを入れて、
編集者名と編集日時、編集理由の記載が義務づけられてました。
あと変更箇所だけでなく、Javadocにも、同じことを記載。
うちはバージョン管理してたんですが元請がする気が微塵もないせいで
こうなってました
(今までそれでやってきて、そんなソースが大量にある
 わけだから今更変えたくないんでしょう)。
ちなみにDBもこの規約でしたね。

まあ当時、俺の場合はこんなことが些細なことに思えるぐらい、
(特に一緒に仕事してる先輩)とかの人間関係の悩みの方が
大きかったですが。

今はRubyのお仕事で幸せをかみしめてますが、
さすがにRubyでは見ませんね。
でもCOBOLからJavaを伝って、そこからRubyへ来た人たちが
平気で規約化しそうで怖い。規約ってそういうものなんです……。

これが文字数的に合理的な時代もあっただろうし、
当時管理者が日本語として理解するために、というのも
あったかもしれないですけど、
新しい技術を導入した時点で撤回すべき規約ですよね……。

おっと、言語を馬鹿にするつもりはないです。
Javaでもまともなソースはたくさん見てきたので。

gokinozaurusugokinozaurusu 2009/07/04 05:45 あと、今でこそ英語がわからない俺も常に手元に電子辞書を置いておくか、
和英 ○○でぐぐってすぐ英語の変数書けるからいいですが、
昔はネットにつなげない時代もあったわけで……。

もしかしたら今でもネットにつないで仕事できない場所もあるかも。
フィルタリングも知らず、一律つないじゃダメ、にしてる会社とか。

idesakuidesaku 2009/07/04 10:06 ハンガリアンの件、ご指摘ありがとうございます。修正しました。

ii 2009/07/04 13:58 http://local.joelonsoftware.com/wiki/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
一応貼っておきます

nillnill 2009/07/04 17:59 アプリケーションハンガリアンってハンガリアン支持者が批判をかわすための後付けですよ

権兵衛権兵衛 2009/07/04 21:02 なんか悪夢のような話ですね。
近づきたくない世界だ・・・

PL/SQLって一応Adaの影響を受けてるんでしょ?(よく知らないけど)
PL/という名前からしても、オブジェクト指向とまではいかなくても、いわゆる構造化はできるんでしょ? パッケージって言うんですか? 外から内部が不可視になるんですよね。

変数名の長さを切り詰めて可読性を下げるなんて、昔のFORTRANじゃあるまいし・・・

その昔、パソコン少年あがりで何でもBASICみたいに書くとんでもない連中がいましたけど、あれを思い出すなぁ。

バージョン管理(subversionとか)もやらないなんて、正に30年くらい前の感じですかね。

noricyannoricyan 2009/07/04 22:53 こんなもん、人間関係とかの問題に比べたら些細なことだよ。

ななしななし 2009/07/05 03:48 構成管理ツールを使えないのをフォルダでやるのが分かりやすいと正当化、フレームワークを使えないのを危険だからとか正当化。
それでjavaプロジェクトを担当する無能なハブル入社のコボラは死ねばいいのに。
いやまあ、そういうのを飼い続けている日立系SIがアレなのかな。

i2ci2c 2009/07/05 17:34 3年前まで居た会社がまさにこれでした。
当時新人の私があーだこーだ言って動いても変わるわけもなく・・・。

yamasushiyamasushi 2009/07/14 14:43 団塊の世代の、FORTRANで育った技術屋社長の会社はさらに大変だ。
「変数名・関数名は6文字以内でおさめるべし」
コンパイラが長い変数名に対応していても適用され続けた。
変数名の場合、暗黙の型宣言を使うことが奨励されるので頭文字は型を表します。

ハガーハガー 2009/08/04 12:31 ぶっちゃけアプリケーションハンガリアンも微妙ですよね。コンパイラに蹴らせるように組むのが正しい。

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


画像認証