Oh 脳《147》「我が輩は猫である」を英訳すると?
‖記事一覧‖Oh 脳: after ZERO《其之佰肆拾漆》
「我が輩は猫である」を英訳すると?
THE BOXER, 1969
In his anger and his shame
"I am leaving, I am leaving"
But the fighter still remains
先日、Software Design を献本していただいたので、
今回は、その宣伝を兼ねた話題を提供します。
- Software Design|gihyo.jp … 技術評論社
- Software Design 2010年1月号|技術評論社, 第2特集 コードを読む技術
● p.88「他人の家に土足で踏み込む」
私は、セミナー受講者のみなさんに、
「我が輩は猫である」を「I am a Cat.」に直訳したのでは…という話をしましたが、
著者の指摘にもあるように、その文化的な背景を理解しないと損をします。
プログラミング言語に限らず、外国語(自然言語)を学ぶときも、
言語を習得するのは「手段」であって、真の「目的」があるはずです。
文法への戸惑いを払拭できたら、その背景にある文化を堪能したいものです。
ソースコードを読むときも、
- 行間を読める
ようになったその次には、
- 著者を取り巻く(プログラミング)環境
にも思いを巡らせます。
「GoF を反面教師に 〜 Let's GoForward 〜」で伝えたかったのは、
デザインパターン GoF の背景にある文化を理解しないまま、
C++ の事例を他の言語に直訳しがちなプログラマーに対する警鐘でした。
- Let’s GoForward 〜 GoF を反面教師に
GoF が出版された時代に配慮すると、公用語に C++ を選択したのも頷けますが、
それは、フィルター(C++)を通して見える世界観に限定される危険を孕んでいます。
仮に直訳された「I am a Cat.」をもとに翻訳を繰り返したらどうなるか、
伝言ゲームの例を挙げるまでもなく、その問題点が浮き彫りになります。
実際に Ruby/Python などで記述されたデザインパターンの事例には、
GoF のサンプルコードを直訳したかのような代物をよく見掛けます。
確かにそれは、文法的にも正しく等価なコードと言えるかもしれませんが、
そこから逆に「我が輩は猫である」の趣を再現できるでしょうか。
自動翻訳された英文から、日本語に再翻訳したとき、
とかく不自然な表現になってしまう事例には、枚挙に暇がありません。
こんな話があります(古典落語に由来する逸話と記憶していますが…)。
ある弟子が鍛錬を積み、匠の技の一挙手一投足を完璧に模倣できるまでに至ります。
やがて、都で成功を納め、自身も多くの弟子を抱えるようになったとき、
「その所作にはどのような意味があるのか」と問われます。
もちろん、見よう見まねですから、その意味など知る由もありません。
やがて、故郷に凱旋を果たし、年老いた師に向って
「その所作にはどのような意味があるのか」と教えを乞うと、
師は「そのような所作には覚えがない」と不思議がります。
実際に匠の技を披露すると、師もその所作を忠実に再現するのですが、
実は何の意味もない所作(癖)だと気付き、愕然とするのです。
閑話休題。
ともすると、GoF に掲載された C++ のサンプルコードを鵜呑みにするあまり、
未熟な言語仕様のツケを、デザインパターンで清算したようなコードになりがちです。
GoF の著書をデザインパターンの「バイブル」として紹介するものもありますが、
GoF はあくまでも「原典」を紹介(再構成)したカタログ(ガイドブック)にすぎません。
海外旅行を計画するときには、ガイドブックを参考にするかと思います。
しかし、現地に行ってみないと体感できないものも少なくありません。
卑近な例が、海外のガイドブックに掲載された日本の紹介記事です。
日本人の平均的な感覚とのずれ(ギャップ)を痛感することになり、
日本に関する認識はこんなものか…と、複雑な思いに駆られたりするものです。
それと同様に、GoF が引用した原典を知る立場からすると、
パターンに関する認識はこんなものか…と、複雑な思いに駆られたりするもので、
GoF が何を伝え、何を伝えていないか…について、言及せずにはいられません。
《追記》
セミナー課題では、Iterator パターンを取り上げ、GoF の問題点を指摘しました。
(他のセミナーでは「for と別れる50の方法」として紹介したのと同じ課題)
- OOP への道 〜 if/for/配列と別れる50の方法
参考文献の著者も指摘しているような、Java で実現できる限界を越えて、
クロージャーを導入した Python 版では、より簡潔かつ柔軟な構造になるので、
仕様変更にも迅速に対処できるなど、プログラミングの効率化が期待できます。
とは言え、Java プログラマーより一昔(約10年)も前に、
Jython プログラマーは、クロージャーの恩恵に浴していたわけですから、
遅ればせながら私も、2003 年以降に Jython を本格的に導入したときに、
「もっと早く採用していれば…」と後悔したのも、理解できるかと思います。
《余録》
無くて七癖…とは良く言われることですが、卑近な例を挙げると、
インフルエンザ対策でも話題になったように、無意識に自分の顔を手で触ってしまうことです。
- 誰かに観察してもらうと、
- 誰かを意識的に観察していると、
自分では気付かなくても、何度も自分の顔や髪に手を伸ばしている様子が分かります。