So-net無料ブログ作成

技術書の理解レベル(2) [プログラマー現役続行]

3月28日(土)にJava読書会に参加した際に、技術書の理解レベルに関して、1つの良い例があったので簡単に紹介します。(なお、みなさんの手元に『Effective Java 第2版』があるという前提で書いています)

『Effective Java 第2版』の項目74「Serializableを注意して実装する」では、「継承のために設計されたシリアライズ不可能なクラスに対して、パラメータなしコンストラクタを提供することを検討すべきです」(281頁)と述べられています。しかし、「クライアントが提供する情報が不変式を確立するために必要ならば、パラメータなしコンストラクタを使用することが除外されます」(282頁、2行目)とも述べられています。そこで、パラメータありコンストラクタしかなく、シリアライズ不可能で拡張可能なクラスに関して、そのサブクラスをシリアライズ可能にするための方法が282頁と283頁に説明されています。

この部分の説明を読んで理解するには、シリアライズの仕組みを理解している必要があります。シリアライズに関する知識がなければ、例として示されているコード(AbstractFooFoo)を理解することはできません。コードの意味を理解するためには、最低限の知識として、『プログラミング言語Java 第4版』の20.8.3節「シリアライズとディシリアライズの順序」(485頁)に書かれている内容を知識として持っている必要があります。Java読書会では、その節の内容を口頭で説明することでコード例をみなさんに理解していもらいました。

『Effective Java 第2版』の「訳者まえがき」(vii頁)で、私自身は、読者に対して次のように述べています。
本書は、初心者向けではありません。『プログラミング言語Java 第4版』に書かれている内容程度は、理解している必要があります。

『Effective Java 第2版』が良い本だからと薦められて、初心者がいきなり読んで理解できなくて、途中で挫折するのは当然だと思います。

そのために、多くのソフトウェアエンジニアにきちんとJava言語を理解してもらうたことを目的として、社内(関連グループ会社向け)では『プログラミング言語Java 第4版』から始めて、『Effective Java 第2版』まで終わるという教育コースを開催しています。

http://yshibata.blog.so-net.ne.jp/2008-10-03

鹿児島で講演(5月9日) [プログラマー現役続行]

5月9日(土)に、鹿児島で講演します。詳細が決まり次第、掲示します。

技術書の理解レベル(1) [プログラマー現役続行]

技術書を読む場合には、いくつかの理解レベルがあると思います。

(1) 内容を理解するための基礎知識がないため、全く理解できない。
(2) 十分な知識がないため、理解できない部分が多い。
(3) 理解できない部分が多少ある。
(4) 何の問題もなく理解できる。

たとえば、プログラミングの経験が全くない人が『Effective Java 第2版』を読んでも全く理解できずに、(1)の段階になるかと思います。また、初心者本でJavaを勉強した程度なら、(2)の段階であったりするでしょう。『プログラミング言語Java第4版』を精読してJavaで開発している人なら、(3)だったり(4)だったりするでしょう。

その技術書が翻訳本の場合には、状況は複雑になります。翻訳本を読む場合には「理解できない」理由が、翻訳された日本語のためなのか、自分の知識不足なのかのどちらかによります。実際には、理解できない部分を何度か読み直して理解しようとします。しかし、それでも理解できなかった場合には、理解できない理由の本当の原因が知識不足のためなのか翻訳のためなのかを判断するが難しい場合もあるかと思います。

技術書の翻訳は、非常に気力を必要とする作業であり、そのことについては、一年前のブログに「技術書の翻訳」として記事を書いています。

http://yshibata.blog.so-net.ne.jp/2008-03-09

このブログの中の引用で、高嶋優子さんは、「ほかの人にもこの本を読んでもらいたいという想いを持ちながら訳しているのだという点を、読者の方々には理解してもらいたいと感じています。」と述べられています。私自身も同じ想いですが、多くの日本人の技術者に読んでもらうために、翻訳をすることは「趣味」ではなく「義務」だと思っています。

翻訳書を読んで理解できない部分があった場合には、理解できない理由が何であるかを、自分できちんと判断しようするのが重要だと思います。何度か読み直して理解した後に、「やはり訳が良くない」と判断するのは構わないと思います。しかし、理解できないまま「訳が悪いからだ」と判断するのは、できるだけ避けたいものです。その場合は、「その部分がやはり理解できなかった」という状態で良いと思います。「理解できない、だから、訳が悪い」と安易に結論付ける思考パターンを持ってしまうと、技術者としては伸びていかないと思います。

書籍『ブラック企業とシュガー社員』 [本]

以前、「シュガー社員」という言葉を作り出した田北 百樹子さんの著書について紹介しました。

http://yshibata.blog.so-net.ne.jp/2008-10-23-1
http://yshibata.blog.so-net.ne.jp/2007-10-31

田北さんの新著『ブラック企業とシュガー社員』が間もなく出版されるようです。

ブラック企業とシュガー社員

ブラック企業とシュガー社員

  • 作者: 田北 百樹子
  • 出版社/メーカー: ブックマン社
  • 発売日: 2009/03/26
  • メディア: 単行本(ソフトカバー)


簡単な説明が田北さんの事務所のホームページに掲載されています。

http://www.sr-takita.com/news/index.html

会社説明会(九州工業大学にて) [その他]

3月13日(金)に、九州工業大学 工学部(戸畑キャンパス)で、富士ゼロックス情報システム(株)の会社説明会を開催します。

場所: 教育研究5号棟(旧電機工学科・電気電子棟)3階のリフレッシュルーム
日時: 3月13日(金) 13:00~15:00

(このブログを読まれている学生の人は、少ないと思いますが)当日は、会社の説明だけでなく、技術的なことやJavaに関する質問なども歓迎ですので、気楽に参加していただければと思います。

継続した成長 [プログラマー現役続行]

最近、私が昔書いたMessagingToolのソースコードを見直しています。

MessagingToolとは、1987年頃から当時のXerox社のワークステーション上で動作するハックとして開発され、Xerox社では広く使われていました。最初のバージョンはMesaで書かれていましたが、1991年に私がSunOS上でも動作するようにC言語で書き直しXeroxグループ内で配布していました。1996年にJavaを学習するために、Javaで書き直し、2000年ぐらいまではちょくちょく手直ししていました。

昔の自分のコードを読むと、Javaの学習を兼ねていたとは言え、十分な理解がないまま書いていた部分が目についてしまいます。たとえば、static宣言すべきネストしたクラスをstatic宣言していなかったり、変数宣言の型がインタフェースではなく、具象クラス型になっていたりしています。

2000年以降は、『プログラミング言語Java』(第3版/第4版)、『Effective Java』(初版/第2版)の翻訳をしながらの学習や私自身でのJava教育コースの実施、さらに他の様々な書籍で学習したことを実際の業務に適用することで、自分が書いた古いコードを見て問題点に多く気づけるようになっているのだと思います。

みなさんが、自分自身が書いた古いコードを見て、多くの改善点を認識できることは、ソフトウェアエンジニアとして成長している証かもしれません。

ブラインドタッチ [プログラマー現役続行]

以前、「ブラインドタッチ力」というテーマで書きました。

http://yshibata.blog.so-net.ne.jp/2007-10-01

ソフトウェア開発を続けていく上で、プラインドタッチは必須と言っても過言ではありません。プログラミングの際に、集中して処理方式を考えながらコーディングしている際に、キーボードを見ながら左右の手の人差し指だけを使ってキー操作していていは、思考がかなり中断されてしまいます。

若い頃からブラインドタッチでソフトウェアを開発している場合と、そうでない場合には、思考のトレーニングとしては大きな差がついてしまうのではないかと思います。つまり、集中して頭をフル回転させながらプログラミングしているのか、キーボードを操作するために思考を中断しながらプログラミングしているのかの違いは、長い年月の結果、差として表れてくるのではないかと思います。

ただ、その差がどの程度大きいのか、あるいは、小さいのかは、私自身が調査したこともなく、どこかで調査されたのを読んだこともないので、統計的な数字は全く示すことはできません。

ブラインドタッチをしない人はソフトウェア業界では少ないと思いますが、みなさんの周りにはどのくらいおられるのでしょうか?



お勧め書籍 [プログラマー現役続行]

ソフトウェアエンジニアとして活動を続けるには、多くのことを学び続けなければなりません。開発業務を通して学ぶだけでは十分ではなく、書籍を通しての学習も必要です。その中でも、個々の技術の学習だけではなく、ソフトウェア開発に対する取り組み方の学習も必要です。そのような書籍には、著者の経験や見識が凝縮されています。そのような観点から、最近読んだ書籍や読んでいる書籍も含めてのお勧め書籍です。


Agile Testing: A Practical Guide for Testers and Agile Teams (Addison Wesley Signature Series)

Agile Testing: A Practical Guide for Testers and Agile Teams (Addison Wesley Signature Series)

  • 作者: Lisa Crispin
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2008/12/26
  • メディア: ペーパーバック

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)

  • 作者: Robert C. Martin
  • 出版社/メーカー: Prentice Hall
  • 発売日: 2008/08
  • メディア: ペーパーバック

実装パターン

実装パターン

  • 作者: ケント・ベック
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/12/22
  • メディア: 単行本(ソフトカバー)

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

  • 作者: ピート マクブリーン
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/03
  • メディア: 単行本

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリュー ハント
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本