「C言語でプログラミングする際の覚書」の誤訳箇所

ここでは、C言語でプログラミングする際の覚書の誤訳を列挙します。

参考として、私の翻訳はC言語プログラミングの覚え書き(改訳)にあります。

What follows is ...

×従うべきは

○これから述べるのは

"What follows" で「続くもの」という意味です。ここでの「続く」というのは、現在の文章に続く、つまり「以下に述べること」です。

But they've been accumulating in my head, if not on paper until now, for a long time, ...

×しかし、私の意見は頭のなかにしばらくあったものをまとめたものであり、長らく文章として公開してきませんでした。

○しかし、これらのことは、文書として書いたことはありませんでしたが、私の頭の中に長い時間をかけて蓄積してきたもので、…

"if not on paper until now" これは、"in my head" との対比です。「頭の中にはあったが、文書にしたことはない」という意味です。また、"for a long time" は "they've been accumulating in my head" にかかります。

I've yet to see a good essay on how to plan the whole thing,

×これまでプログラム全体の計画に関しての良い文章は読んだことがありますが、

○全体を計画する方法についてのよいエッセイを読んだことはありませんが、

"yet to" は「まだ…していない」という意味です。文意が完全に逆になっています。

a clear program is not made any clearer by such presentation

×明瞭なプログラムはそのような見た目で成されるものではなく

○明瞭なプログラムはそんな表示をしてもそれ以上明瞭にはなりませんし

"not made any clearer" は「さらに明瞭にはならない」ということです。

... is more to type (or calls upon your text editor)

×タイプ量(あるいはエディタ内で呼ばれる回数)が増え

○タイプ量が増える(または、エディタの助けを求める)ことになりますし

"call (up)on" は「頼る」という意味です。

if you consistently use a naming convention from which np means ``node pointer'' is easily derived

×どの np が "node pointer" を意味しているかがすぐに分かる命名規則を一貫して使っていれば

○np が "node pointer" を指しているということが簡単に導けるような命名規約を一貫して使っていれば

"from which" の "which" は "naming convention" を指しています。

As in all other aspects of readable programming, consistency is important in naming.

×プログラムの可読性に関していえば、命名において一貫性は重要です。

○プログラムの可読性に関するほかの側面での場合と同じように、命名においても一貫性は重要です。

元の翻訳では "As in all other aspects" が訳されていません。

I prefer minimum-length but maximum-information names

×私は最短の名前ではなく最も情報量がある名前を好み

○私は最短の長さで最大の情報量のある名前を好み

「最短であるが、しかし最大の情報量を持つ」という意味です。

They jangle like bad typography.

×悪い印刷のように目障りなのです。

○ひどい表示の仕方と同じように目障りなのです。

最初は、全篇を通して "typography" が「印刷」と訳されていたと思うのですが、その名残でしょうか。

Pointers are sharp tools

×ポインタは賢い道具で

○ポインタは切れ味の鋭い道具で

文字通りの意味です。「賢い」では、あとの「使い方を間違えると…」とつながりません。

If we want the next element's type

×もし次の要素の型が必要な場合は

○もし次の要素の type が必要であれば

原文で type がコード用フォントになっていませんが、文脈から構造体の要素名であることが明らかです。

less effort is expended by the compiler and computer

×コンパイラやコンピュータが展開する労力も減ります

コンパイラやコンピュータの費やす労力も減ります

"expend"(費やす)を "expand"(展開する)と間違えたのでしょう。

which allows some helpful compile-time error checking that array indices cannot share

×これでコンパイル時に配列のインデックスが適切で無い旨のエラー検出が可能になります。

○配列の添字と違ってコンパイル時の便利なエラー検出が利用できます。

"array indices cannot share" の "share" は、「同じく持つ」という意味です。配列の添字ではエラー検出ができないということです。意味が取れておらず、つじつま合わせになっています。

As a rule

×ルールとして

○だいたいの場合

熟語です。

expressions that evaluate to elements of a data structure

×データ構造の要素を評価するような…データ構造

○データ構造の要素として評価される式

ここでの "evaluate to" は、「評価されることによって…になる」という意味です。

Consider what ... would look like using a compound expression for p

×p の複合的な使い方をしているこのコードが何をしているかを考えてみましょう

○もし p の代わりに複合式を使っていたらどんな見た目になるか考えてみてください

「p の代わりに複合式(例えば、node[i] など)を使ったらゴチャゴチャした見た目になる」ということです。元の訳では意味不明です。

Sometimes it's worth a temporary variable (here p) or a macro to distill the calculation.

×時には一時変数(この場合は p )を使用したり、計算の本質を抜き出すマクロを使用する価値があります。

○計算の本質を抜き出すには、時には一時変数(ここでは p)やマクロを使うことが役に立ちます。

「一時変数」と「マクロ」は並列です。

Procedure names should reflect what they do; function names should reflect what they return.

×プロシージャ名はそれが何をするかを反映すべきです。つまり関数名はそれが何を返すかを反映すべきです。

○プロシージャ名は、それが何をするかを表しているべきです。関数名は、それが何を返すかを表しているべきです。

原文にない「つまり」があるために、実際にはない論理的関係があるかのように見えてしまいます。

A delicate matter, requiring taste and judgement.

×慎重に、経験と判断をもって書く必要があります。

○これはセンスと判断力が必要となる難しい問題です。

コメントの「書き方」ではなく、「コメントを書くこと(書くかどうかを含め)」全体に対するものです。

a symbol table might be implemented ...

×シンボルテーブルは…として実装されているでしょう

○シンボルテーブルは…として実装されるかもしれません

"might" はかなり弱い意味です。

Algorithms, or details of algorithms, can often be encoded compactly, efficiently and expressively as data rather than, say, as lots of if statements.

×アルゴリズム、つまりアルゴリズムの細かな部分は、しばしばデータという簡潔で、効率的で、表現豊かな形に記号化されます。それは、たとえば、多くのif文という形ではありません。

アルゴリズムや、アルゴリズムの細かいところは、たくさんの if 文のようなもので書くよりも、データとして書いたほうが、効率よく強力に記号化することができることがよくあります。

元の訳は、日本語としてよくわからないものになっています。

A classic example of this is parsing tables, which encode the grammar of a programming language in a form interpretable by a fixed, fairly simple piece of code.

×古典的な例で言えば、表のパースです。これはプログラミング言語の文法を、定形のかなり単純なコード片によって説明可能な形式に記号化することです。

○典型的な例としては、パージングテーブルというものがあります。プログラミング言語の文法を、定型のかなり単純なコードによって解釈できる形に記号化したものです。

"parsing tables" は全体でひとつの名詞です。動詞-目的語ではありません。また、"interpretable" はコードによって「解釈」できる、つまり読み込んでそれに従って動作できるという意味で、「説明」ではありません。

Finite state machines are particularly amenable to this form of attack

×特にこのような問題に取り組むときには有限状態機械が採用されていますが

○この手のやり方としては有限状態機械が特に柔軟に使えますが

"amenable" は「従順な」、つまり「柔軟に使いやすい」ということです。

can be constructed profitably as a data-driven algorithm

×生産的な形としてデータ駆動のアルゴリズムになります

○データ駆動アルゴリズムにすることでいい結果が得られるでしょう

"profitably" は、「利益が得られるような形で」というニュアンスです。

One of the reasons data-driven programs are not common, at least among beginners, is the tyranny of Pascal.

×データ駆動プログラムが一般的でない理由の一つは、少なくとも初心者においては、Pascalによる圧政でしょう。

○データ駆動プログラムが(少なくとも初心者の間で)一般的でない理由のひとつは、Pascalの独裁です。

"at least among beginners" は前にかかります。

This flies in the face of the theories of Turing and von Neumann

×このことはチューリングフォン・ノイマンの理論の前にはたち消えてしまいます

○これはチューリングフォン・ノイマンの理論に真っ向から喧嘩を売っています

"fly in the face of" は「真っ向から対立する」です。これは私も調べたところなのですが、「ここはたぶん熟語じゃないか」というセンスが必要です。適当に訳をでっち上げるのはよくありません。

I cannot recommend an implementation style more highly

×より高度な次元の実装方法を推奨することはできません

○これほどお勧めできる実装スタイルはありません

"highly recommend" という組み合わせはよく聞くものですが、"recommend ... more highly" はその比較級です。「それ以上お勧めできない」、つまり「とてもお勧めできる」ということです。

Maybe that's it:

×以上です。

○きっとこういうことなのでしょう。

これは ":" に続くものに対しての文です。

by construction

×ビルド時に

○組み立て方によって

「組み立て方を工夫することで(多重インクルードを避けられる)」程度の意味です。

but it's usually done wrong in practice

×普通は間違った結果となります

○実際には正しく運用されないものです

"in practice" 実際にやってみると、"done wrong" 悪いやり方で行われる、という意味です。元の訳ではなぜ「間違った結果」になるのかわかりません。