flat7th

memo/20120315

created 2012-03-15 modified 2012-03-15 

google+ で話題になっていたサイトを見ました。

リンク備考
良いネーミングをするために覚えておきたい英語のルール5つうーむ

いいエントリー...と思いたかったのだが、

最初の表からして、私にはムズカシイ。
empty が名詞とはどういう理解をすればいい? empty は形容詞として使うことが圧倒的に多いのでは? isEmptyとか。

1節目の本文、「一般的な英語辞書のルールでは」と英語の話を始めるように見えて、英語の search を論じていない。明らかに、日本語の サ変 を、つまり「検索」と「検索する」の違いを論じてるよね。また「一般的な英語辞書のルールでは「検索」は動詞ではありません」と言ってるのに、その下の表では search を動詞の中に入れてる。結局関数名やメソッド名をどうつけろと主張したいのかな。
彼が言いたいのはやっぱり「日本語のサ変に注意しろ」ということ?

確かに、
日本語の仕様書だと「する」を除いて体言でメソッド名とすることが多い。例:エントリ名検索。
それに英語でメソッド名つけようとしたときアレ?となる。例:直訳でEntryNameSearch とするとおかしいな、となって SearchEntryName にする、など。
それに注意して、元の日本語仕様書のメソッド名を「エントリ名を検索する」にしろってことを言いたいの?
なんか変だよね。

脱線かもだけど

オブジェクト1 . メソッド( オブジェクト2 )

と書くときに、オブジェクト1と2の、どちらがどちらに作用するのか、日本語の仕様書と英語の名称で混乱したことないですか?


ブログサイト . エントリ名検索( エントリ名 )
メッセージ管理 . メッセージ登録( メッセージ )

はいいとして、

データ構造A . 子構造追加( データ構造B )
dataStructureA . addChild( dataStructureB )

はどうか。あるいは、

ウィジェットA . 描画( グラフィックコンテキスト )
wA . draw( gc )

はどっちだろうね。結局 wA の内部で

gc.drawLine( self.point1, self.point2 )

とかになって主語と目的語が逆転するよね。



ここで、一つ気付いた。

私が + 日本語コーディングしようぜ と主張する理由の一つに、「日本語と英語の名前付けに齟齬が生じて卵と鶏の問題に陥るから、日本語で仕様書を書いてヘンチクリンな英語のコードにするのをヤメレ」ということがあるのです。
英語の識別子でコーディングするなら仕様書も英語で書けばいいし、設計も英語で考えればいい。

日本語で設計して仕様書書いて、英語でコーディングするようなことをするから、必然的に「バイリンガルで意味の通じるプログラム」にする必要がでてくる。1レベル難しいことをやろうとしてるんですよ。
で、往々にしてそれが破綻する。
結果、後で人が交代すると「何だこのクソネーミングは」となる。

私もあなたも、彼女も彼氏も「自分はそこそこ英語ができる」「だから英語でネーミングできる」とか思ってるよね。
できてないからね。実際。全然できてない。
「できる」ってのは、1年に10k以上書くスピードで、後で他人が読んだときに「いいコードだ」と思ってもらえるものを書けるってこと。

上記のとおり、英語の知識があって意味が理解できるだけじゃ、日本語の仕様書に対する英語のいい名付けをして、プロ品質のプログラムを書くことはできないですよ。
日本語で仕様書書いて英語でいい名づけをするには、二ヶ国語で意味が成立するように作る必要があります。
言語そのものに対するかなり高度なセンスが必要になってしまうと。

そこが問題なんだな。