SSブログ
訳者まえがき・あとがき ブログトップ

訳者あとがき『Linuxシステムの仕組み』 [訳者まえがき・あとがき]

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

  • 出版社/メーカー: インプレス
  • 発売日: 2022/03/08
  • メディア: 単行本(ソフトカバー)

Linuxは、組み込みシステムからウェブサービスまで多くのシステムで使われています。そのため、ソフトウェア開発では、避けて通れないオペレーティングシステムになっています。今日では、ウェブサービスの多くがLinuxに基づくコンテナ技術に依存しており、開発マシンとして使っていなくても、間接的にLinuxを使っていることになります。

この本は、Linuxを使う上で知っておくべき知識を説明しています。この本で説明されている以上の詳細を知りたい場合、各章で紹介されている書籍やマニュアルページでさらに学ばれるとよいかと思います。Linuxカーネル内の仕組みについては、それだけで一冊の本になってしまうので、詳細には説明されていません。カーネルの仕組みに興味があれば、カーネルを解説した書籍を読まれることをお勧めします。

私自身は、1984年に社会人として働き始めてから、BSD 4.2/4.3、Idris、System V、SunOS、SolarisとさまざまなUnixを開発用としてだけではなく、製品のオペレーティングシステムとして使いました。Linuxも二つの組み込みシステムの開発で使いました。今日では、ソフトウェア開発にはUnixの系統の一つであるmacOSを使ってウェブサービスを開発しています。そのウェブサービスもクラウドのプラットフォーム上のKubernetes(17.2.4節)を使っています。また、Windowsであっても、WSL(Windows Subsystem for Linux)を使うことができます。その結果として、今日では、さまざまなプラットフォーム上で、Linuxを含むUnix系統のオペレーティングシステムやコマンドを使うことができます。

私がUnixを使い始めた頃は、Unixの機能は限られていました。たとえば、スレッド、共有ライブラリ、mmapシステムコール、TCP/IPのプロトコルスタックといったものはなく、プロセス間通信はfork/execした親プロセスと子プロセス間でのパイプだけでした。その後、さまざまな機能が追加されて、Linuxにも引き継がれています。一方で、30年以上慣れ親しんだUnixのコマンドは、現在でもその多くがソフトウェア開発で役立っています。Linuxの機能は拡張され続けていきますが、この本で説明されている基本的な事柄は、その多くが陳腐化することはないと思います。そして、皆さんのソフトウェア開発で役立ち続けると思います。

多くのソフトウェアエンジニアにとって、この翻訳本が日々のソフトウェア開発を支える知識の獲得に役立てば幸いです。

コメント(0) 

訳者まえがき『新世代Javaプログラミングガイド』 [訳者まえがき・あとがき]


プログラミング言語Javaが1995年に登場してから、25年近くの年月が経過しました。私自身がJDK 1.02で初めてJavaに触れたのが1996年夏であり、それ以来、Javaは大きく発展を遂げてきました。私自身が経験した言語仕様の大きな変更は以下の通りです。
  • Java 1.1でのネストしたクラスとインタフェース
  • Java 5でのジェネリックス、enum、アノテーション、拡張for文、可変長パラメータ
  • Java 8でのラムダ式、インタフェースでのdefaultのメソッドとstaticのメソッド
Java 9以降は、大きな言語仕様の変更はありませんが、細かな変更が行われています。この本は、Java 10から13までの変更、およびAmberプロジェクトで行われている言語仕様の変更を説明しています。この本で解説されている言語仕様の変更は、以下の通りです。
  • var(第1章「ローカル変数での型推論」と第5章「ラムダパラメータのローカル変数の構文」)
  • switch式(プレビュー言語機能)(第11章「switch式」)
  • テキストブロック(プレビュー言語機能)(第15章「テキストブロック」)
  • record(Amberプロジェクト)(第14章「データクラスとその利用方法」)
  • enumの拡張(Amberプロジェクト)(第13章「Amberプロジェクトの拡張enum型」)
  • パターンマッチング(Amberプロジェクト)(第17章「パターンマッチング」)
switch式はC言語から受け継いできた構文から脱却して、新たな構文を提供します。テキストブロックは、文字列リテラルの新たな書き方を提供します。パターンマッチングは、型検査と型キャストの冗長さを削減する機能です。

switch式とテキストブロック(text block)は、Java 13にはプレビュー言語機能(11.6節)として入っているので、オプションのフラグを指定する必要はありますが試せます。switch式は、Java 14で正式な機能としてリリースされる予定です。

言語仕様の変更以外にも、GCの改善や見落としがちなCDS(Class Data Sharing)をベースとした起動時間の短縮やメモリ量の削減などのさまざまな改善点が解説されており、Java 10以降の変更の概要を学べます。

原著と日本語版の違いについて

言語仕様の変更部分については、この本の原著が執筆された時点と、日本語への翻訳時点では異なっている部分が多数あります。そのため、日本語版では、必要な修正、削除、追加を私 自身の判断で行っています。また、原著はJava 12まででしたが、日本語版では必要に応じてJava 13および14へ言及したり、訳注を付けたりしています。

コメント(0) 

訳者まえがき『Effective Java 第3版』 [訳者まえがき・あとがき]

Effective Java 第3版

Effective Java 第3版

  • 作者: Joshua Bloch
  • 出版社/メーカー: 丸善出版
  • 発売日: 2018/10/30
  • メディア: 単行本(ソフトカバー)
 プログラミング言語Java は、1995年に登場してから短い期間に広く普及し、多くのソフトウェアエンジニアがJava 言語を使ってソフトウェアの開発を行っています。広く普及したとはいえ、プログラミング言語Java を正しく理解して、簡潔で、明瞭で、正確なソフトウェアを設計する能力を身に付けるのは容易ではありません。
 この本は、著者であるJoshua Bloch 氏が、Java 言語を用いたソフトウェア開発で得た経験や知識を まとめたものです。Java 言語の生みの親であるJames Gosling でさえ、この本の初版について次のように述べています。
10 年前にこの本を持っていたかった。私には、Java に関する本は必要ないと思うかもしれないが、この本は必要だ。
—James Gosling
 私自身も、初版の英語版を読んで目から鱗が落ち、多くを学び、影響を受けました。初版の翻訳をきっかけに、第2版と、この第3版の原著の草稿のレビューおよび翻訳を行い、その過程でさらに多くを学べました。この本は12章から構成され、第2章から第12章では、テーマに沿った項目が著者の経験に基づい て書かれています。項目の多くは、何も気にしないでプログラミングをしていては修得できない事柄を解説しています。
 第2版から10年が経過しており、Java 8で新たに導入されたラムダとストリームに関する第7章「ラムダとストリーム」が新規に追加され、既存の項目もその内容が見直されています。全体の項目数も第2 版の78項目から90項目と増えており、第7章以外でも追加されている項目があります。
 この本は、初版のタイトルにあった「プログラミング言語ガイド」の名にふさわしく、James Goslingの言葉は誇張ではありません。Java でプログラミングするすべてのソフトウェアエンジニアにとって必読の書籍だと思います。ただし、この本は、初心者向けではありません。この本の内容を理解するには、私が翻訳した『プログラミング言語Java 第4版』および『Java SE 8 実践プログラミング』で解説されている内容程度は理解しておく必要があります。また、この本では、Joshua Bloch 氏とNeal Gafter氏の共著『Java Puzzlers 罠、落とし穴、コーナーケース』で解説されている内容に関して、[Bloch05]として参照されているので、併せて読まれるとよいかと思います。
 翻訳に際して、原著の誤植や内容変更等は、Joshua Bloch 氏に確認を取って、日本語版では修正されています。初版および第2版と同様に、この第3版により、日本のソフトウェアエンジニアの技術力向上に微力ながら貢献できれば幸いです。


コメント(0) 

訳者あとがき『ベタープログラマ』 [訳者まえがき・あとがき]

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

  • 作者: Pete Goodliffe
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/12/15
  • メディア: 単行本(ソフトカバー)

今週末には書店に並ぶと思います。昨日、訳者への献本が出版社から届きました。

ベタープログラマ.jpg

原著『Becoming a Better Programmer』を読んだのは2年前(「技術的負債(6)」)で、『プログラミング言語Go』の翻訳作業が終わってから翻訳に着手したのですが、長い時間がかかってしまいました。

「訳者あとがき」は、次の通りです。
 私が30代であった1990年代まで、ソフトウェアエンジニアとしてどのような心がけが重要であるかに関する書籍は少なかったです。その後、『達人プログラマー(The Pragmatic Programmer』や『ソフトウ ェア職人気質(Software Craftsmanship』が出版されて、私自身も大きく影響を受けました。私自身の経験に基づいたソフトウェアエンジニアの心得に関する拙著『プログラマー現役続行』を出版したのが2007 年でした。その後も、『情熱プログラマー(The Passionate Programmer』や私が翻訳した『アプレン ティスシップ・パターン(Apprenticeship Patterns』などが出版されています。

 私が1978年4月に九州工業大学情報工学科に入学した頃と比べると、今日のソフトウェア開発は複雑なものとなっています。本書では、その複雑なソフトウェア開発をさまざまな側面に沿って議論し、各側面において優れたプログラマを目指してどのように活動するのがよいかが述べられています。

 読者のみなさんは、本書に述べられていることを実践できるようになるだけではなく、指導できるようになってください。日本のソフトウェア業界では、本書で述べられていることをきちんと実践したり、指導したりする人達が少ないのが現状だと思います。

 この日本語版が、若手を含む日本のソフトウェアエンジニアにとって、優れたプログラマを目指す上でガイドとなれば幸いです。そして、私自身もさらに歩み続けて向上していきたいと思っています。

訳者あとがき(『ベタープログラマ』)


コメント(0) 

訳者あとがき『プログラミング言語Go』 [訳者まえがき・あとがき]

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

「日本語版によせて」から「第1章 チュートリアル」までは、こちらでPDFファイルが公開されています。『プログラミング言語Go』では「訳者まえがき」ではなく「訳者あとがき」としたので、公開されたPDFファイルに「訳者あとがき」は含まれていません。

訳者あとがき

私がコンピュータに初めて触れてプログラミングを学び始めてから、すでに38 年の月日が流れました。その間にさまざなプログラミング言語を学び、さまざまな製品開発に従事してきました。

月に一回の勉強会でしたが、会社の若手のエンジニアと一緒に私自身がGo に取り組み始めたのは2010 年8 月でした。2012 年3 月にGo のバージョン1.0 が正式にリリースされ、2012 年10 月には私にとって最初のGo に関する翻訳書である『プログラミング言語Go フレーズブック』(デイビッド・チズナール著、ピアソン桐原)が刊行されました。一緒に学んだ若手のエンジニアの一人に、Tour of Go の日本語サイトの運営を行っている荒木さんがいます。

新たなプログラミング言語を学ぶことは、よく知っているプログラミング言語から類推しながら学ぶことと、新たに学ぶことに分けられます。特に、よく知っているプログラミング言語にはない概念が含まれていると、それを理解するまでに時間を要するかもしれません。C++ での3 年間のプログラミングを経た1996 年の夏に、新たに登場したJava を学んだときにはインタフェースをすぐには理解できませんでした。Go でも、最初は私自身の理解を混乱させた機能もあります。

Go はウェブサービスで使われている事例が多いですが、言語そのものは汎用のプログラミング言語です。1993 年から2009 年まで、一部の期間を除いて私自身は組み込みシステムであるデジタル複合機(コピー、Fax、プリンター)のソフトウェア開発に従事し、C++ で開発しました。C++ での開発では独自のメモリ管理やスレッド安全なライブラリの設計も行い、最後の五年間は完全なテスト駆動開発をC++ で行いました。そのような経験を踏まえ、Go は組み込みシステムの開発にも向いていると思っています。

小さなスタックで動作する軽量なゴルーチン、CSP による通信、ガベージコレクタとメモリ保護、構造体によるコンパクトなメモリ設計、オブジェクト指向プログラミング、および、ウェブのクライアントやサーバの機能を含めたさまざまな機能を提供する標準パッケージと、道具は揃っています。したがって、オペレーティングシステムにLinux を採用している組み込みシステムでは、C やC++で開発するのではなく、Go で開発するのが適切だと思っていますし、将来Go で開発されるのが普通になる日がくるのではないかと期待しています。実際、ある組み込みシステムの制御ソフトウェアをGo を使った完全なテスト駆動開発で行うプロジェクトを2 年間にわたり率いて、Go での組み込みシステムの開発が可能なことを実証できました。

『プログラミング言語Go』の翻訳を通して、私自身も多くの事柄を再確認することができました。さらに、実際に練習問題を解くことで、Go の標準ライブラリの強力さを再認識した次第です。この本は、Go の基本仕様を理解するために必要十分な情報が網羅されており、いわゆるバイブル的な本としての役割を十二分に果たす内容になっています。読者のみなさんも、言語仕様を理解するだけではなく、練習問題を実際に解かれることをお勧めします。

この翻訳書が、日本でのGo の普及に役立ち、日本のソフトウェアエンジニアがGo でのプログラミングを楽しめることに役立てば幸いです。


訳者まえがき 『Java SE 8 実践プログラミング』 [訳者まえがき・あとがき]

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

  • 作者: Cay S. Horstmann
  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: 単行本(ソフトカバー)

訳者まえがき

 私自身がJava言語を学び始めたのは、1996年の夏でした。その頃は、バージョン1.02であり、ネストしたクラスやネストしたインタフェースは言語仕様として存在していませんでした。バージョン1.1でネストしたクラスやネストしたインタフェースが登場し、Javaプログラムの書き方が変わりました。その後の言語仕様の大幅な拡張は、2004年にリリースされたバージョン5.0であり、ジェネリックス、enum、アノテーションといった変更が加えられました。

 それから10年が過ぎて、再び言語仕様の大幅な拡張が行われ、Java 8として登場したのです。Java 6および7でも言語仕様の変更は行われましたが、小さなものでした。Java 8でのラムダ式の導入により、従来のコードが簡潔に書けるだけでなく、多くのライブラリが影響を受けて拡張されています。そして、いわゆる関数型プログラミング的な思考を求められるようになりました。

 ラムダ式に加えて、今までのJavaと大きく変わったのはインタフェースです。デフォルト実装を持つメソッドをインタフェースへ追加することができるようになりましたし、実装を持つstaticメソッドをインタフェースへ追加することもできます。ラムダ式のサポートとインタフェースの仕様変更は、従来とは異なったJavaプログラミングの世界への扉を開いたことになります。

 この本では、簡潔にJava 8の機能が説明されています。第1章から第8章までは、Java 8に関して説明されており、第9章ではJava 7が説明されています。また、各章の章末に練習問題が用意されています。練習問題に取り組むことで、Java 8の基本的な機能を習得することができると思います。

 1996年の夏からの18年間で、私自身は、Javaを通して多くのことを学んできました。もちろん、この本でも新たなことを学ぶことができました。多くのJavaプログラマーが新たな言語仕様を学び、実践し、マルチコア時代へ向けた新たな道具を獲得することに、この翻訳本を役立てていただければ幸いです。

※ バージョン5.0で行われた言語仕様の変更は、拙著『Java 2 Standard Edition 5.0 Tiger --- 拡張された言語仕様について』にまとめられています。

コメント(0) 

訳者まえがき 『APIデザインの極意』 [訳者まえがき・あとがき]

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

  • 出版社/メーカー: インプレス
  • 発売日: 2014/05/23
  • メディア: Kindle版

訳者まえがき

私自身がJava 言語を学び始めたのは、1996 年の夏でした。その後、Java 関連の技術雑誌の記事を執筆したり、2001 年に『プログラミング言語Java 第3 版』を翻訳したりしました。しかし、それまでは、API 設計に関しては、初心者の域を出た程度でした。API 設計に対する私自身のレベルを大きく押し上げてくれたのが、2001 年に翻訳したJoshua Bloch 氏の『Effective Java プログラミング言語ガイド』でした。そして、Jaroslav Tulach 氏のこの『API デザインの極意』(Practical API Design)は、さらにAPI 設計に対する私のレベルを大きく押し上げてくれました。Tulach 氏の言葉を借りれば、私の水平線を大きく押し広げてくれました。

API 設計は、大学で体系的に教えられることはないですし、企業でも教えられることはないと思います。その結果、日本企業においては、いわゆるSDK と呼ばれるソフトウェアを外部へ提供していても、必ずしも優れたAPI になっていないことがあります。私自身も、数多くの悪い設計のAPI を見てきました。しかし、なぜ、そのようなソフトウェアが量産されるのでしょうか。それは、何が良いAPI で何が悪いAPI であるかを分からないレベルのソフトウェアエンジニアが開発しているからかもしれません。あるいは、きちんとしたレビューを受けていないのかもしれません。あるいは、レビューできちんと指摘できるレベルのソフトウェアエンジニアがいないのかもしれません。

きちんとしたAPI 設計を学ぶには、ある程度独学で書籍を通して学習して、実践して習得していくしかありません。その意味では、Joshua Bloch 氏の『Effective Java』は必読書と言えますし、デザインパターンなども学ぶ必要があります。しかし、残念ながら、API を発展させていく観点でAPI 設計について書かれている書籍は、まれです。

この本には、オープンソースプロジェクトであるNetBeans のアーキテクトとしてTulach 氏が経験してきたことがまとめられています。Tulach 氏が行った様々な誤りが説明されており、それらの経験からAPI の発展を考慮した設計とはどのような設計かが説明されています。また、どのようにして、NetBeans の非推奨のAPI を終焉させてきたかも述べられています。そして、最後に、この本に述べられている方法論をアジャイルAPI 設計Agile API Design)と呼ぶことにすると述べられています。

この本は、プログラミングの初心者向けではありませんし、Java に関する知識が必要であり、『プログラミング言語Java 第4 版』の内容の知識が必要です。多くのJava プログラマが不慣れと思われる箇所に関しては、『プログラミング言語Java 第4 版』の該当箇所を訳注として示しています。

この日本語版が、API 設計に対する読者のみなさんの水平線を押し広げることの助けになれば幸いです。

コメント(0) 

訳者まえがき『Objective-C明解プログラミング』 [訳者まえがき・あとがき]

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

  • 作者: スティーブン・G. コーチャン
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2013/05
  • メディア: 単行本

訳者まえがき

 Objective-Cは、C言語とSmalltalkを組み合わせたプログラミング言語であり、オブジェクトの概念をSmalltalkから取り入れています。1983年に開発されており、その誕生からすでに30年が経過しています。Objective-Cは、C言語で記述されたプログラムをそのままObjective-Cコンパイラでコンパイルできて何の問題もなく実行されるという初期の決定に基づいて開発されました。その点では、C++言語と似ていますが、全く異なる発展を遂げています。C++言語とは対照的に、Obejctive-Cの生みの親であるBrad J. Cox氏は、現在のObjective-Cには関与しておらず、Apple社が独自に言語仕様を拡張してきました。
 私自身がObjective-Cという名前を聞いたのは、1990年頃であり20年以上前のことです。当時のMacintosh用の開発言語はC言語でした。そのため、Objective-Cのコミュニティは小さいものでした。本書の第1章で述べられているように、Apple Computer社がNeXT Software社を買収してから、Mac用の開発言語としてObjective-Cが採用されています。今日ではiPhoneやiPadの爆発的な普及により、多くのプログラマがObjective-Cを学び使用しています。
 本書は、初めてのプログラミング言語としてObejctive-Cを学ぶ人達を対象としていますので、C言語でのプログラミング経験がないことを前提として説明されています。結果として、C言語の解説は後半の章である第13章「基本的なC言語機能」で行われています。そして、本書全体が、初心者だけでなく、Objective-Cでプログラミングを行ってきた人にも役立つ内容となっています。
 当初は、原著Programming in Objective-Cの第4版で翻訳を始めましたが、XcodeとObjective-Cのバージョンアップにより、翻訳中に第5版が出版さました。そのため、第5版の修正内容を反映してあります。
 この日本語版が、読者のみなさんのObjective-CによるプログラミングとOS X/iOSアプリケーション開発の助けになれば幸いです。

『Objective-C明解プログラミング』

訳者まえがき・あとがき ブログトップ