現在出版準備中につき、変更の可能性があります。
あらかじめご了承ください。
訳者まえがき(暫定版)
数年前のこと、Go言語について調べていた訳者はとても懐かしい単語に出会いました。CSP(Communicating Sequential Processes)です。
今を去ること○十年前、訳者は修士論文に取り組んでいました。当時の専攻はソフトウェア工学。「(来たるべきマルチプロセッサ時代に対応した)書きやすく、わかりやすいプログラムを作るのにはどのようなプログラミング言語がよいのか」を一所懸命考える日々を送っていました。SIMULA、CLU、コルーチン、オブジェクト指向……などといった単語の周辺をさまよって、最終的にCSPを修士論文のメイントピックに選んだのでした。
それ以来ほとんどお目にかかったことがなかった単語が、比較的新しい言語の並行処理機能のベースになっていることを知ってとてもビックリしたと同時に、ちょっぴり嬉しくもなりました。当時の自分の目の付けどころが「悪くはなかった」ような気がしたからです。とはいっても、修士論文自体は、重箱の隅をつつくような内容で、とても満足できる内容ではありませんでしたが……(実のところ、あまり思い出したくない「ほぼ暗黒の2年間」でした)。
その後、就職したソフトウェア会社で出会った機械翻訳の面白さに魅了され、それ以来プログラミング言語自体の研究とはお別れをし、それから○十年間はC言語を手始めに、プログラミング言語をもっぱら使う側に回っていました。途中からは、プログラミング言語などの本の人間翻訳をしたり、プログラミングの講座を開くようにもなりました。
訳書を見直してみたら、言語自体の入門書(初版)だけでも次のようなものがありました。言語に関する訳者の感想とともにリストしてみましょう。
- 『HTML入門』(プレンティスホール、1995年)——プログラミング言語ではありませんが、HTML(+CSS)でウェブページを作れないなら、プログラミングの道には進まないほうが無難かと思います。このため開講中のJavaScript講座では、HTML+CSSを「前提知識」にしています
- 『Java言語入門』(プレンティスホール、1996年)——当初、実行速度が遅かったこともあって本を訳しただけで終わっています。コードの行が長く伸びてしまうのでどうも好きになれません。それに比べるとGoのコードの1行は短く書ける!
- 『Perl入門』(プレンティスホール、1997年)——自然言語処理の辞書関連など、テキスト処理をするのに、これまで一番よく使っていました。ただ、以前使っていたプログラムがバージョンアップで動かなくなることがあるのには閉口しました。これに対して、Goは互換性をとても重視しています
- 『初めてのJavaScript』(オライリー・ジャパン、2007年)——ブラウザさえあれば使えて、HTMLと組み合わせれば結構見栄えのするものができるので、プログラミングの入門には最適の言語だと思い、この言語の講座を開講中です。ただ、(他の多くの言語にも当てはまると思いますが)「こんなの、何%のプログラマーが理解できるの?」と感じてしまうような機能もけっこうあります。覚える(教える)のが大変ですし、言語の専門家が自分のアイデアの素晴らしさを実証するために組み込んだ最新の機能を使わなくても、素晴らしいシステムは作れると思うのです。Goにも「ちょっと難しいかも」という機能はありますが、もっと絞り込まれている印象です
- 『Python基礎&実践プログラミング』(インプレス、2020年)——AIブームで大ブレークですが、訳者自身は使う機会があまりありません。英語みたいにかけて悪くない言語だとは思いますが
- 『初めてのGo言語』(この本)——高速に動作する上にインタプリタ言語のような使い方もできる、クロスコンパイルが容易、並行処理のモデルがわかりやすい(CSPをベースにしているので当然!)といった点が特に気に入って、訳者のメイン言語になりそうです
* * * * * * * *
原著とこの訳書の違いをお知らせしておきましょう。
皆さんのお役に立てればと思い、付録Aに、原著の内容をベースにしてGo言語のまとめを書いてみました。また、付録Bに少し長めのプログラム例を書きました。訳者自身、付録Aと付録Bを見ながらコードを書くようにして、不足部分を追加していきましたので、読者の皆さんにもお役に立てるのではないかと思います。原著の最初のほうの章には、まとまったコードが書かれていないので、先に付録Bに目を通しておいていただくと、Goの世界に馴染んで、本文の内容がわかりやすくなるのではないかと思います。
原著出版後、Go 1.18がリリースされ、Go言語に「ジェネリクス」が導入されました*1。原著15章にはドラフト版に基づくジェネリクスの説明があったのですが、実際にリリースされたバージョンとかなりの違いが生じてしまいました。翻訳作業の途中に原著の出版社から15章の修正版が届きましたので、それに基づいて15章全体を翻訳し直しました。また、1章から14章にあったジェネリクス関連の記述や、ジェネリクスが導入されたことにより処理方法が変わったりする部分については、修正・加筆してGo 1.19以降での利用に支障がないようにしました。
このほか、原著にはコードの一部だけがリストされて(きちんと)動作するバージョンが掲載(公開)されていない例がありましたが、全体のコードがあったほうが便利でしょうから、訳者ができる限り作ってみました。動作確認はしましたが、まだGo言語の経験は長くないので、付録の内容も含め、お気づきの点はご指摘いただけば幸いです。
最後になりましたが、いつもお世話になっているオライリー・ジャパンの皆様に、深く感謝いたします。
「言語自体の本を訳すのはこれが最後かもしれないな〜」などと思いつつ(あっ、でもRustも面白そうかな)。
2022年8月
マーリンアームズ株式会社 武舎 広幸
[*1] その後Go 1.19もリリースされましたが、このバージョンは言語自体の変更はほとんどありませんでした。
現在出版準備中につき、変更の可能性があります。
あらかじめご了承ください。