書籍『Javaで学ぶコンピュータ数学』 [献本]
山口県で工業高校の教諭をされている著者の平田さんから頂きました。高校生から大学生を対象とし、数学の解説とJavaでのプログラム例や課題が含まれていますので、実際にプログラミングをしながら学習していくのが良いかと思います。
目次は、以下の通りです。
第1章 記号化の数学第8章の計算量の話は、ソフトウェア開発に従事している社会人であっても知らない人が多いです。したがって、数学を復習を兼ねて勉強するには高度過ぎず適切な内容の本だと思います。
第2章 論理の数学
第3章 集合の数学
第4章 行列の数学
第5章 確率の数学
第6章 統計の数学
第7章 微分・積分の数学
第8章 計算量の数学
注意することとしては、基本的な事柄は説明はされていますが、Java言語の入門書ではないので手元に自分のレベルにあったJavaの本があると良いかと思います※。また、紙面の関係からコード例が詰めてあります。実際に、自分でプログラミングするときは、テキストのコードを参考にしながらも読みやすくレイアウトすると良いかと思います(この点は、本の冒頭に書かれています)。
※ 最初の階乗計算のプログラム例で、いきなり『Java Puzzlers』の「パズル3」と同じレベルのコードが掲載され、その挙動の理由が説明されているのにはちょっとびっくりしました。
著者の平田さんが、この本の出版の経緯をブログにも書いておられるので、そちらも読まれると良いかと思います。
出版社からの紹介と正誤表は、こちらのページにあります。
スポンサーリンク
書籍『リーダブルコード』 [献本]
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
この本が出版された時に、出版社から献本されたのですが、最近やっと読みました。
お薦めです!★★★★★
読みやすい理解しやすいコードを書くことの重要性は、拙著『プログラマー”まだまだ”現役続行』でも述べていますが、この本は上手くまとまっています。
『プログラミング作法』の第1章「スタイル」をさらに分かりやすく解説した感じの内容です。それに加えて、『実装パターン』と『Clean Code アジャイルソフトウェア達人の技』でも重要だと述べられている事柄のいくつかが、本書では上手く分かりやすく説明されています。
付録『あわせて読みたい』では、定番とも言える書籍が列挙されています。特に「高品質のコードを書くための書籍」として挙げられている書籍は、『リーダブルコード』を読み終えたら、必ず読んでもらいたい本ばかりです。
本書に書かれている内容を、無意識に実践できるようになるまで、意識して実践することで、みなさんが書くコードは読みやすくなると思います。
書籍『Jenkins実践入門』 [献本]
Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤 聖規 監修・著
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
CIツールであるJenkinsの解説書です。目的に応じて、様々な設定について説明されています。継続的インテグレーションやJenkinsに興味がある人にとっては、導入する際に手元に置いておいて参考にすることができます。すでに、Jenkinsを使用している人であれば、自分が知らない新たな発見があると思います。
継続的インテグレーションは、どのような開発プロセスを使用していても必須だと言っても過言ではありません。ウォータフォール開発しているとかアジャイル開発ではないから関係ないというものではありません。
この本のカバーには次のように書かれています。
どのようなソフトウェア開発でも起きる問題なのです。「手作業でミスが多発」
「別の環境だとビルドできない」
「結合テストで修正地獄に]
「リリース直前なのに動作しない」
↓
自動化でストレスはゼロに
品質は最高に
私自身が初めてビルド作業を完全自動化して夜間ビルドを導入したのは,
Fuji Xerox DocuStation IM 200の開発の時でした。1993年から開発に着手して1996年初めに商品化されました。私自身も7、8万行程度の製品コードを書く一方で、夜間ビルドやNFSを活用した分散コンパイルなど様々改善を行いました。自動化するきっかけは、二週間に1回の定期リリース日にビルドがほぼ100%失敗することでした。それで頭にきて、毎晩自動でビルドするようにしたのです。それからはリリース日にビルドが失敗していることはなかったのですが、まだ手作業でテストする時代でしたので、リリース用テストで障害がたくさん見つかるということを繰り返していました。
1990年代は夜間ビルドの時代であり、2000年代からは継続的インテグレションの時代で、さらに発展して継続的デリバリーの時代に突入しようとしています。残念ながら、多くのソフトウェア開発現場では、今も手作業でビルドが行われ、この本のカバーに書かれているような問題が多発しているのではないでしょうか。
初期のCIツールであるCruiseControlを2007年頃に使用した時と比べると、Jenkinsは非常に進歩しています。開発者自身が、手作業というの労働集約型開発から解放されて、知識集約的活動に集中するためには、CIツールは必須です。その意味で、このような書籍が執筆されたことは、今後、日本のソフトウェア業界の生産性向上に貢献してくれることを期待しています。
私自身も、昨年10月にそれまで手作業で行われたいた自部門のビルド環境を、Hudson/Jenkinsを使用して完全に自動化に着手して、若手のエンジニアと二人で3ヶ月で、ほとんどの手作業を自動化しました。それまでは、上手く行っても3時間かかる手順を、ビルド担当者が手作業で行っていたのですが、今は、同じことが15分程度で自動で行われます。自動化作業に着手した時に、本書があれば、もっとスムーズに作業が進んでいたかもしれません。
手作業の問題点は、手順書にすべてが書かれておらず、ビルド担当者しか知らない前提条件や手順が多くあったりすることです。そのため、手作業を自動化するというのは、その部分を明らかにして各種スクリプトへ落とし込んでいく必要があります。
本書では述べられていませんが、自動ビルド環境を整えても終わりではありません。エンジニアに躾をしなければならないのです。プライベートビルドをしてからコミットするとか、ビルド結果をきちんと確認して、素早く対応させるとかです。その意味で、合わせて『継続的インテグレーション入門』も読まれると良いと思います。
継続的インテグレーション入門 開発プロセスを自動化する47の作法
- 作者: ポール・M・デュバル
- 出版社/メーカー: 日経BP社
- 発売日: 2009/08/06
- メディア: 単行本(ソフトカバー)
高価なソフトウェアを購入しなくても、Jenkinsのようなツールがオープンソースで利用できる時代です。まだ、手作業でビルドを行っているのであれば、『Jenkins実践入門』を参考にJenkinsの導入を試してみてください。そして、「作業はコンピュータに、人間は創造的活動を」目指してください。
書籍『Being Geek』 [献本]
Being Geek ―ギークであり続けるためのキャリア戦略
- 作者: Michael Lopp
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/06/25
- メディア: 単行本(ソフトカバー)
出版社から献本していただきました。対象とする読者は、ソフトウェア開発の経験を数年経てこれからリーダになる人からでしょうか。全体として、転職も含めたキャリアの話とマネージャとしてのマネジメント関連の話です。
キャリアに関して、「成長」ということで次のように述べられています。
成長はかなり正確な指標になり得るのだ。私の経験からもそう言える。成長していれば、その背景にはおそらく何らかの戦略が存在していると考えられるからだ。たとえば、人が成長しようとすれば、そのために新たなことを学ぶ必要がある。しかも、ただ漫然と学ぶのではなく戦略的な学びが必要なのだ。そうして成長することができれば、より大きな結果が出せるようになり、会社に利益をもたらすこともできるだろう。昇進もし、より大きな責任を担うようにもなるだろう。この場合も、「成長しないのは、死んでいると同じ」と言い切ってしまってもさほど間違ってはいないと思う。少なくとも、そう言ってしまった方が分かりやすいだろう。そして、「成長しないのは、死んでいると同じ」という言葉はマネージャにも当てはまるとも述べています。そして、キャリアに関しては、当たり前ですが、次のように述べています。
おそらく健全なのは、「私の仕事に対して責任を負うのはマネージャだが、私のキャリアに対して責任を負うのは私自身である」と考えることだろう。転職に際しての電話インタビューから始まる採用面接の話も書かれているのですが、日本ではあまり当てはまらない内容かと思います。そもそも電話で30分ほどインタビューして、最初に適性を見るということは、日本ではほとんど行われません。そして、その後に、一緒に仕事をすることになるかもしれない人達からインタビューを受けるということはないです。ただ、一度でもそのような採用プロセスを経験したことがあれば、そういうことだったのかと考えながら読める内容です。
エンジニアがマネージャになった時に注意を払うべきことも多く述べられているのですが、その中で「スケーリング」として次のように述べられています。
マネージャにとって大切なことはいくつもあるが、その1つは「スケーリング」である。マネージャになったら、元々自分の持っているスキルをスケーリングしなくてはならない。エンジニアだった時にバグ修正に超人的な能力を発揮していたのだとしたら、マネージャとしては、チームが全体としてその超人的な能力を発揮できるようにしなくてはならないのだ。このスケーリングを実施している、あるいは、意識している元エンジニアであるマネージャは少ないのではないでしょうか。
自分の学んできたことを、部下にわかるように翻訳して教えていく必要がある。そして、学ばせるには、信頼して任せるということが必要だ。以前なら、自分でしていたこと任せてしまうのである。
信頼することで、良いフィードバックループが生まれ、徐々に生産性は上がり、満足のいく仕事ができるようになっていく。部下を信頼することでスケーリングができ、自分と同じクオリティの仕事を、自分一人の時よりはるかに多くこなせるようになる。多くの仕事をこなすほど、多くの経験ができ、多くを学ぶことになる。そうしてたくさんのことを学び、理解すれば、それだけ、教える材料も増え、ざらにスケーリングを進められるだろう。
本書は、ソフトウェアエンジニアとしてキャリアを考える上で参考になる事柄が多く述べられています。ただし、技術的なことはあまり書かれていません。どちらかと言うとマネジメント関連が多いかと思います。
書籍『裸のプレゼンター』 [献本]
出版社から献本していただきました。まだ、全部読み終えた訳ではありませんが、今後のプレゼンテーションに役立ちそうなことや、今までの自分のプレゼンテーションを反省すべきことなど、様々なことが書かれています。プレゼンテーションを行う機会が多い人は、一読されてはいかがでしょうか。
副題として次のように書かれています。
「自然さ」とインパクトのあるプレゼンのための心得著者の他の出版物として以下のものがあります。
Presentation Zen Sketchbook (Voices That Matter)
- 作者: Garr Reynolds
- 出版社/メーカー: New Riders Press
- 発売日: 2010/09/23
- メディア: リング製本
Presentation Zen: The Video (DVD) (Voices That Matter)
- 作者: Garr Reynolds
- 出版社/メーカー: New Riders Press
- 発売日: 2009/06/21
- メディア: DVD
書籍『Java : The Good Parts』 [献本]
出版社より献本していただきました。まだ、全部は読んではいませんが、Javaの発展の中心にいた人が書いた本というのは、新たに学ぶことがあるのではないか、あるいは、重要な事柄を再認識できるのではないかと期待して読み始めています。
まだ読み始めたばかりですが、第2章「型システム」では、インタフェースに関して次のように述べられています。
インタフェースを使う最大の理由を知るには、インタフェースがシステムの全体設計をどのように明確にするのかを知らなければならない。適切に設計すれば、ひとつのインタフェースはひとつの意味的な単位を定義するものになる。すなわちインタフェースとは、相互に意味を与え合うオペレーションのまとまりを定義するものだ。インタフェースはそれ自体、Javaプログラムや、それらプログラムを使ったシステムにおける、意味の基本単位と考えるべきである。このインタフェースと意味との関係は、一般的にはあまり理解されていないところだ。これは、非常に本質的な説明となっていますが、初心者にはおそらく何を言っているのか分からないと思います。1996年にJavaを独学し始めた頃の私もインタフェースを当時は全く理解できていませんでした。『Java: The Good Parts』(11頁)
同時に、十分な知識も経験もないエンジニアに重要なAPI設計をさせているソフトウェア開発組織は、最初から技術的負債を作り込んでいるし、きっとこのような書籍を読んだりもしないんだろうなと思ったりもしました。