株式会社リコーを退職します(2) [転職]
今日(2017年8月31日)がリコーへの最終出社日です。2009年9月1日にリコーへ入社してから、主に行ってきたことを簡単にまとめます。
【業務関連】所属した開発組織の業務として行ったものです。
【技術教育】2000年から行ってきている教育です。
【業務関連】所属した開発組織の業務として行ったものです。
- 技術教育: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言語の研修です。詳しくは、こちらです。
2017-08-31 05:05
コメント(0)
練習問題の解答からみるエンジニアのレベル(3) [プログラマー現役続行]
私が今まで開催してきた社内のJava研修やGo研修では多くの練習問題を解かなければなりません。その練習問題の解き方から、どのようにソフトウェアエンジニアのレベルが分かるかについて書いたのが、次の記事です。
この記事での分類とは別に、最近驚いた解答がありました。それは、Go言語研修でのことです。Go言語研修では『プログラミング言語Go』をテキストとして使用しています。
驚いた解答は、次の練習問題に対する解答でした。
しかし、驚くことに、数人の受講生が
これは、自分で何も考えないという点において、「全く解けていない」レベルよりも低いレベルかもしれません。
この記事での分類とは別に、最近驚いた解答がありました。それは、Go言語研修でのことです。Go言語研修では『プログラミング言語Go』をテキストとして使用しています。
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 作者: Alan A.A. Donovan
- 出版社/メーカー: 丸善出版
- 発売日: 2016/06/20
- メディア: 単行本(ソフトカバー)
驚いた解答は、次の練習問題に対する解答でした。
練習問題7.5この練習問題の意図は、io
パッケージのLimitReader
関数はio.Reader
であるr
とバイト数n
を受け取り、r
から読み出す別のReader
を返しますが、n
バイトを読み出した後にファイルの終わりの状態を報告します。その関数を実装しなさい。
func LimitReader(r io.Reader, n int64) io.Reader
io
パッケージのLimitReader
関数と同じ機能を実装しなさいというのは明白です。そして、これは、プログラミングの練習問題ですので、自分で考えて実装することが求められます。しかし、驚くことに、数人の受講生が
io
パッケージのLimitReader
関数の実装コードを丸々コピーしていたことです。元の英語のコメントもそのままコピーしている人や、コメントだけ削除してコピーした人がいました。これは、自分で何も考えないという点において、「全く解けていない」レベルよりも低いレベルかもしれません。
2017-08-17 13:40
コメント(0)
リコーでの8年間に出版した本の一覧 [プログラマー現役続行]
2000年から技術書の翻訳や自著の出版をしていますが、2009年9月1日にリコーへ入社してから出版した書籍です。出版順に、次の通りです。
8年間の在籍期間に、私的な活動として全部で10冊(自著2冊、翻訳本8冊)を出版したことになります。2013年にはピアソンの翻訳書籍からの撤退に伴い、ピアソン桐原社から出版されていた書籍がすべて絶版となりました。しかし、『プログラミング言語Java 第4版』『Effective Java 第2版』『プログラミング原論』は、後に他の出版社から再出版されています。
最後の2冊『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』と『プログラミング言語Go』は、社内教育であるJava8研修とGo言語研修のテキストとしても使ってきました。
技術書の翻訳の場合、一般的な勉強会で技術書を読むことと大きく異なるのは、英語から日本語、それに校正作業の過程で何度も読み返すということです。さらに、社内教育でテキストとして使う本に関しては、教えることにより、内容がかなり頭に残っていきます。
アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)
- 作者: Dave H. Hoover
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/07/08
- メディア: 単行本(ソフトカバー)
Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)
- 作者: スティーブン・G. コーチャン
- 出版社/メーカー: ピアソン桐原
- 発売日: 2013/05
- メディア: 単行本
APIデザインの極意 Java/NetBeansアーキテクト探究ノート
- 出版社/メーカー: インプレス
- 発売日: 2014/05/23
- メディア: Kindle版
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: Kindle版
プログラミング言語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言語研修のテキストとしても使ってきました。
技術書の翻訳の場合、一般的な勉強会で技術書を読むことと大きく異なるのは、英語から日本語、それに校正作業の過程で何度も読み返すということです。さらに、社内教育でテキストとして使う本に関しては、教えることにより、内容がかなり頭に残っていきます。
2017-08-14 17:01
コメント(0)
リコーでの社内勉強会の本の一覧 [読書会]
この2年弱は、社内での勉強会を開催していませんが、私が主催でリコー社内で開催した勉強会で読んだ本の一覧です。
【期間】2010年5月10日〜2010年10月15日
【期間】2010年9月9日〜2012年12月10日
【期間】2010年11月3日〜2011年11月23日
【期間】2012年1月19日〜2013年7月13日
【期間】2014年1月21日〜2015年4月4日
【期間】2015年4月27日〜2015年11月30日
英語で読んだ本が2冊でした。
【期間】2010年5月10日〜2010年10月15日
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
- 作者: ロバート・C・マーチン
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/07/01
- メディア: 大型本
【期間】2010年9月9日〜2012年12月10日
Linux Kernel Development (3rd Edition) (Developer's Library)
- 作者: Robert Love
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2010/07/02
- メディア: ペーパーバック
【期間】2010年11月3日〜2011年11月23日
【期間】2012年1月19日〜2013年7月13日
【期間】2014年1月21日〜2015年4月4日
【期間】2015年4月27日〜2015年11月30日
英語で読んだ本が2冊でした。
2017-08-08 17:30
コメント(0)
clibと呼ばれるライブラリー開発の思い出(3) [clib]
(前回はこちら)
記憶が定かではないですが、2000年の後半からカラーデジタル複合機の新たなコントローラソフトウェアの開発が始まりました。一枚のコントローラボードですべてのサービスを動作させるということで、ほとんどのサービスは新規に開発するというプロジェクトでした。
開発に先立ち、オブジェクト指向で開発を行うということで、当時FXISにいた私、荒井礼子さん、皆川さんの三人で富士ゼロックスのソフトウェア技術者(200名以上)に以下のことを行いことになりました。
教育を受けただけでは、正しく実践できる保証はないため、これも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ファクトリーメソッドの推奨などです。
次回は、『メモリ管理ライブラリ』について書きます。
記憶が定かではないですが、2000年の後半からカラーデジタル複合機の新たなコントローラソフトウェアの開発が始まりました。一枚のコントローラボードですべてのサービスを動作させるということで、ほとんどのサービスは新規に開発するというプロジェクトでした。
開発に先立ち、オブジェクト指向で開発を行うということで、当時FXISにいた私、荒井礼子さん、皆川さんの三人で富士ゼロックスのソフトウェア技術者(200名以上)に以下のことを行いことになりました。
- C++教育を含むオブジェクト指向に関する基礎教育(一週間?)
- 実際の開発成果物のレビューを含むコンサルティング
教育を受けただけでは、正しく実践できる保証はないため、これも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ファクトリーメソッドの推奨などです。
次回は、『メモリ管理ライブラリ』について書きます。
2017-08-04 07:19
コメント(0)