So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

新たな読書会図書 [横浜Go読書会]

横浜Go読書会の第1冊目の図書『プログラミング言語Go』を読み終えましたのでので、次回からは新たな図書を読みます。新たな図書は次の本です。

Goならわかるシステムプログラミング

Goならわかるシステムプログラミング

  • 作者: 渋川よしき
  • 出版社/メーカー: Lambda Note
  • 発売日: 2017/10/19
  • メディア: テキスト

参加申し込みは、connpass(第14回横浜Go読書会)からお願いします。

コメント(0) 

『Effective Java Third Edition』が届きました [本]

ej3e.jpg
米国の出版社(Pearson)から届きました。電子版も昨年末に出版社から頂いていたのですが、紙の本もいいものです。

2001年に初版が出版されて、17年が過ぎました。2001年に初版を読んだときには、正直なところ私にとっては書かれている内容が衝撃的でした。当時、技術評論社の雑誌「Java PRESS」や「XML PRESS」にJava関連の記事を書き、『プログラミング言語Java第3版』の翻訳も行い、Javaについてはかなり分かっているつもりでした。しかし、初版の英語版を読んだときは、自分が何も分かっていなかったと自覚したのを覚えています。

幸い初版を翻訳する機会を得て、翻訳しながら様々なフィードバックを著者のJoshua Blochへ行いました。翻訳者で著者へ問い合わせをする人は少ないようです。『Effective Java』は多くの言語に翻訳されていますが、それに関してJoshua Blochは次のようにツィートしています。

スクリーンショット 2018-01-26 6.29.06.png

つまり、著者の知らないところで翻訳が行われていることがほとんどだということです。同じことを『APIデザインの極意』の著者Jaroslav Tulachも述べています(こちら)。

幸い、その後は、Joshua Blochの新たな本の草稿をレビューする機会を得られて、『Java Puzzlers』、『Effective Java Second Edition』、そして、今回の第3版もレビューしました。残念ながら草稿をレビューしているときの注意力と翻訳をしているときの注意力は異なっているようで、草稿のレビューでは気付かなかった間違いを翻訳中に気付くことがあります(たとえば、こちらの8番目の「A」)。また、草稿にはなかった内容が最終版には入っていることもあり、翻訳していて間違いに気付くこともあります(『Effective Java Third Editon』は、レビューアからのフィードバックを反映した細かな修正が多いような気がします)。

日本語版『Effective Java 第3版』については、もうしばらくお待ちください。

コメント(0) 

『Effective Java Third Edition』 [本]

Effective Java (3rd Edition)

Effective Java (3rd Edition)

  • 作者: Joshua Bloch
  • 出版社/メーカー: Addison-Wesley Professional
  • メディア: Kindle

電子版は、すでに購入可能となっています。PDF版であれば https://www.informit.com/ から購入可能となっています。紙の本は、年明けのようです。

第2版に続いて、この第3版もレビューさせてもらいました。第2章から第12章までの原稿をレビューしました。レビュー用の第2章が送られてきたのが2月7日で、最終章である第12章が送られてきたのが11月25日でした。

日本語版は、私にとって17冊目の翻訳本になりますが、しばらくお待ちください。

英語版の正誤表は、こちらです。

コメント(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) 

第1回グローバリング・イノベーション・セミナー [プログラマー現役続行]

ジョイ・インク 役職も部署もない全員主役のマネジメント

ジョイ・インク 役職も部署もない全員主役のマネジメント

  • 出版社/メーカー: 翔泳社
  • 発売日: 2016/12/19
  • メディア: Kindle版

『Joy Inc.』の著者であるリチャード・シェリダンによる基調講演を含む「第1回グロバーリング・イノベーション・セミナー」が2018年1月10日(水)に開催されます。

セミナーの詳しい内容は、こちらです。

リチャード・シェリダンは、メンローイノベーションズ社の社長であり、メンローイノベーションズ社はソフトウェア開発において、デスマーチとは全く正反対でかつ、高品質なソフトウェアを作り出すためのソフトウェア開発組織を作り上げています。そこには、「Joy(喜び)」に満ちた組織が作られています。そのため、書籍のタイトルが『Joy Inc.』なのです。

書籍には、日本のソフトウェア開発組織がいまだに到達していないレベルのソフトウェア開発が述べられています。多くの日本企業の場合、単に「到達していない」のではなく、残念ながら「目指したことがない」事柄が多くの述べられています。ソフトウェア開発者や組織にとっては、この本の内容は、目指すべき姿の一つが描かれていますし、夢物語ではなく、現実にメンローイノベーションズ社では実践されているのです。

私自身もさまざまなソフトウェア開発で色々な改善を試みてきましたが、メンローイノベーションズ社のレベルを達成するには、マネジメント層の理解やサポートが非常に重要だと考えています。その意味でもソフトウェア開発のマネジメント層に読んでもらいたい書籍だと思います。

セミナーでは、私自身も技術講演として30分だけですが、私自身の取り組んできた実施例を紹介させてもらいます。

みなさんの参加をお待ちしています。

コメント(0) 

予約受付中『ベタープログラマ』(2) [本]

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

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

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

間もなく発売されますが、先日紹介した目次に加えて、アマゾンでは以下のように紹介されています。

プログラマとしてのキャリアをスタートすると、構文や設計を理解するだけでなく、その他の様々な事柄を理解し習得する必要があると気づきます。

本書は、優れたコードを作りだし、人々と効率的に働く生産性の高いプログラマになるための考え方とテクニックを38のテーマで紹介します。

はじめに、コード1行1行の書き方、デバッグやエラー処理、コードの改善方法など開発現場でのコーディングを取り上げます。

次にコードを単純に保つこと、コード変更やテスト、リリースなどソフトウェアを開発する際の考え方や心構えを扱います。

個人的な活動として、継続的な学習方法と停滞を避けるための課題の見つけ方など、自らを成長させる方法も紹介。

さらに組織の中で他の人とコミュニケーションを取りながら、効果的に働くための習慣を解説します。

『Code Craft』の著者Pete Goodliffeが、自らの経験を元に「優れたプログラマ」になるための考え方と習慣をまとめた本書は、プログラミングを愛し、長く続けながら、優れたプログラマになりたいと思うすべての人に必携の一冊です。

各章の終わりでは、読者が考えるべき複数の「質問」が用意されています。自分の経験を振り返りながら答えを考えてみてください。そして、「やってみる」として、みなさんに挑戦してもらいたいことが一つ提示されています。最後に、章の内容に関連したちょっとした漫画が描かれており、面白く読むことができます。

コメント(0) 

『Java Puzzlers』とGo言語(2) [golang]

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース

  • 作者: ジョシュア・ブロック
  • 出版社/メーカー: ピアソン・エデュケーション
  • 発売日: 2005/11/14
  • メディア: 大型本
パズル3: 長除法(Long Division)

このパズルは、2 つのlong 値を割るプログラムに関することなので、LongDivision と呼ばれます。被除数は一日が何マイクロ秒であるかを表し、除数は一日が何ミリ秒であるかを表しています。このプログラムは、何を表示しますか?
public class LongDivision {
    public static void main(String[] args) {
        final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
        final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
        System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
    }
}
このプログラムの実行結果は、5です。その理由は、Javaではint型(上記の数値リテラルはすべてint)から構成される式の演算結果の型はintなので、上記のMICROS_PER_DAYへの代入の右辺の式の計算結果はintに収まらずにオーバーフローが発生しているからです。その結果、小さな値となっており、実行結果が5なのです。

単純にGo言語で書いたコードは次のようになります(対比しやすいように、Go言語の命名規則には従っていません)。
package main

import "fmt"

func main() {
    var MICROS_PER_DAY int64 = 24 * 60 * 60 * 1000 * 1000
    var MILLIS_PER_DAY int64 = 24 * 60 * 60 * 1000
    fmt.Println(MICROS_PER_DAY / MILLIS_PER_DAY)
}
このコードの実行結果は、1000です。その理由は、右辺の式に書かれているものはすべて定数つまり「型付けなし整数」であるため、式の演算はコンパイル時に計算されます。そして、その計算結果の値も「型付けなし整数」なのです。

「型付けなし整数」の値は、型がある変数(上記の場合、int64MICROS_PER_DAY)への代入において、変数の型(int64)の取り得る値の範囲に収まれば、コンパイルされます。収まらなければ、コンパイルエラーです。

コメント(0) 

総閲覧数が累計で600万を超えました [総閲覧数]

スクリーンショット 2017-11-29 6.28.22.png
総閲覧数が600万を超えました。500万から600万は15か月でした。

コメント(0) 

『Java Puzzlers』とGo言語(1) [golang]

先週の金曜日のGo言語研修が終わって、懇親会(会社の食堂)まで時間があったので、『Java Puzzlers』をやってみました。

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース

  • 作者: ジョシュア・ブロック
  • 出版社/メーカー: ピアソン・エデュケーション
  • 発売日: 2005/11/14
  • メディア: 大型本

もう12年前の本で、現在は絶版となっています。発売された時に、日本でJavaOneが開催されていて、印刷されたばかりのこの本が販売された頃が懐かしいです。

ところで、Javaではパズルになるものが、Go言語ではそもそもコンパイルエラーになるものが多いです。その理由の一つは、異なる整数型の混合計算をGo言語が許さないことです。初めてGo言語に触れると、その点がちょっと煩わしく感じます。でも、パズルをGo言語で書くとどうなるかを知ると、言語の違いが分かってきて面白いです。
パズル2: 変革の時(Time for a Change)

次の文章問題を考えてみてください。
トムは、$1.10 するスパークプラグを購入するために自動車部品店に行きますが、財布の中にあるのは2 ドル紙幣ばかりです。2 ドル紙幣でスパークプラグの代金を支払ったとしたら、彼は、お釣りをいくら貰うでしょうか。

この文章問題を解こうとしているのが、次のプログラムです。このプログラムは、何を表示しますか?
public class Change {
    public static void main(String args[]) {
        System.out.println(2.00 - 1.10);
    }   
}
これを実行すると結果は、0.8999999999999999となります。その理由は、1.10を浮動小数点数では正確に表現できないからです。

Go言語で同じコードを書くと次のようになります。
package main

import "fmt"

func main() {
    fmt.Println(2.00 - 1.10)
}
そして、実行結果は、0.9です。なぜ、Go言語でこうなってしまうのでしょうか?

それは、2.001.10の扱いの違いです。Go言語では、それらは「型付けなし(untyped)浮動小数点数」です。そして、Printlnの引数の式は定数リテラルの演算なので、コンパイル時に定数として計算されます。この定数計算に関しては、Go言語では言語仕様ですべのGo言語の実装に対して、次のように高い精度を要求しています。

Represent floating-point constants, including the parts of a complex constant, with a mantissa of at least 256 bits and a signed binary exponent of at least 16 bits.
しかし、いくら高い精度でもっても、正確には表現できないはずです。そこで、言語仕様では次の条件が付加されています。
Round to the nearest representable constant if unable to represent a floating-point or complex constant due to limits on precision.
つまり、定数計算の結果は、表現可能な最も近い値の定数となるのです。

もちろん、定数ではないfloat64の変数に代入してから計算すると、0.9にはなりません。
package main

import "fmt"

func main() {
    var x, y float64 = 2.00, 1.10
    fmt.Println(x - y)
}
このコードの実行結果は、0.8999999999999999です。

型付けなし定数については、『プログラミング言語Go』の「3.6.2 型付けなし定数」(p.87)でも説明されていますが、上記の丸めについては書かれていません。

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

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

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


コメント(0) 

レビュー終了:『Effective Java 3rd edition』 [本]

Effective Java (3rd Edition)

Effective Java (3rd Edition)

  • 作者: Joshua Bloch
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2017/12/29
  • メディア: ペーパーバック

記事「レビューした(している)これからの新刊」で、今年レビューしている本の一冊として紹介した『Effective Java 3rd Edition』のレビューが先週終了しました。

第2章から第7章までは、「Rough Cut」としてすでに「Safari」で読めるようになっています。こちらです。第3版では章が一つ追加されており、その追加された第7章「Lambdas and Streams」もSafariで読めます。

第2版では78項目でしたが、新たな第7章の7項目も含めて第3版は89項目になっています。

コメント(0)