悪い印象の払拭 [プログラマー現役続行]
第11章「若い人たちへ」からの抜粋です。
新卒新人に限らず、私を含めて、与えてしまった悪い印象を払拭するのは非常に難しいです。お互いに、判断基準や行動基準が異なっているのがその要因の1つだと思います。当然、その基準差は目に見えませんし、悪い印象を与えてしまった人は、悪い印象を持った人との間にある基準差を理解することは容易ではありません。学生時代についた癖を直す
人間の思考パターンや行動パターンを変えることは容易ではありません。それは、社会人となって働き始めても、急に変えることはできないようです。
そのため、学生時代に身についてしまった悪い癖は、かなり意識して最初に直す必要があります。特に最近の若い人に多いのは、自分の頭で考えることなく、グーグルで答えを検索してそれを写すことばかりする、という癖です。
採用面接では、このような癖まで見抜くことは困難です。しかし、実際の職場の先輩たちは、最初にある程度指導するだけで、この悪い癖を直感的に見抜いてしまいます。そして、「何でもグーグルで検索して答えを探せばいい、という習慣を長年続けてきた結果、自分の頭では何も考えることができなくなってしまった人」という悪印象を最初から持たれてしまうことになります。
人が受ける第一印象というのは、その人の過去の経験に基づいていたりしますので、意外と当たっていることが多いです。そして、最初に悪い印象を与えてしまうと、それを払拭するには、かなりの努力が必要です。
したがって、最初の一年が勝負といっても過言ではありません。つまり、その一年間に社内教育や仕事にきちんと取り組んで、「最初は駄目な新人だと思ったが、この先、伸びていきそうだ」と判断されるようになる必要があります。『プログラマー”まだまだ”現役続行』(p.230)
ソフトウェアエンジニアとして私自身が重視する基準(行動パターン)は、6年前に出版した初版でも述べています。また、このブログでも色々と述べています。
「勉強しない中堅をどうすれば変えられますか?」というのは、昔から講演などでよく聞かれる質問です。これも、「勉強しない中堅」という印象を与えていることになります。しかし、私からの回答は、「そのような中堅を変えるのは諦めています」というものです。
それでも、今年のJava研修では、40才前の人や私より年上の人が受講して勉強している人もいます。しかし、そのような人々は、私の長い経験からするとかなり例外です。その人達は、研修が終わる頃には知識の点と継続的に学習するという点で成長されるでしょうから、私の印象は良い方向へ変わっていくと思います。
長年、「ソフトウェアエンジニアの心得」教育や講演で話していることですが、2000年の頃に約200人のソフトウェアエンジニアにオブジェクト指向教育を行った時に受講生に聞いた結果、会社の費用でオブジェクト指向教育を以前に受けたことがない人がほとんどだったという話をします。その話をする意図は、技術の学習は会社に依存してはいけないということです。
しかし、長年、会社に完全に依存していると、学ぶ技術は、仕事で使用する技術だけとなったりするかもしれません。その結果、広く普及している技術であっても、本人にとっては未経験の技術を積極的に学習することはないのかもしれません。
【社内連絡】 Go読書会参加者募集 [読書会]
ブログに書いていますが、社内向けの内容です。
私自身の復習も兼ねてGo言語の公式ドキュメント(「Effective Go」、「Language Specification」、「FAQ」など)を読んでいく読書会を開催します。
希望者は社内の私のメールアドレスに、『Go読書会参加希望』と題したメールをください。
開催日: 毎週、木曜日の1回 朝7時40分から8時45分
開始日: 2014年1月23日(木)
場所: 私が勤務している事業所(大森)の私の居室の会議テーブル(今回は、他拠点とは接続しません)
申込み〆切: 2014年1月16日(木)
進め方: 読みながら訳していきます。
この読書会そのものは、非業務扱いです。
私自身の復習も兼ねてGo言語の公式ドキュメント(「Effective Go」、「Language Specification」、「FAQ」など)を読んでいく読書会を開催します。
希望者は社内の私のメールアドレスに、『Go読書会参加希望』と題したメールをください。
開催日: 毎週、木曜日の1回 朝7時40分から8時45分
開始日: 2014年1月23日(木)
場所: 私が勤務している事業所(大森)の私の居室の会議テーブル(今回は、他拠点とは接続しません)
申込み〆切: 2014年1月16日(木)
進め方: 読みながら訳していきます。
この読書会そのものは、非業務扱いです。
【社内連絡】『RESTful Web APIs』読書会参加者募集 [読書会]
ブログに書いていますが、社内向けの内容です。
REST APIに関する書籍は、少ないですが、新刊ということで読書会を開催します。希望者は社内の私のメールアドレスに、『勉強会参加希望』と題したメールをください。
開催日: 毎週、火曜日の1回 朝7時40分から8時45分
開始日: 2014年1月21日(火)
場所: 私が勤務している事業所(大森)の私の居室の会議テーブル(今回は、他拠点とは接続しません)
書籍: 『RESTful Web APIs』(各人購入してください)
申込み〆切: 2014年1月14日(火)
進め方: 基本的に最初から読んで訳しながら学習していきます。
この読書会そのものは、非業務扱いです。
『Effective Java 第2版』 予約注文できます [プログラマー現役続行]

EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
発売は2月下旬なので少し先ですが、Amazon.co.jpで予約注文できます。
第2版は2008年11月発売ですが、初版は2001年11月発売なので、すでに12年が経過したことになります。初版の英語版を読んだ時は、私自身が何も分かっていなかったことを認識するという意味で、その内容に衝撃を受けました。
初版の「日本語版によせて」は、2001年9月11日の事件に間接的に言及していましたが、第2版では全く言及しないように書き直されています。また、初版では、私は「読者」「翻訳者」に過ぎませんでしたが、第2版では「レビューア」としても携わっています。
第21期「プログラミング言語Java」コースを開講 [プログラミング言語Java教育]
今日から、おそらく今のテキストでの最後のコースとなる第21期を開講します。11名の受講生で、今年度の新卒新人が5名です。
第18期がまだ終わっていないので、第18期、第19期、第20期、第21期と同時並行開催となります。第18期は、2014年3月に終了見込みです。第19期は、2014年6月に終了予定です。
今までの研修実績は、こちらです。
第18期がまだ終わっていないので、第18期、第19期、第20期、第21期と同時並行開催となります。第18期は、2014年3月に終了見込みです。第19期は、2014年6月に終了予定です。
今までの研修実績は、こちらです。
『コンピュータの構成と設計』勉強会終了しました [プログラマー現役続行]
2012年1月より開始した、『コンピュータの構成と設計』の読書会が付録Aまで学習して、今日終了しました。次は、何を読もうか思案中です。
『Effective Java 第2版』は、やはり初心者向けではない [プログラミング言語Java教育]

Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
Java研修では、『プログラミング言語Java第4版』と『Effective Java第2版』を学習してもらうのですが、基本的には、事前に予習してもらって質問を提出してもらい、それに答える形式で進めます。しかし、第18期は、受講生の希望により『Effective Java第2版』をきちんと読み進めていく形式で進めています。私自身も久しぶりに読み返していることになります。
読み返してみて、やはり初心者向けではないことを感じます。たとえば、次の段落は、項目12 「Comparableの実装を検討する」のp.63からの抜粋です。
この契約の数学的性質を取り去ってはいけません。equals の契約(項目8)と同様に、compareTo契約は、見かけほど複雑ではありません。1 つのクラス内では、どのような適切な順序関係であっても、compareTo 契約を満足します。equals と異なり、クラスをまたがっては、compareTo は機能する必要はありません。つまり、比較されようとしている2 つのオブジェクトが別々のクラスを参照しているのであれば、ClassCastException をスローすることが許されています。たいていは、ClassCastException をスローすることが、まさにcompareTo が行うべきことです。そして、クラスが適切にパラメータ化されていれば、ClassCastException がスローされます。契約は、クラス間の比較を排除してはいませんが、リリース1.6 では、Java プラットフォームライブラリーのどのクラスも、クラス間の比較をサポートしていません。この「クラスが適切にパラメータ化されていれば、ClassCastException がスローされます。」の1文を読んですぐに理解できる受講生はいません。この1文を理解するのに必要な知識はすでに学んでいるのですが、その知識を応用して、すぐに理解するのは非常に難しいようです。
Comparableインタフェースがジェネリック型であるということ、ジェネリック型に対して「パラメータ化」するのとはどういう意味であるかということ、そして、実際にコンパイラがどのようなブリッジメソッドを生成するのかということを理解して初めてこの1文を理解できます。
教育の中では、この3点を誘導質問しながら、解説するのですが、そうやって解説されて初めて、受講生は理解できるようです。彼らは、『プログラミング言語Java第4版』をまるまる1冊学習済みなのでが、そのような状況です。したがって、いわゆる初心者本でJavaを学習しただけの人には、理解するのは困難だと思います。
追記(2014年1月4日):解説を書きました。
メモリ問題とソフトウェアエンジニア [プログラマー現役続行]
大規模なソフトウェアでかつ基本的に電源がオフされることなく常時動作させるシステムを構築する場合には、様々なメモリに関連するトラブルが発生します。私自身の経験としては、最初にそのようなシステム開発をしたのは、Fuji Xerox DocuStation IM 200です。これには、Fax機能が搭載されていましたので、基本的に24時間365日動作させ続けるシステムです。
C++言語を使用しSolaris 2.3上で動作していたのですが、開発が進んである程度基本的なサービスが動作し始めた時点で最も悩ましかったのは、解放されることなくメモリ使用量が増大するメモリリークです。それ以外にも、メモリ破壊、メモリの多重解放、解放済みメモリへの参照といった多くの問題を抱えていました。
それらの問題を解決するために、様々な調査や検査が可能なメモリ管理を私自身で設計・実装し、newとdeleteのオペレータを再実装したものを用意して使用し始めました。その後、多くの問題が解決されて製品化を行うことができました。先行して発売されたFuji Xerox DocuStation AS 200の開発でも、「自治体窓口証明発行システム」部分を子会社で開発したのですが、そこでも多くのメモリ問題を抱えており、私自身が実装したメモリ管理で置き換えて安定化させたという経緯があります。
その後、2000年にC++言語用に再設計(「C++とメモリ管理」参照)し、使用しているメモリ量の合計やピーク時の最大メモリ割り当て量などを計測する機構を追加しています。以前の設計からも多くを継承しており、未解放領域の一覧出力(どのソースコードのどこで割り当てられたのかの情報も含む)なども含まれていました。
一方で、当時から、「メモリリーク対策会議」と称して、何も仕組みが入っていないのに、とにかくメモリリークを減らせということしかできない会議を時々開催せざるを得ないプロジェクトの話や、プロセス空間が大きくなっているのでリークしているはずだから調査しなさいということで、闇雲にソースコードを調べたりしているプロジェクトの話を聞いたことがあります。
ガーベッジコレクションを持つ言語を使用したからと言って、メモリリーク問題や無駄なメモリ割り当ての問題は解決する訳ではありません。システムを開発しながら、そのような問題にどうやって対処していくか、どのような有効な手段があるかを常に探求していく必要があります。たとえば、NetBeansのテストフレームワーク(NbTestCase)にはメモリ問題に積極的に対処するため機構が用意されています。
ソフトウェアエンジニアとして、自分達が使用している言語およびシステムにおいて、メモリ問題に対して積極的に、かつ、継続的に取り組んでいくことが必要です。「ガーベッジコレクションの言語なのでガーベッジコレクションが懸念事項」だと述べるのは簡単です。しかし、そのような言語を使用した場合に、メモリ問題に対処するために、どのような対策があるのかを積極的に追求していく必要があります。懸念事項を解消するために、CやC++言語を使用したらメモリ問題が自動的に解決する訳ではないことは明らかです。
C++言語を使用しSolaris 2.3上で動作していたのですが、開発が進んである程度基本的なサービスが動作し始めた時点で最も悩ましかったのは、解放されることなくメモリ使用量が増大するメモリリークです。それ以外にも、メモリ破壊、メモリの多重解放、解放済みメモリへの参照といった多くの問題を抱えていました。
それらの問題を解決するために、様々な調査や検査が可能なメモリ管理を私自身で設計・実装し、newとdeleteのオペレータを再実装したものを用意して使用し始めました。その後、多くの問題が解決されて製品化を行うことができました。先行して発売されたFuji Xerox DocuStation AS 200の開発でも、「自治体窓口証明発行システム」部分を子会社で開発したのですが、そこでも多くのメモリ問題を抱えており、私自身が実装したメモリ管理で置き換えて安定化させたという経緯があります。
その後、2000年にC++言語用に再設計(「C++とメモリ管理」参照)し、使用しているメモリ量の合計やピーク時の最大メモリ割り当て量などを計測する機構を追加しています。以前の設計からも多くを継承しており、未解放領域の一覧出力(どのソースコードのどこで割り当てられたのかの情報も含む)なども含まれていました。
一方で、当時から、「メモリリーク対策会議」と称して、何も仕組みが入っていないのに、とにかくメモリリークを減らせということしかできない会議を時々開催せざるを得ないプロジェクトの話や、プロセス空間が大きくなっているのでリークしているはずだから調査しなさいということで、闇雲にソースコードを調べたりしているプロジェクトの話を聞いたことがあります。
ガーベッジコレクションを持つ言語を使用したからと言って、メモリリーク問題や無駄なメモリ割り当ての問題は解決する訳ではありません。システムを開発しながら、そのような問題にどうやって対処していくか、どのような有効な手段があるかを常に探求していく必要があります。たとえば、NetBeansのテストフレームワーク(NbTestCase)にはメモリ問題に積極的に対処するため機構が用意されています。
ソフトウェアエンジニアとして、自分達が使用している言語およびシステムにおいて、メモリ問題に対して積極的に、かつ、継続的に取り組んでいくことが必要です。「ガーベッジコレクションの言語なのでガーベッジコレクションが懸念事項」だと述べるのは簡単です。しかし、そのような言語を使用した場合に、メモリ問題に対処するために、どのような対策があるのかを積極的に追求していく必要があります。懸念事項を解消するために、CやC++言語を使用したらメモリ問題が自動的に解決する訳ではないことは明らかです。
再出版の準備が進んでいます(2) [本]

Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
丸善出版から出ます。丸善出版から再出版される本は、次のリンクで公開されています。
http://pub.maruzen.co.jp/book_magazine/piason.html
すでに丸善とは出版契約を結んで、電子データは渡してあり、私の方で何か作業をすることはなく、印刷されて出版されるのを待つだけです。残念ながら、電子版の出版はありません。
再出版の準備が進んでいます [本]

プログラミング言語Java (The Java Series)
- 作者: ケン・アーノルド
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2007/04
- メディア: 単行本

Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
ピアソン桐原から出版され、現在は絶版となっている上記2冊ですが、再出版に向けて準備を進めています。出版日が決まり、Amazon.co.jpで注文できるようになったら、お知らせします。
今のところ、他の書籍の再出版の話はありません。個人的には、Objective-Cを言語としてきちんと解説している『Objective-C明解プログラミング』が再出版されて欲しいなとは思っています。