非公式PDF版SICP・新訳

計算機プログラムの構造と解釈、通称SICPを一から翻訳し直しました。


ファイル: SICP非公式日本語版 翻訳改訂版

リポジトリ: https://github.com/hiroshi-manabe/sicp-pdf


また、今回の翻訳をするにあたって考えたことを別記事にまとめました。


腐った翻訳に対する態度について


SICPはMITの有名なプログラミングの教科書です。詳しくはminghai氏の記事をご参照ください。

この翻訳改訂版は、minghai氏の非公式日本語版(以降、minghai氏版)のあまりにも惨憺たる翻訳を見かねて、原著から翻訳をし直したものです。この翻訳を進めるにあたっては、minghai氏版の訳を置き換えていくというやり方で進めていきました。しかし、差分を取ればわかっていただけると思いますが、minghai氏版のテキストは痕跡をとどめていないはずです。この方式を採ったのは、“そびえ立つクソの山”を少しずつ置き換えていくことによってやる気を出すという、主にモチベーション上の理由によるものです。もしminghai氏版の痕跡が(誰が訳しても同じようになるものを除いて)あるとすれば、それは作業漏れが残っているということですので、ご報告いただければ幸いです。

用語については、無用の混乱を避けるため、和田英一氏によるオンライン版「計算機プログラムの構造と解釈」(以下、和田氏版)にできるだけ追従するようにしました。もちろん、訳文はすべて自分で一から作り上げたものです。用語の追従によって著作権やライセンス上の問題が発生することはないと信じていますが、問題があるようであればお教えいただければと思います。

以下、minghai氏版に対して否定的なことを書くことになるため、人身攻撃をするつもりはない、また人身攻撃と受け取られるような部分があれば真剣に対応するということをあらかじめ表明しておきます。

minghai氏版を見たときの衝撃は、これまでにも何回も受けたことのある種類のものでした。ちょっと原文と比較するだけで、数限りなく致命的な誤訳が出てくる。またひとつ、とんでもない翻訳が世に出てしまった。なぜこういう悲劇はなくならないのか……。

私はそれまでにも SICP という本については聞いたことがあり、一度はしっかり読んでみたいと思っていたところでした。そこに出てきたminghai氏版がこのありさまだったため、書籍のほかにオンラインでも公開されている和田氏版に目を向けてみました。見ると、硬い印象の訳文で、すっと頭に入ってきにくいところはあるものの、真面目に時間をかけて読めば解読できるものでした。何より、(序文を除けば)致命的な誤訳は多くありません。それだけでも、minghai氏版よりはるかに優れていることは明らかでした。喩えるなら、和田氏版がこちこちに固くなった乾いたケーキだとすると、minghai氏版は柔らかい腐ったケーキというところでしょうか。

私としては、もしminghai氏版がなければ、和田氏版の訳書を購入して勉強して、それで済ませていたはずのところです。訳文は硬いとはいえ読めないことはなく、英語で読むよりは速く進められそうでした。ほかのこなれていない訳書同様、不満を持ちながら読み、それで終わりだったはずです。

しかし、minghai氏版が出てきたことで、状況は大きく変わりました。minghai氏版は無料のPDFなので、有料の書籍とオンラインHTMLという和田氏版よりアクセスが容易です。さらに、和田氏版は(Amazonのレビューにもあるように)翻訳の評判がよくありませんが、minghai氏版はですます調で一見親しみやすく、中身が腐っていることがすぐにはわかりません。

これでは、SICPの評判を聞いて勉強しようとした人が、minghai氏版に流れてしまうのではないか。私のその危惧は、Twitterのタイムラインで現実化していました。タイムラインでもminghai氏版に手を伸ばそうとしている人がいたため、和田氏版をお勧めしておきました。もちろん、その人は氷山の一角で、実際には少なからぬ人たちがminghai氏版に流れていることは確実でしょう。

文体が硬くて意味の取りにくい翻訳の場合、もたらす被害は限られています。訳文が直訳調で読みにくければ、読者はなんとか読み解く努力をするか、読むことをあきらめて訳者を責めるか(これはAmazonレビューで起こっていることです)のどちらかの行動を取るでしょう。後者の人に対しては(有料で購入した場合)金銭的な損害を与えているかもしれませんが、それがすべてです。どうしても読みにくければ、原文で読むことになるでしょう。いずれにせよ、翻訳が存在しなかった場合以上の害悪はありません。

しかし、表面上読みやすそうな腐った翻訳は、はるかに深刻な害悪をもたらす可能性があります。実際には誤訳のために訳文が意味不明になっているだけなのに、理解できないのは書いてある内容が難しすぎるためだ、それを理解するだけの頭脳が自分にないためだ、と読者は思い込んでしまうかもしれません。それだけはどうしても避けたいところです。

それらのことを考え合わせた結果、SICP を原文から翻訳しながら勉強していくことにしました。始めたとき、毎日一時間というペースで進めていくと決め、数日間やってみた進捗状況から翻訳が終わるまでの期間を見積もったところ、どうやら一年ぐらいかかりそうだとわかりました。一年というのは長い時間です。心がくじけそうになりつつも、ミヒャエル・エンデの「モモ」を思い出し、その日その日の分だけを考え、続けていきました。毎日夜9時からを定刻としていたため、Twitterでは「時報」と言ってくれる人もいました。

そして先日、ようやく翻訳とチェック作業が終わりました。期間は予定通り一年程度でした。勉強を兼ねての翻訳だったため、中身を理解しながら、練習問題もできるだけ(といっても、第3章の途中あたりでリタイアしましたが)解いていきました。前評判に違わず、SICPの内容はとても充実していました。翻訳前に危惧していたような、「この時間で何ができたか」と後悔するようなことにはならずにすみました。

もちろん、私のこの翻訳が完全だとは思っていません。しかし、致命的な誤訳が何百箇所もあってどこから手をつけていいかもわからないような“そびえ立つクソの山”でないことは保証します。この本の内容が理解できないとすれば、それは翻訳がおかしいからではありません。もちろん、内容が難しすぎるためでも、それを理解するだけの頭脳がないためでもありません。足りないのは時間をかけた読み込みです。じっくりと一文一文の意味を考え、サンプルコードを動かし、できるだけ練習問題を解いていけば、それで十分です。この本は、読者を置き去りにしようとするような本ではありません。

最後に、日本語版のテンプレートを提供していただいたことについて、minghai氏に深く感謝します。minghai氏の日本語版テンプレートがなければ、私のTeXLaTeXについての限られた知識では日本語訳を行うことはできなかったでしょう。

それでは、SICP非公式日本語版(真鍋版)をお楽しみください。

追記:PDF前文中の表現を改めました(編集前はこの記事とほぼ同じものを記載していました)。

腐った翻訳に対する態度について

今回、SICPの翻訳改訂版を公開するにあたって、minghai氏の非公式日本語版(以下、minghai氏版)については「惨憺たる翻訳」「そびえ立つクソの山」などと書きました。これらの言葉は、もちろん本心からのものです。しかし、それを表に出すかどうかについては、冷静に考えた結果として意図的に選択したことも確かです。ここでは、その背景について書こうと思います。

約一年前、私が善意のひどい訳についてという記事を書いたとき、しぶかわよしき様から以下のコメントをいただきました。

趣味のお金にならない翻訳だとだいたい最初の下訳で出しちゃいますね。だからといってそれが悪いことだとは思いません。英語を読まない人は言うまでもなく、英語を読める人でも「下訳」があれば原文を読む時にの速度は上がりますからね。クオリティに対して個人でできることといえば、指摘などで黙々と時間コストを代わりに負担するか、takeda25基金を作って、良い翻訳に対してパトロンになってお金を出すかどちらか以外はないと思います。このエントリーを読んでも世の中の品質があがることはなく、「翻訳するの怖い」と萎縮する人の方が多いと思います。ただでさえ、「怖いから」という話をよく聞きます。今は趣味翻訳する人もそれほど多くないけど、人数が増えれば、それだけ業界全体として翻訳にかける時間が増えて質も量も改善されると思います。僕は未熟でもなんでも、学生とかが翻訳をして公開するのが増えればいいと思ってます。

これに関して、四つのポイントから書いていきたいと思います。

  • ひどい翻訳はないほうがマシなのか
  • 腐った翻訳とはどのようなレベルか
  • 腐った翻訳を腐っていると言うべきか
  • 腐った翻訳を腐っていると言うことによる副作用とその対策

ひどい翻訳はないほうがマシなのか

情報は、基本的にはないよりもあったほうがいいものです。このことは直感的に共有されていると思います。

しかし、これは常に真であるとは限りません。例えば、次のような例を考えてみてください。日本語を片言レベルでしかわからない人が、何かの手違いで日本の首相にインタビューをすることになったとします。その人は、首相の言っていることがほとんど理解できず、たまたま知っていた単語を適当につなげて作文をしてしまった結果、荒唐無稽な記事が世に出てしまったとします。この場合、この記事が「ないほうがマシな情報」であることについてはあまり議論の余地がないでしょう。

ここで、情報が「ないほうがマシ」なものになってしまっているのは、その情報についての「メタ情報」(その情報がどのようなものであるかという情報)が間違っていることによります。どんな荒唐無稽なデタラメ記事であっても、「これは嘘ニュースです」と書かれて適切な場所で公開されていれば、ないほうがマシということにはなりません。上での例の記事が有害なのは、「首相の言葉」というラベルのもとで、首相の言葉でないものが公開されてしまっていることによるものです。

私がminghai氏版の翻訳を有害だと言っているのは、「SICP非公式日本語版」というラベルつきで、それに値しない情報が流されているからです。ついているラベルが「SICPに触発されて書いた自作ポエム」「SICP異世界語版」といったものであればよかったと思っています。

腐った翻訳とはどのようなレベルか

ここでは、「腐った翻訳」という言葉を「ないほうがマシというレベルの翻訳」という意味で使っていきます。

それでは、どのような翻訳が腐った翻訳なのでしょうか。一万文のテキストで、一万文すべてが誤訳であれば、それは確実に腐った翻訳でしょう。一方、一万文すべてが正確な翻訳であれば、確実に腐っていないと言えそうです。しかし、現実の翻訳は常にその間のどこかにあるものです。また、誤訳だらけの訳文から原文の意図を推測することが得意な人もいれば、それが苦手な人もいるでしょう。はっきりと「ここからが腐った翻訳だ」というクリアな線はありません。

私は、例えば2ページに1個程度の誤訳があれば、それは確実に腐った翻訳だと考えています。誤訳箇所に付箋をつけていくと見開きごとに貼っていくことになり、本が付箋でいっぱいになります。

minghai氏版には、大雑把にそのぐらいの誤訳があります。すべて指摘することはできませんが、ここではひとつだけ、翻訳の質を端的に示す例を挙げます。

In a related vein, an important current area in programming-language design is the exploration of so-called very high-level languages, in which one actually programs in terms of declarative statements.

関連領域において、プログラミング言語の設計における現在の重要な領域は超高水準言語と呼ばれる物の調査です。それは実際にプログラムを宣言的文の用語にて作成します。

ここで、"in terms of"を「の用語にて」と訳しています。英語が少しでもわかる人には、この誤訳がどのようなレベルのものかわかるでしょう。ほかにどのような誤訳があるか興味のある方は、真鍋版とminghai氏版と原文を見比べてみてください。

腐った翻訳を腐っていると言うべきか

私は、腐った翻訳についてはそのことをはっきり指摘するべきだと思っています。上で書いたように、腐った翻訳には現実的な害があるからです。指摘をしないで、どうやってその害を防ぐことができるのでしょうか。

英語が得意ではない人にとっては、翻訳が「腐っている」ということがどういうことなのかピンと来ないかもしれませんので、ここでプログラマ向けの例を出してみたいと思います。例えば、別言語からC言語に移植されたライブラリのコードを見ているところを想像してください。その途中、ある関数を見ていると、なんとその関数ではローカル変数へのポインタを返しているということに気づいてしまいます。C言語のまともなプログラマであれば、その瞬間にそのプログラムがどうしようもなく腐っていることに気がついてしまうでしょう。翻訳も同じようなものです。見た瞬間に、翻訳者が英語の文法も何もわかっていないことが気がついてしまうような誤訳というものがあるのです。

上での例のような腐ったコードがあれば、プログラマとしてはどうするべきでしょうか。まずは腐ったコードを「腐っている」と言い、そのコードをコンパイルしたプログラムを使わないように周知するべきではないでしょうか。それとも、初心者に「プログラミング怖い」という印象を持たれるかもしれないから言わないようにするべきでしょうか。私には、後者の意見は馬鹿げているように思えます。

腐った翻訳を腐っていると言うことによる副作用とその対策

以上のような理由から、私は腐っている翻訳には腐っていると言うべきだと考えていますが、それにはもちろん副作用が伴います。副作用には以下のようなものがあるでしょう。

  • 「翻訳するの怖い」と萎縮する人が出てくる
  • 無料の翻訳の量が減る
  • 言われた人が傷つく

それぞれについて考えてみます。

「翻訳するの怖い」と萎縮する人が出てくる

「腐った翻訳を出すと腐っていると言われるのが怖いから翻訳に手を出すのやめよう」という人が出てくるかもしれないということですが、それは「腐ったコードを公開すると腐っていると言われるのが怖いからプログラミングに手を出すのやめよう」というのと何が違うんでしょうか。

プログラミングと同じく、翻訳にもレベルがあります。プログラミング始めたばかりの人がLinuxカーネルにコントリビュートしようと思うでしょうか。それは無謀だと誰でもわかりますよね。最初は誰でも、自分なりの環境で単純な練習問題を解いたりするものです。翻訳もそれと同じです。自分の読めないレベルの文にいきなりぶつかるのではなく、自分に十分理解できるレベルの本を読むなどして実力を上げるのが結局は近道です。外国語なので、子供向けの本などを読むことも恥ずかしいことではありません。

「英語は苦手だけど翻訳に貢献したい」という気持ちは尊いかもしれませんが、まずは「英語が苦手」というのを克服してから貢献を考えてもいいと思います。それが間に合わなければ、自分で翻訳する代わりに、翻訳にかけるはずだった労力をアルバイトや残業などにつぎ込んで、それで得たお金でちゃんとした翻訳ができる人や会社に翻訳を頼むということもできるのではないでしょうか。

無料の翻訳の量が減る

「誰でも自由に趣味で翻訳するようになれば、無料の技術翻訳の量が増え、それに伴って質も上がるはず」という楽観的な意見があります。これはオープンソースソフトウェアのモデルが技術翻訳にもそのまま使えるんじゃないかという考え方から来ているのではないかと思います。しかし、ソフトウェア開発と技術翻訳はそんなに似ているのでしょうか。

実際のところ、技術翻訳は以下のような点でソフトウェア開発とは違います。

  • 創造性が少ない
  • 個人個人の速度の差が小さい
  • 再利用が利かない

まず、「創造性が少ない」という点について。プログラミングは、同じ目的を達成するのにも、非常に多くの選択肢があり、そこに創造性と楽しさが生まれます。翻訳は違います。翻訳は、あくまで原文の意図を忠実に伝えるということが第一です。文芸翻訳であれば創造性を発揮する余地もあるかもしれませんが、技術翻訳でそのような余地は限られています。

次に、「個人個人の速度の差が小さい」という点について。プログラミングであれば、一部の天才が数日間の突貫作業ですばらしいソフトウェアの基礎を作り上げるという話は珍しくありません。翻訳ではそのようなことはありません。どれだけ優れた翻訳者でも、平均的な翻訳者の何十倍もの速度で訳せるわけではありません。

最後に「再利用が利かない」という点について。ソフトウェアは、部品によって組み立てることができ、また作っているソフトウェア自身を部品として再利用しやすいようにすることができます。オープンソースソフトウェアは、まさにそのことによって驚くべき発展を成し遂げています。しかし、翻訳はそうではありません。一冊の本を翻訳しても、そこから再利用できるものはあまりありません。SICPの翻訳の一節がほかの本の一節として出てくるなんていうことはないのです(あるとしたら引用程度です)。翻訳メモリといった再利用の方法はありますが、同じ本の新しいバージョンでもない限り、あまり役に立つものではありません。

以上を総合すると、翻訳(特に技術翻訳)は「データを扱う」という共通点はあるものの、本質的にはソフトウェア開発よりも作業に近いと言えるでしょう。それは本来、対価が払われる仕事としてなされるべきものです。こういう面から考えても、無料の翻訳というものは時間やエネルギーに余裕がある人がボランティアとしてするぐらいのもので(現状ではそうなっていますよね)、安定的な供給が期待できるものではないのではないかと思います。

言われた人が傷つく

腐った翻訳をそうと自覚せずに公開した人に対して「翻訳が腐っている」と指摘すると、もちろん言われた人は傷つくことになるでしょう。いいことをしたと思っていた本人にとっては寝耳に水でしょうし、言うほうとしても気持ちのいいものではありません。

指摘をする場合には、「人身攻撃をしない」ということを心がける必要があります。私自身、minghai氏版の翻訳は腐っていると思いますし、それを公開したことは害悪だと思っていますが、それが善意から出た行動であることは疑っていません。不幸な事故のようなものだと思っています。

そもそも、なぜこういう不幸なことが起こってしまうのか。それを考えるほうが建設的ではないでしょうか。

私は、「翻訳とは誰にでもできる」という考えがその原因ではないかと思います。「翻訳は誰にでもできる」というのは、「注射は誰にでもできる」と言うようなものです。注射針を腕に突き立てることは誰にでもできますが、注射針を「正しく」刺すことは誰にでもできるわけではありません。翻訳もそれと同じです。自分がどの程度「正しく」翻訳できるかということを把握していないとひどいことになります。

まとめ

以上のように、私は「ないほうがマシなレベルの翻訳というものはある」「そのような翻訳に対してはそうと指摘するべきである」という考え方です。そして、minghai氏版の翻訳はそのようなレベルのものだと思っています。

本来は、minghai氏版を最初に見たときに指摘したかったところでした。当該記事のdara氏の次のコメントに強く共感します。

英語を「日本語」に変えるのは goo 翻訳でもやれます。ただ意味が通じない(何が言いたいかわからない)だけです。そして、それでは翻訳の意味がありません。

これを読み、私は言うべきことはすでに言われていると判断しました。minghai氏の回答は以下のようなものでした。

私はやれるだけのことをやりました。
後は皆さんの具体的な指摘を反映するか、または皆さんが私の成果の派生を好きに作って頂ければそれで満足です。

そのようなわけで、minghai氏に提供していただいたテンプレートをもとに、自分で翻訳を行いました。もちろん、テンプレートを提供していただいたことについては大変感謝しています。

私のこの翻訳により、SICPに興味を持つ人が増えることを願っているのはもちろんですが、「翻訳」ということについて真面目に考えてくれる人が増えてくれることも同時に願っています。