So-net無料ブログ作成
検索選択
前の10件 | -

第25期Java研修が終了しました [プログラミング言語Java教育]

2016年11月に開講し、私にとっては通算で第25期となるJava研修が終了しました(Java研修実績)。9名が修了しました。2010年の第11期以降のリコーグループとしては、延べ118名が修了したことになります。私が株式会社リコーを退職したことにより、第10期と同様に『Effective Java』の学習を行うことなく、終了となりました。

25期.jpg
修了生と私

第25期はJava8研修も統合したのですが、『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』も、残念ながら第3章までとなりました。

最終回の成果発表会では、研修の振り返りと会心のデジタル時計のデモを各人に行ってもらい、最後に修了証書を授与しました。その後に、全員で門前仲町で懇親会を行いました。

Java研修を通して、全員が以下のことを経験出来たと思います。
  • 専門書をきちんと読んで学習するという経験と習慣。同じ本を一人で独学するのとは異なり、研修を一緒に受けている仲間がいることで読み通すことができ、練習問題にも取り組み、結果として学習する習慣が身に付いたと思います。
  • Java言語をみっちりと学んだので、今後、さまざまなプログラミング言語を学習する際に対比しながら学習できるようになったと思います。
この一年間の受講生の努力が、彼ら・彼女らの今後のソフトウェアエンジニアとしてのキャリアの基礎になれば、私にとって嬉しいことです。


スポンサーリンク





コメント(0) 

レビューした(している)これからの新刊 [プログラマー現役続行]

これから出版される本で、今年その本の英語の草稿をレビューした本です。

Core Java SE 9 for the Impatient (2nd Edition)

Core Java SE 9 for the Impatient (2nd Edition)


結構なページ数があるので、全部をレビューできませんでしたが、Java 9に合わせて更新されています。Horstmann氏のJava関連の最近の書籍は、レビュー依頼が米国の出版社からあるのですが、『Core Java Volume I--Fundamentals (10th Edition)』 『Core Java, Volume II--Advanced Features (10th Edition)』 も、ページ数が膨大で全部をレビューできませんでした。

Go in 24 Hours, Sams Teach Yourself: Next Generation Systems Programming with Golang

Go in 24 Hours, Sams Teach Yourself: Next Generation Systems Programming with Golang

  • 作者: George Ornbo
  • 出版社/メーカー: Sams Publishing
  • 発売日: 2018/01/01
  • メディア: ペーパーバック

米国の出版社からの依頼でレビューしたものです。Go言語の入門書で、これからGo言語を学ぶ初心者向きです。各章が1時間で消化できるないようになっています。初心者本でしたが、私自身も新たに学ぶことができた事柄もありました。

草稿が執筆中なので、レビューそのものがまだ終わっていませんが、現在レビュー中なのが次の本です。

Effective Java (3rd Edition)

Effective Java (3rd Edition)

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

こちらは、第2版と同様に、著者のJoshua Blochが、レビューして欲しい人達(20名以上)に直接草稿を送っています。9年振りの改訂です。


スポンサーリンク





コメント(0) 

延期:『Effective Java, 3rd edition』 [Effective Java 3rd]

『Effective Java, 3rd edition』の英語版の発売日が延期されたようです。11月30日発売となっています。

Effective Java (3rd Edition)

Effective Java (3rd Edition)




スポンサーリンク





コメント(1) 

株式会社リコーを退職します(2) [転職]

今日(2017年8月31日)がリコーへの最終出社日です。2009年9月1日にリコーへ入社してから、主に行ってきたことを簡単にまとめます。

【業務関連】所属した開発組織の業務として行ったものです。
  • 技術教育:2010年に延べ500名以上のソフトウェアエンジニアに対して、「ソフトウェアエンジニアの心得」「テスト駆動開発」「C++」「API設計の基礎」などの教育を実施しました。しかし、「教育と場」でも書いたように、今から振り返ってみると、単に「教育をした」と「教育を受けた」ということだけが残り、私が教えた内容を実際の開発の現場で指導する人がいないため、開発組織としてのレベルアップにはならなかったと思います。

  • Jenkins導入:2010年10月から行ったものです。当時デジタル複合機内で動作するJavaの開発環境やインテグレーション環境は、私の視点からはあまりにもお粗末でした。それで、FXIS時代に一緒に仕事をした派遣会社のエンジニアに来てもらい、二人で二ヶ月で一新しました。ソースコントロールシステムをCVSからSubversionへ移行し、それまですべて手作業で行われていたビルドをすべて自動で行えるようにしました。さらに、FindBugsを含む静的解析ツールの導入も行いました。この2年後に「継続的インテグレーションは強みではなくなった」という記事を書いていますが、これは継続的インテグレーションに対する社内のあまりの無理解に対して書いたものです。

  • 1701G:1701Gというのは、2013年7月に発足した開発グループの正式な名称です。私がグループリーダでした。Star Trekのファン(つまり、トレッキー:Trekkie)であれば、1701が何を意味するのか分かると思います。

    このグループでは、デジタル複合機のコントローラソフトウェアをリコー社内では前例のない方法で開発しようとしたものです。Go言語を用いて、完全テスト駆動開発というものです。当時、Go言語での開発経験者の中途採用活動も行っていましたが、今日とは違って経験者は皆無でした。

    グループとしての活動は2年間で終了しました。途中で、このグループの開発よりもはるかに先を行っているHPの開発を知りました。それについては、こちらで書いています。実は、このHPよりも先行できる可能性があったのが富士ゼロックスでした。1701Gで行った開発は、私が2003年から2009年まで従事したC++によるプロジェクトを、Go言語で若手のエンジニアを中心として焼き直したものでした。

  • 技術レビュー:1701G以降は、開発現場の成果物のレビューを中心として活動を行ってきました。

【技術教育】2000年から行ってきている教育です。
  • 「ソフトウェアエンジニアの心得」教育:リコーへ入社する前から行っていた2時間30分の研修です。リコーでは、2009年から今年まで、情報系として入ってきた新卒新人向けに毎年行ってきました。

  • Java言語研修:詳しくは、こちらです。8年間にリコーグループで109名が修了しています。途中から数えるのが面倒になったので正確な数字は分かりませんが、約1/4の修了生がすでに転職しています。今年は、2年ぶりにJava研修のOB・OG懇親会を開催しました(その様子はこちらです)。

  • Go言語研修:書籍『プログラミング言語Go』の出版を機に始めたGo言語の研修です。詳しくは、こちらです。
上記の3つの研修は、希望される企業があれば有償で開催可能です。開催日は原則金曜日となります。ただし、今回私が適用を受ける「セカンドキャリア制度」(いわゆる早期退職制度)の制約により、リコーグループの会社に対しては開催できません。

コメント(0) 

練習問題の解答からみるエンジニアのレベル(3) [プログラマー現役続行]

私が今まで開催してきた社内のJava研修やGo研修では多くの練習問題を解かなければなりません。その練習問題の解き方から、どのようにソフトウェアエンジニアのレベルが分かるかについて書いたのが、次の記事です。
この記事での分類とは別に、最近驚いた解答がありました。それは、Go言語研修でのことです。Go言語研修では『プログラミング言語Go』をテキストとして使用しています。

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

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


驚いた解答は、次の練習問題に対する解答でした。
練習問題7.5 ioパッケージLimitReader関数はio.Readerであるrバイトnを受け取り、 rから読み出す別のReaderを返しますが、nバイトを読み出した後にファイルの終わりの状態を報告します。その関数を実装しなさい。

func LimitReader(r io.Reader, n int64) io.Reader
この練習問題の意図は、ioパッケージのLimitReader関数と同じ機能を実装しなさいというのは明白です。そして、これは、プログラミングの練習問題ですので、自分で考えて実装することが求められます。

しかし、驚くことに、数人の受講生がioパッケージのLimitReader関数の実装コードを丸々コピーしていたことです。元の英語のコメントもそのままコピーしている人や、コメントだけ削除してコピーした人がいました。

これは、自分で何も考えないという点において、「全く解けていない」レベルよりも低いレベルかもしれません。

コメント(0) 

リコーでの8年間に出版した本の一覧 [プログラマー現役続行]

2000年から技術書の翻訳や自著の出版をしていますが、2009年9月1日にリコーへ入社してから出版した書籍です。出版順に、次の通りです。

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/10/21
  • メディア: 単行本(ソフトカバー)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

  • 作者: Dave H. Hoover
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/07/08
  • メディア: 単行本(ソフトカバー)

プログラマー”まだまだ”現役続行 (技評SE選書)

プログラマー”まだまだ”現役続行 (技評SE選書)

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2010/09/04
  • メディア: 単行本(ソフトカバー)

プログラミング原論

プログラミング原論

  • 作者: アレクサンダー ステパノフ
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2010/12/24
  • メディア: 単行本(ソフトカバー)

Android SDK 開発クックブック

Android SDK 開発クックブック

  • 作者: ジェームズ・スティール
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2011/07/26
  • メディア: 単行本(ソフトカバー)

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

  • 作者: スティーブン・G. コーチャン
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2013/05
  • メディア: 単行本

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

  • 出版社/メーカー: インプレス
  • 発売日: 2014/05/23
  • メディア: Kindle版

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: Kindle版

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

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

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

8年間の在籍期間に、私的な活動として全部で10冊(自著2冊、翻訳本8冊)を出版したことになります。2013年にはピアソンの翻訳書籍からの撤退に伴い、ピアソン桐原社から出版されていた書籍がすべて絶版となりました。しかし、『プログラミング言語Java 第4版』『Effective Java 第2版』『プログラミング原論』は、後に他の出版社から再出版されています。

最後の2冊『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』と『プログラミング言語Go』は、社内教育であるJava8研修とGo言語研修のテキストとしても使ってきました。

技術書の翻訳の場合、一般的な勉強会で技術書を読むことと大きく異なるのは、英語から日本語、それに校正作業の過程で何度も読み返すということです。さらに、社内教育でテキストとして使う本に関しては、教えることにより、内容がかなり頭に残っていきます。

コメント(0) 

リコーでの社内勉強会の本の一覧 [読書会]

この2年弱は、社内での勉強会を開催していませんが、私が主催でリコー社内で開催した勉強会で読んだ本の一覧です。

【期間】2010年5月10日〜2010年10月15日
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

  • 作者: ロバート・C・マーチン
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2008/07/01
  • メディア: 大型本

【期間】2010年9月9日〜2012年12月10日
Linux Kernel Development (3rd Edition) (Developer's Library)

Linux Kernel Development (3rd Edition) (Developer's Library)

  • 作者: Robert Love
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2010/07/02
  • メディア: ペーパーバック

【期間】2010年11月3日〜2011年11月23日
言語設計者たちが考えること

言語設計者たちが考えること

  • 作者:
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/09/27
  • メディア: 大型本

【期間】2012年1月19日〜2013年7月13日

コンピュータの構成と設計 第4版 下 (Computer Organization and Design: The Hardware/Software Interface, Fourth Edition)

コンピュータの構成と設計 第4版 下 (Computer Organization and Design: The Hardware/Software Interface, Fourth Edition)

  • 作者: デイビッド・A・パターソン
  • 出版社/メーカー: 日経BP社
  • 発売日: 2011/11/17
  • メディア: 単行本

【期間】2014年1月21日〜2015年4月4日
RESTful Web APIs

RESTful Web APIs

  • 作者: Leonard Richardson
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2013/09/27
  • メディア: ペーパーバック

【期間】2015年4月27日〜2015年11月30日
Javaパフォーマンス

Javaパフォーマンス

  • 作者: Scott Oaks
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2015/04/11
  • メディア: 大型本

英語で読んだ本が2冊でした。

コメント(0) 

clibと呼ばれるライブラリー開発の思い出(3) [clib]

(前回はこちら

記憶が定かではないですが、2000年の後半からカラーデジタル複合機の新たなコントローラソフトウェアの開発が始まりました。一枚のコントローラボードですべてのサービスを動作させるということで、ほとんどのサービスは新規に開発するというプロジェクトでした。

開発に先立ち、オブジェクト指向で開発を行うということで、当時FXISにいた私、荒井礼子さん、皆川さんの三人で富士ゼロックスのソフトウェア技術者(200名以上)に以下のことを行いことになりました。
  • C++教育を含むオブジェクト指向に関する基礎教育(一週間?)
  • 実際の開発成果物のレビューを含むコンサルティング
ほとんどのソフトウェアエンジニアは、デジタル複合機に関するドメイン知識はありましたが、オブジェクト指向言語(C++)やオブジェクト指向開発は初めてということで、基礎教育をFXISへ発注してもらって実施しました。

教育を受けただけでは、正しく実践できる保証はないため、これもFXISへ発注してもらい、希望する開発グループに対してコンサルティングをすることになりました。実際、私自身は、この頃から、2002年8月に米国へ赴任するまで、多くのレビューを行っていました。特に2001年には、週に3日とか4日は、朝から一日中レビューをしていました。

同時に開発に先立って私が書いたのが、『Code Review Guide』と『C++ Coding Standard』です。

『Code Review Guide』では、コードレビューのやり方を書いてあるのですが、特徴的なのは、開発者が単体テストを実施する前に、コードレビューを実施するということです。開発者がテストしてしまった後にコードレビューを実施して読みやすさに関する指摘をしても、コードを書き直してもう一度テストするというのは心理的な抵抗が強くなってしまうので、テストする前にレビューするように規定していました。当時は、自動テストではなく、手作業によるテストの時代でした。

『C++ Coding Standard』は、C++での様々な命名規則、クラスやインタフェースの宣言方法、定数の宣言方法、実装の隠蔽方法、禁止事項などを書いたものです。これは、IM200開発でのC++の経験に加えて、1996年から独学で学んだJavaの知識の多くをC++へ盛り込んだものとなっていました。

おそらく、2000年の夏頃からclibのAPI設計を始めたのだと思います。まず、書いたのは、『メモリ管理ライブラリ』のAPI仕様書です。次に、『メモリ管理ライブラリ』に基づく『スレッドライブラリ』のAPI仕様書を書きました。『スレッドライブラリ』には、単なるマルチスレッドプログラミング用のAPIだけではなく、コレクションライブラリも含めました。『メモリ管理ライブラリ』と『スレッドライブラリ』を総称して「clib」と呼んでいました。

clibは、製品で使われるOSであるVxWorks版が実装されただけでなく、さらにWindows版とSolaris版が実装されて開発者に提供されました。clibだけで実装されるライブラリであれば、Windows上でもSolaris上でも実装・デバッグできるようになっていました(最終的な商品では、VxWorks用にソースコードがクロスコンパイルされます)。

一方で、私自身がいくつかの開発グループのコンサルティング(主にクラス図やコードのレビュー)を行っていましたので、共通に必要と考えられる機能は、順次『スレッドライブラリ』へ追加していきました。追加した機能で最も実装が複雑だったのは、ReaderWriterLockでした。

clibはC++用のライブラリでしたが、Javaの影響を色濃く反映したものになっていました。特に、「インタフェース」概念の導入、「インタフェースの実装」を除く「クラスの多重継承の禁止」、staticファクトリーメソッドの推奨などです。

次回は、『メモリ管理ライブラリ』について詳しく書きます。

コメント(0) 

clibと呼ばれるライブラリー開発の思い出(2) [clib]

(前回はこちら

アーキテクチャ概要

Fuji Xerox DocuStation IM200 / AS200は、OSがSolaris 2.3であり、その上に、スキャナー、プリンタ、ファック装置、パネルなどのデバイスを抽象化してAPIを提供するプロセス群、それらのプロセス群と通信するvoyagerと呼ばれるプロセスがありました。一つのプロセスであるvoyager上でコピーやファックスなどのサービスが動作するようになっていました。

voyagerの中は、最下位層にMAE(Multifuction Application Environment)と呼ばれるレイヤがあり、MAEがサービスの起動から、割り込み処理、デバイスの排他制御などの基本機能を提供していました。各サービスは、ユーザからの指示があると、MAE上でスレッドとして都度起動されるように設計されていました。サービスを実装しているスレッドは、さらに子スレッドを生成することができ、それらをまとめてMAE上で管理していました。

コピーなどのサービスが完了すると、生成されたスレッド群はすべて終了します。MAEの実装は、ほぼすべてを私一人で設計・実装しました。このような動作環境でしたので、新たに実装したnew演算子とdelete演算子によるメモリ管理は、次のような機能を持っていました。
  • スレッド単位の管理:スレッド単位で、割り当てられたメモリを管理する
  • メモリ破壊検出:new演算子で返した領域の前後のメモリ領域を破壊した場合には、delete演算子がその破壊を検出する。
  • 割り当てられたメモリへのマーク付け:割り当てられて解法されていないメモリ領域にマークを付ける機能
  • スレッドごとのメモリ割り当て順序管理:スレッドごとに、個々の割り当てられたメモリがそのスレッドでの何番目の割り当てなのかの管理
システムが定常状態のとき(つまり、何もサービスが動作していないとき)に、「割り当てられたメモリへのマーク付けの機能」を使ってすべてのメモリにマークを付けます。その後に割り当てられたメモリにはマークが付けられていません。

システムの定常状態で、割り当てられているすべてのメモリにマークを付けて、その後にコピーなどのサービスを実行します。そして、実行後にマークが付けられていないメモリの一覧を表示することができました。つまり、サービスの処理の中で割り当てられて、サービスが終了したときに解放されていないメモリの一覧が表示されます。しかし、その一覧は、メモリのアドレスと、それがどのスレッドで何番目に割り当てられたかしか分からない実装になっていました。それでも、全く情報が無いよりはよかったのですが、リークしているメモリがどこでnewされたメモリなのかを調べるのが面倒でした。この面倒さを解消する仕組みは、当時私は思い付かなかったようです(clibでの改善1)。

もう一つ、当時苦労したのはダングリングポインターです。つまり、すでに解放済みのメモリを指すポインターです。解放されたメモリを参照していることをデバッガで調べるのが容易ではありませんでした。なぜなら、解放はされているが、メモリの内容(オブジェクト内容)がそのままなので、動作したりすることがあるからです。この問題の解決を容易にする仕組みも、当時私は思い付かなかったようです(clibでの改善2)。

IM200はペーパーユーザインタフェースを持つ新たなデジタル複合機でしたが、そのペーパーユーザインタフェースのソフトウェアの代わりに、別のソフトウェアを搭載したのがAS200(自治体窓口証明発行システム)でした(基本的なデジタル複合機の機能は同じソフトウェアが動作)。AS200固有の機能はすべて富士ゼロックス情報システムが開発していたのですが、そこでもメモリリークに悩まされていて、私が作った新たなメモリ管理でリンクし直したら、容易にリークが分かるようになって安定させることができました。

こうして、Fuji Xerox DocuStation IM200と AS200は、1995年の暮れから1996年にかけて完成して製品化されました。新たなサービス(課金)モデルを目指して開発されたIM 200は、残念ながらあまり売れませんでした。その代わり、AS200は対象が市役所向けでしたが、売れて、リコーへOEMまでしていました。AS200は、当時(1996年)の製品としてはめずらしく大型のタッチパネルを持ち、競合機種と比較してもダントツの商品に仕上がっていました。市役所向けとは言え、市場を席巻されてしまっては、AS200の導入と同時に普通のデジタル複合機も置き換えられてしまうのと、同じ機能を後追いで開発することは無理だと、当時のリコーの誰かが判断したのではないかと思います
※ リコーに転職してから、このOEMの件を開発部門のさまざまな人に聞いても、誰も知らないとう返事でした。おそらく開発部門を巻き込まずにOEMで仕入れて販売したのだと思います。
IM200に関しては、後継機の開発を行わないことが1996年に決まり、私は、その年の8月に富士ゼロックスを退職して、日本オラクルへ転職しました。その後、ジャストシステムを経て、富士ゼロックスの子会社である富士ゼロックス情報システムへ入社したのが1998年5月でした。

そして、1999年には、新たなカラーのデジタル複合機開発の検討が富士ゼロックスで始まろうとしていました。その頃に提案されたソフトウェアアーキテクチャに私が異議を唱えたのが1999年の暮れでした。私からの異議がきっかけで、二つのソフトウェアアーキテクチャの検討が2000年の前半の半年間に、多くのマネージャやエンジニアを巻き込んで行われました。そして、最終的には、私が提案したソフトウェアアーキテクチャは却下されて、今の富士ゼロックスのデジタル複合機に搭載されているソフトウェアアーキテクチャが採用されました。

ここから、clibの開発が始まります。それは、2000年夏です。

(つづく)

株式会社リコーを退職します [転職]

2009年9月から働き始めた株式会社リコーを8月31日付けで退職します。丸8年働いたことになります。現在57歳であり、定年退職までにはまだ2年と少しありますが、「セカンドキャリア制度」(早期退職制度のようなもの)の適用を受けて退職します。

8年間の会社での業務や退職理由については述べませんが、業務以外の私的活動の成果をまとめてみると次のようになります。
現在翻訳している技術書は最終校正段階ですが、8月までには出版にならないので、出版は次の会社へ働き始めてからとなります。

最終出社日は、8月31日(木)です。そして、9月からは長年勤めた複写機業界(富士ゼロックスが12年、富士ゼロックス情報システムが11年、リコーが8年の合計31年!)を離れて、私にとって6社目となる会社で働き始めます。

前の10件 | -