手続き型プログラミングっぽいメソッド名
先日出題したクイズを補足説明します。
<問1>Javaプログラミングで「顧客情報のステータスをアクティブにする」メソッドメソッド名称を決める際、英語としての可読性がよい選択肢を1つ選びなさい。(a) doActive()
(b) setActive()
(c) changeActive()
(d) activate()
クリック得票数は少ないものの、答えはほぼ均等に分散しています。
以下、答えのヒントを解説します。
票を伸ばした選択肢(c) changeActive() について。
学校英語の常識だと「顧客情報のステータスをアクティブにする」の日本人的な英訳は以下のような感じでしょう。
- to change status to active.(冠詞などは無視)
すると、あえて動詞 change を使うなら、changeStatus() がより適切なような気がします。この場合は引数に「アクティブ」を指定する仕様となるので、さらに英語らしさを重視するなら、前置詞 to を付与するとよいでしょう。
changeStatusTo( ACTIVE ); # こんな感じで
選択肢(b) setActive() についても考え方は同様です。
念のため、ここから、オフショア開発に関連する話題にも一応触れておきます。さもないと、本誌は単なる英語学習のメルマガだと誤解されそうなので。
選択肢(d) activate() の主語は、「顧客情報」だとみなせます。すると、いわゆる無生物主語構文(S+V型)であり、如何にも英語的な表現だと言えます。
この発想は典型的な「オブジェクト指向」です。
一方、選択肢(b)や(c)は、英語としては特に問題ありませんが、何となく日本人が発想しがちな表現です。
選択肢(b)や(c)の発想は、前後の文脈にも強く依存しますが、いわゆる「手続き型」プログラミングでありがちな関数のI/F仕様です。
ここでオフショア開発プロジェクトでありがちな場面を想定します。
・海外オフショア委託先の技術者
= 学生時代から Java言語&オブジェクト指向しか知らない
・日本で設計しオフショア委託先にコーディング依頼する技術者
= 入社後にCやVBでプログラミングを学んだ。Javaが主流となった現在も、いまだに手続き型の発想で設計しがち
もし、過去の習慣が身体に染み付いた日本人が changeStatusTo( ACTIVE ) を手続き型プログラミングの発想で設計したなら・・・。
このような設計に不本意ながら従わされるオフショア開発委託先の外国人SEは「また Javaで不自然な設計が強要された。これだから日本人は・・・」と陰口を叩いているかもしれません。
こんな話は、まず表沙汰になりませんが、念のため、以下の事情を知っておくとよいでしょう。
・中国オフショア委託先の若い外SEは「日本人の技術力は低い」と心底、信じている(他国の事情については断言できませんが、恐らく、似た感覚だと思います)
・中国オフショア委託先から、日本人による不適切な設計に対して、頻繁に改善提案がなされるものの、大人の事情により、的を射た提案であっても却下されることが多い(全体が手続き型プログラミングの発想で設計されているため、部分最適化しても意味なし。よって提案が却下される結果に)
こんな裏事情も含めて、四択問題の正解や詳細については、来週の第50回オフショア開発勉強会にて解説します。乞うご期待。
■ 問いかけ
<問1>選択肢(b) setActive() を英語らしさを重視して書き換えなさい。もちろん、仕様は「顧客情報のステータスをアクティブにする」である。
<問2>オブジェクト指向系のプログラミング言語なのに、いかにも手続き型っぽい設計やコーディングをしてくるのは?
◆日本>オフショア委託先(日本が多い、という意味)
◆日本<オフショア委託先
◆日本≒オフショア委託先(どちらもよくある)
◆日本≒オフショア委託先(どちらも少ない)
◆個人差が大きいので国や地域は関係ない
締切:2014年09月06日18時00分
協力:クリックアンケート http://clickenquete.com/
The comments to this entry are closed.
Comments
> 選択肢(d) activate() は、
> 主語=「顧客情報のステータス」
間違ったかも。
主語=「顧客情報」がよりスマートかな。よって本文修正済み。
顧客情報という無生物主語が、顧客情報の属性の一つであるステータスをアクティブ化する、という感じが如何にもオブジェクト指向的です。
もちろん、主語=「顧客情報のステータス」と設計してもいいけど、「顧客情報のステータス」クラスが存在する前提。これは不自然だと思う。
やはり、顧客情報クラスの方が自然。C言語でいうなら「顧客情報構造体」を定義するのがスマートな感じ。
Posted by: 幸地司 | August 30, 2014 03:42 PM