トップ «前の日記(2008-05-05) 最新 次の日記(2008-05-09)» 編集

十日日記


2008-05-07

Link コンピュータ関連書籍の翻訳に何を求めるか

連休中に行なうべき作業のひとつに、RHEL 4.6で動いている某サーバーのPHPを4.3.9から5.xに更新することがあった。古いコードがけっこうあるので、それらのテストも必要だ。VMwareとCentOSでウェブ開発の環境をさっさと整える手順書(前編) に従って仮想サーバーを立て、そこでテストをする。VMwareを使ってテストする方法は前にもやったのに、思いつくまで1週間ほどかかったのが情けない。幸運はメモリ価格が下落していることで、一気に3GBにしてみた。これは安心感があって嬉しい。1GB使ってもまだ2GB。

ちなみにPHPの更新自体は、CentOS 4.6のextrasにyumの更新先を振り向けて、PHPだけでなくMySQLもPostgreSQLも一挙にアップグレードした。互換性を考えつつパッケージを作るのは手間だし、up2dateは嫌いだし、RedHatのサポートも不要だし、味噌汁は鰹出汁、とにかく無事に片付いて安堵する。

この2年間、言語を使う仕事の9割近くはVBAやVB6やVBScriptを利用してきたので、Web関係の知識が腐っている。これを改善すべく、この2日ほどはJavaScriptとAjaxの初歩を学習し、ついでに上の通り某サーバーがPHP5になったのを機にPHP5もお温習いする。人間の忘却力は大したもので、PHPでは文字列の連結に「.」ではなく「+」を使ったりしてハマる。

JavaScriptは言葉が物々しくて、敬して遠ざける感じで遠巻きに眺めていた。JSONなんて名前からして怖いと思っていたのだが、ただの便法とわかり拍子抜けする。いちばん勘違いしていたのがクロージャだ。私はクロージャと聞くと、ある集合を含む最小の閉集合という「集合と位相」の話をずっと想像していて、そんなことまで使うのか、とひとりでビビッていたのだった。

Ajax in action JavaScriptの学習に使った教材は、買ったまま放置していた『Ajaxイン・アクション』(インプレス、2006年)の付録Bである。JavaScriptの概要が30ページと短くまとまっていたので便利だ……と書きたいところなのだが、けっこう不親切かもしれない。また、はてな監修とのことだが、翻訳の日本語がよくわからない。たとえば、

プロトタイプはJavaScriptオブジェクトのプロパティであり、オブジェクト指向言語には同等のものは存在しません。関数とプロパティはコンストラクタのプロパティと関連付けることができます。すると、プロトタイプとnewキーワードがともに機能するようになり、関数がnewによって呼び出されると、その関数用のプロトタイプのプロパティとメソッドがすべて結果としてのオブジェクトにアタッチされます(p.605)。

は、私は最初の2文しか意味がとれない。さらに下の文章となると、着いていけなくなってしまう。

しかし、DOM要素上でクリックすると、Eventオブジェクトを引数として、またその要素自身をコンテキストオブジェクトとして伴いつつ関数が呼び出されます。このことを知っていると、特にオブジェクトベースのコードを書くときに、多くの悩みから解放されることでしょう。混乱の主な原因は、関数が異なるオブジェクトのプロトタイプにアタッチされている場合でも、DOMノードがいつもコンテキストとして渡されることです(p.618)。

日本語として整っていない文を読むのが苦手なのもあって(いちばんの理由は翻訳されていないことだが)、この1年ほどはコンピュータ関連書籍はほとんど米国アマゾンから直接買っている。技術書の英語はそう難しくないので、非実用的な英語運用力しか持たぬ私のような者でも読み通せるものだ。

そうして考えてみると、コンピュータ関連の翻訳書籍の価値は「さっさと読める」点にあるのではなかろうか。米国の教科書や解説書は、率直に言ってくどい。米国の算数の教科書は平均1000ページあるそうで、アメリカ人児童の数学力向上のためにはもっと薄くすべしという提言がなされているほどだ(National Mathematics Advisory Panel)。うんざりするような冗長な解説は圧縮して、なるべく薄く、軽くするような方向が望ましいと思う。

たとえば、次の段落があるとしよう。

How does object-oriented design differ from the more traditional procedural code? It is tempting to say that the primary distinction is that object-oriented code has objects in it. This is neither true nor useful. In PHP, you will often find procedural code using objects. You may also come across classes that contain tracts of procedural code. The presence of classes does not guarantee object-oriented design, even in a language like Java, which forces you to do everything inside a class.

ベタに逐語訳すると、こんな感じになるだろうか。

オブジェクト志向設計は、従来の手続き型コードとどのように異なるでしょうか。主要な区別は、オブジェクト志向のコードにはオブジェクトがある、というのは魅力的なことです。これは、正しくないだけでなく有用でもありません。PHPでは、オブジェクトを使用した手続き型のコードをよく見かけるでしょう。また、手続き型コードだらけのクラスに遭遇することがあるかもしれません。クラスの存在は、すべてをクラスの中で行なわさせるJavaのような言語であってさえ、オブジェクト志向設計を保証するものではないのです。

この段落は要するに、「オブジェクトやクラスがあるからといってオブジェクト志向だとは言えない」という話だ。それをここまで冗長に書ける才能には感心するけれど、上のような逐語訳の日本語は読みたくない。極端な話、簡潔さを優先するなら先の要約だけで済ませてしまってもいいと思う。せめて、次くらいの短さになってほしい。

オブジェクト志向設計は、従来の手続き型コードと何が違うのでしょうか。それはオブジェクトの有無だと答えたくなっても無理からぬことですが、完全に間違っています。PHPでは、オブジェクトを使用した手続き型コードは珍しくありません。また、クラスがあるからといってオブジェクト志向設計になっているともかぎりません。Javaのようにクラスを強制する言語でも同様です。

言うまでもないことだが、仕様書なんかはこんなふうに訳すべきではない。が、仕様書は原文で読んだほうがよいと思う。

Tags: 言語
[]


プロフィール

渡辺 慎太郎(na@10days.org)

分野別表示

Admin | Client | Dev | Excel | Linux | PC | PDA | Web | iPad | web | 家電 | 文具 | | 英語 | 言語 | | 音楽

月別表示

1999|07|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|

最近の記事

雨量情報 dictionary.com Yahoo google Yahoo! 路線情報 東京アメッシュ l-mura l-aka l-momo 目次 r-mura r-aka r-daidai r-kiiro asahi.com nogulabo r-sora r-midori r-midori r-momo