書籍『ディズニーランドという聖地』 [本]
アナハイムのディズニーランドは、米国駐在していた頃(1988年11月~1993年5月)に何度も行ったのですが、当時読んだ『ディズニーランドという聖地』が今でも増刷されているようです。日本のディズニーランドには当てはまらないのですが、アナハイムのディズニーランドしか行ったことがなかった当時は、この本を読んだ後は、ディズニーランドの見方が変わりました。
初めて行ったのは、米国に赴任直後の1988年12月25日です。その後、米国駐在中は結婚記念日には、毎年行っていましたし、会社が貸し切ったパーティにも2回行きました。アナハイムのディスニーランドを夕方から貸し切った”Xerox Private Party"※です。駐在中に転勤でシリコンバレーに住んでいた頃に、サンフランシスコから飛行機で日帰りで行ったこともあります。日本のディズニーランドは、まだ2回しか行ったことがありません。
※ 夕方6時か5時に一旦閉園して一般客を退園させて、1時間後に再び開園して貸し切るというものです。
3周年:Go言語勉強会 [golang]
Goバージョン1.0(2012年3月28日リリース)よりかなり前の2010年8月28日(土)に第1回の勉強会を開催してから、先週の8月17日(土)の勉強会でちょうど3年となりました。原則、月に1回土曜日の午後に開催してきました。参加者は社内の若手エンジニアです。当初は、本を書こうという目標だったのですが、代わりに、私が翻訳した『プログラミング言語Goフレーズブック』を勉強会メンバーでレビューしてもらい、ピアソン桐原から出版してもらことができました。
この本は、出版社に翻訳権だけ押さえてもらって、出版することは未定のまま翻訳を始めました。翻訳がほぼ終わった時点(2012年3月)では、出版される計画はありませんでした。しかし、7月初めに急遽出版することが決まり、2012年8月に最終版に仕上げて納品して出版してもらいました。残念ながら、現在は、絶版です。
バージョン1.0になるまではGoの環境は安定しておらず絶えず変更されていました。したがって、月1回の勉強では、毎回、前の勉強会で書いたコードをコンパイルできるように書き直すということを行っていました。また、今のようにgoコマンドはなく、6gや6lといったコマンド使用してコンパイルとリンクを行っていました。
Go言語勉強会は、今後も継続する予定です。
この本は、出版社に翻訳権だけ押さえてもらって、出版することは未定のまま翻訳を始めました。翻訳がほぼ終わった時点(2012年3月)では、出版される計画はありませんでした。しかし、7月初めに急遽出版することが決まり、2012年8月に最終版に仕上げて納品して出版してもらいました。残念ながら、現在は、絶版です。
バージョン1.0になるまではGoの環境は安定しておらず絶えず変更されていました。したがって、月1回の勉強では、毎回、前の勉強会で書いたコードをコンパイルできるように書き直すということを行っていました。また、今のようにgoコマンドはなく、6gや6lといったコマンド使用してコンパイルとリンクを行っていました。
Go言語勉強会は、今後も継続する予定です。
レベル1 初心者 [ソフトウェア・スキル・インデックス]
「ソフトウェア・スキル・インデックス」では、7つのレベルを定義しています。その中で、レベル1である初心者は、次のように定義しています。
ソフトウェア開発を行うには、プログラミングの基礎知識や、コンピュータに関する基礎知識が不足している拙著『プログラマー”まだまだ”現役続行』では、次のように解説しています。
レベル1:初心者この解説を読み返してみると、初心者には次のことを最初の一年で教え込まないと、次のレベル2にはなれません。
今日、ソフトウェア業界に就職する若手のほとんどが、このレベルだと思います。コンピュータの動作原理の理解や基礎知識がなく、プログラミングの基礎知識や経験がなかったりします。
このレベルでは、しっかりと基礎知識を身につける必要があります。単に、与えられた簡単な仕事をこなせるだけの知識を修得するだけでも、初級職人や中級職人まではなれるかもしれませんが、それ以上を目指すとなると、コンピュータの基礎もマスターしておく必要があります。
それと、もう一つ忘れてはならないのは、プログラムは動作すればよいというものではなく、人が理解できる読みやすいコードを書く必要があることです。その重要性をしっかり学習しておく必要があります。
初心者レベルでは、業務で使用するプログラミング言語をきちんと学習するだけでなく、コンピュータのハードウェアの基礎知識、およびデータ構造とアルゴリズムをきちんと学習しておく必要があります。
しかし、多くの職場では、プログラミング言語は、使用する機能だけという表面的な学習だけで、きちんと言語を学習しないことが多いのではないかと思います。それに加えて、データ構造とアルゴリズムの基礎を学習しないまま、ソフトウェア開発を行っている人が多いと思います。その結果、ソフトウェア開発の経験年数がかなりあっても、たとえばハッシュテーブルやO表記といわれてもまったく理解していなかったりします。
そして、初級職人の域を出ないレベルのまま年数を経ているため、組織上は開発グループのリーダーをやったりしていますが、中級職人や上級職人になることなく、中途半端な状態で年を重ねていたりします。
初心者に対して、プログラミング言語、ハードウェアの知識、データ構造とアルゴリズムを教えるには、「本を読んで勉強しなさい」といっても無理があり、かなり強制的に学習させる必要があります。
一方で、初心者は書かれたプログラムを動作させるだけで精一杯かもしれませんが、それでも、業務で開発させるソフトウェアは読みやすくなければなりません。したがって、プログラムが読みやすく書かれているかどうかは、常にチェックして、指導していく必要があります。そのために、しっかりとした中級職人以上のソフトウェアエンジニアが、直接教育や指導を行う必要があります。
初心者自身は、自分を指導する人が、きちんと指導してくれるレベルの人なのかどうかを判断することはできません。初心者の教育やOJTには、継続した学習を行っていて、読みやすいコードを書くことに常に注意を払っている先輩を担当させる必要があります。逆に、経験年数は長いけれど、普段まったく学習もせずに、きたないコードを書いているような人に、初心者の教育やOJTを担当させないようにしなければなりません。
間違ってこのような人をトレーナーとしてしまうと、初心者はいい加減な知識のまま、本人は仕事をこなせるようになったと錯覚するだけで、たかだか中級職人の域で止まってしまう可能性があります。
初心者レベルは、まったくのプログラミングの初心者ならば、就職してから半年から一年ぐらいだと思います。
『プログラマー”まだまだ”現役続行』(p.38)
- 1つのプログラミング言語をきちんと学ばせる
- コンピュータの基礎(ハードウェア、OSの仕組み、データ構造とアルゴリズム)を学ばせる
- 読みやすいコードを書くことを徹底させる
- 1つのプログラミング言語をきちんと学ぶとは、たとえば、Java言語であれば『プログラミング言語Java第4版』と『Effective Java 第2版』を学習させることです(「プログラミン言語Java教育」)。
- ハードウェアに関しては、いろいろな書籍があるとは思いますが、最低限、『Introduction to Computing Systems: From Bits and Gates to C and Beyond』に書かれているような内容です。OSに関して言えば、たとえば、Linuxであれば、『Linux Kernel Development』の内容程度です。データ構造とアルゴリズムに関して言えば、『プログラミング作法』の第2章の内容程度です。
- 読みやすいコードを書くことに関しては、徹底してレビューして指導していく必要があります。
ピアソンとの13年間 (2) [ピアソン]
この本では、10冊の書籍を紹介しています。その中で、今回の以下の書籍が残念ながら絶版となってしまいました。
もう古典と言える名著です。1996年に日本語に翻訳されて出版されており、2010年に組版とカバーを変えた新装版が出版されています。
出版直後に英語の原著を読み、何らかの間違い(誤字脱字?)を指摘したので、英語版の2nd printing以降には謝辞に私の名前が掲載されています。そのため、私は1st printingともう1冊を持っています。

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)
- 作者: マーチン ファウラー
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/05
- メディア: 単行本
Eclipseが登場する前に英語の原著を読み、コードを改善する方法を学んだ書籍です。現在のIDEは、この本に書かれているリファクタリングをサポートしているので、読んだ当時と比較するとリファクタリングを行うことは、今日は非常に容易になっています。その分、個々のソフトウェアエンジニアのスキル(良い名前付けや良い構造を考えられるスキル)が問題となってきます。

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)
- 作者: ピート マクブリーン
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/03
- メディア: 単行本
私にとって、現役を続けるという意味で転機となった書籍です。
上記4冊は、すべて10年以上前に日本語版が出版されています。私自身は、30代の終わりから40代初めに読んだことになります。すべて英語の原著で読んでいましたが、書評を書くために日本語版を購入して再度読み直しています。
「ソフトウェアエンジニアの心得」教育や講演では、推奨していた本の中に『達人プログラマー』や『ソフトウェア職人気質』がありました。今後は、推奨してもすぐに購入できないというのは非常に残念です。
ピアソンとの13年間 [ピアソン]
2000年から技術書の翻訳を行うようになって、当初はピアソン・エデュケーション、そして、ピアソン桐原となりましたが、ピアソンからは13年半で11冊を翻訳させてもらいました。また、1冊ですが、自著も出版させてもらいました。
11冊の中で増刷を繰り返した書籍は残念ながら少なく、以下の4冊だけでした。
『Effective Java第2版』を除いて残り10冊は、書店の店頭在庫のみの販売となり、桐原書店から出荷されることはありません。『Effective Java第2版』は、今年4月に増刷しているので桐原書店の在庫はまだ多少はあると思いますが、それらがすべて出荷されて店頭在庫のみの扱いになるのは時間の問題です。
11冊中どの本が再刊されるかは、他の出版社次第です。本によっては、新たに翻訳契約を結んだ出版社が再刊すると思います(少なくとも、『Effective Java第2版』はどこかが契約するのではないかと期待しています)。
私自身は、翻訳を通して、多くの技術を学んできました。翻訳作業は、何ヶ月も続くマラソン作業ですが、ソフトウェアエンジニアとしては多くのことを学んできました。
『Javaリアルタイム仕様』、『プログラミング言語Java』(第3版/第4版)、『Effective Java』(初版/第2版)、『Java Puzzlers』を通して、Java言語を深く理解することができました。
『Google Web Tookitソリューション』では、GWTを学び、私のホームページはGWTを使用しています。普段は、あまり使用しないAndroid開発やObjective-Cに関しても『Android SDK開発クックブック』や『Objective-C明解プログラミング』の翻訳を通して学ぶことができました。
自分から翻訳をさせて欲しいと依頼した本としては、『プログラミング言語Goフレーズブック』があります。こちらは、Go言語が日本で広く普及する前に廃刊になるのは残念です。
ピアソンの藤村さんから依頼されて翻訳した本としては、『プログラミング原論』があり、それほどは売れていませんが、この本も廃刊になるのは残念です。
『Java PRESS, Vol.11』(技術評論社、2000年3月発行)に書いた記事(「The Java Programming Language, Second Edition」について )がきっかけで始まった翻訳作業ですが、当初はこんなに長く続けるとは思っていませんでした。
翻訳のきっかけを与えていただいた藤村行俊さん(旧ピアソン桐原)には、LaTeXに関してもサポートしていただき、私が出版した本を担当していただき深く感謝しています。
11冊の中で増刷を繰り返した書籍は残念ながら少なく、以下の4冊だけでした。
- プログラミング言語Java第3版
- プログラミング言語Java第4版
- Effective Javaプログラミング言語ガイド
- Effective Java第2版
『Effective Java第2版』を除いて残り10冊は、書店の店頭在庫のみの販売となり、桐原書店から出荷されることはありません。『Effective Java第2版』は、今年4月に増刷しているので桐原書店の在庫はまだ多少はあると思いますが、それらがすべて出荷されて店頭在庫のみの扱いになるのは時間の問題です。
11冊中どの本が再刊されるかは、他の出版社次第です。本によっては、新たに翻訳契約を結んだ出版社が再刊すると思います(少なくとも、『Effective Java第2版』はどこかが契約するのではないかと期待しています)。
私自身は、翻訳を通して、多くの技術を学んできました。翻訳作業は、何ヶ月も続くマラソン作業ですが、ソフトウェアエンジニアとしては多くのことを学んできました。
『Javaリアルタイム仕様』、『プログラミング言語Java』(第3版/第4版)、『Effective Java』(初版/第2版)、『Java Puzzlers』を通して、Java言語を深く理解することができました。
『Google Web Tookitソリューション』では、GWTを学び、私のホームページはGWTを使用しています。普段は、あまり使用しないAndroid開発やObjective-Cに関しても『Android SDK開発クックブック』や『Objective-C明解プログラミング』の翻訳を通して学ぶことができました。
自分から翻訳をさせて欲しいと依頼した本としては、『プログラミング言語Goフレーズブック』があります。こちらは、Go言語が日本で広く普及する前に廃刊になるのは残念です。
ピアソンの藤村さんから依頼されて翻訳した本としては、『プログラミング原論』があり、それほどは売れていませんが、この本も廃刊になるのは残念です。
『Java PRESS, Vol.11』(技術評論社、2000年3月発行)に書いた記事(「The Java Programming Language, Second Edition」について )がきっかけで始まった翻訳作業ですが、当初はこんなに長く続けるとは思っていませんでした。
翻訳のきっかけを与えていただいた藤村行俊さん(旧ピアソン桐原)には、LaTeXに関してもサポートしていただき、私が出版した本を担当していただき深く感謝しています。
第1回Java研修OB・OG懇親会を開催しました [研修OB・OG懇親会]
2000年から続けているJava研修の修了生による第1回Java研修OB・OG懇親会を8月3日(土)に新百合ヶ丘で開催しました。今回は、主にFacebookのプライベートなグループである「Java研修OB・OG会」を通して参加者を募りました。
当日の参加者は、私も入れて19名でした。残念ながら第1回は、参加者が男性だけだったため、OB懇親会になってしまいました。参加者の中には、普段会うことが多い人もいたのですが、第1期から第10期までの人は、今回、久しぶりに会って話をすることができる人もいて、楽しく過ごすことができました。修了生といっても、現在の所属会社は7社と分かれており、今までの修了生で転職している人もいますので、次回は会社数が10社を越えるかもしれません。

次回は、2014年4月5日(土)を予定しています。
当日の参加者は、私も入れて19名でした。残念ながら第1回は、参加者が男性だけだったため、OB懇親会になってしまいました。参加者の中には、普段会うことが多い人もいたのですが、第1期から第10期までの人は、今回、久しぶりに会って話をすることができる人もいて、楽しく過ごすことができました。修了生といっても、現在の所属会社は7社と分かれており、今までの修了生で転職している人もいますので、次回は会社数が10社を越えるかもしれません。

次回は、2014年4月5日(土)を予定しています。
書籍『Javaで学ぶコンピュータ数学』 [献本]
山口県で工業高校の教諭をされている著者の平田さんから頂きました。高校生から大学生を対象とし、数学の解説とJavaでのプログラム例や課題が含まれていますので、実際にプログラミングをしながら学習していくのが良いかと思います。
目次は、以下の通りです。
第1章 記号化の数学第8章の計算量の話は、ソフトウェア開発に従事している社会人であっても知らない人が多いです。したがって、数学を復習を兼ねて勉強するには高度過ぎず適切な内容の本だと思います。
第2章 論理の数学
第3章 集合の数学
第4章 行列の数学
第5章 確率の数学
第6章 統計の数学
第7章 微分・積分の数学
第8章 計算量の数学
注意することとしては、基本的な事柄は説明はされていますが、Java言語の入門書ではないので手元に自分のレベルにあったJavaの本があると良いかと思います※。また、紙面の関係からコード例が詰めてあります。実際に、自分でプログラミングするときは、テキストのコードを参考にしながらも読みやすくレイアウトすると良いかと思います(この点は、本の冒頭に書かれています)。
※ 最初の階乗計算のプログラム例で、いきなり『Java Puzzlers』の「パズル3」と同じレベルのコードが掲載され、その挙動の理由が説明されているのにはちょっとびっくりしました。
著者の平田さんが、この本の出版の経緯をブログにも書いておられるので、そちらも読まれると良いかと思います。
出版社からの紹介と正誤表は、こちらのページにあります。
スポンサーリンク
考えないエンジニア [プログラマー現役続行]
この本は改訂版であり、初版は2006年9月に出版した『プログラマ-現役続行』です。しかし、初版は書き下ろしではなく、雑誌の記事を再編集したものです。その最初の記事は、「XML PRESS, Vol.2」(2000年12月)に掲載された記事「論理思考と正しい知識」です。つまり、この書籍の多くは、私が40代前半までに経験したことがベースとなっています。そして、残念ながら、この書籍で述べている昔見た光景は、今でも見かけます。その主な理由は、ソフトウェア開発は複雑な作業である上に、家内手工業だからだと思います。つまり、常に頭の中で考えたことを手を動かしてプログラミングして作り上げる作業なのです。
考えないエンジニアエラーメッセージをきちんと読まないとか、起きている現象(不具合)をきちんと理解しないまま、「動かなかった」としか報告できず、「それは、具体的にどういうこと?」と聞いても「動かなかった」としか説明できないようではソフトウェアエンジニアとしては失格です。実際に動作させてみると、セグメンテーションフォルトが起きていて、その旨のメッセージが表示されていたりします。
今日では、コンピュータ技術の急速な発展のおかげで、コーディングをしてからあっという間にコンパイルができ、すぐに実行可能です。プログラミング初心者の特徴として、コンパイルエラーのエラーメッセージや、実行時エラーが発生した場合のスタックトレースの表示をきちんと読まないということがあります。
その結果、書いたコードにエラーがあると、「なぜエラーになったのか」を考えることなく、ちょっとだけソースコードを修正して、すぐにまたコンパイルと実行を行ったりする人が少なくありません。さらに、動作させてうまくいかないと、その理由をじっくりと考えることなく、またちょっとソースコードを修正して、同じサイクルを繰り返したりします。
つまり、ソースコードやエラーメッセージをじっくりと読んで考えることなく、試行錯誤を繰り返すのです。
このようなことを繰り返していると、自分が書いたプログラムであっても、コードを実行せずにコードの動きを頭の中でシミュレーションしながら、正しいかどうかを冷静に判断することができなくなります。そして、どのように動作するかを実行することだけで確かめようとするのです。
このように、コンピュータ技術の急速な発展は、皮肉にも、論理的に思考あるいは推論をしないでソフトウェアを開発するエンジニアを増大させる一因となっているような気がします。
『プログラマー”まだまだ"現役続行』(p.57)
バグは自然と消えたりはしない論理的にデバッグするのではなく、単なる試行錯誤を繰り返すと、本人は「デバッグも終わり、動作も確認しました」と報告されても、その中身をよく見ると、どう考えて正しく動作しているはずがないようなコードになっている場合もあったりします。
ソフトウェアエンジニアにとって、論理的に思考することは重要です。
スティーブ・マグワイアは、著書『ライティング ソリッドコード』の中で、「バグは自然と消えたりはしない」と述べています。つまり、バグ自身が勝手に修正したりすることはないのです。
しかし、エンジニアによっては、「あのバグどうなった?」とたずねると、「新しいバージョンでは出なくなりました」と答えるだけで、「なぜ前のバージョンでは出て、新しいバージョンで出なくなったのか」を説明できなくても気にしない人がいます。
また、いろいろと試行錯誤した結果動作するようになった場合、「なぜ動作するようになったかわからないが、動作するのでよし」とする人もいます。つまり、論理的に説明できなくても気にしない人がいるわけです。
もちろんその反対に、「論理的に説明できないと、心のどこかに何か引っかかるものがあって落ち着かない」という人もいます。そういう人のほうが、結果的に優れたエンジニアになっていくと思います。
そうはいっても、現実の開発ではスケジュールの関係で、「バグがなぜ消えたのか」を十分調査する時間がなく、そのまま出荷せざるを得ない場合もあるでしょう。
しかし、その場合でも「もう出荷したから忘れてもいいや」と思うのではなく、「時間ができたときに調べよう」と思うことが重要です。そうすれば、ひょっとしたらかなり後になって、原因に思い当たったりするかもしれません。
『プログラマー”まだまだ"現役続行』(p.58)