So-net無料ブログ作成
検索選択

第4回Java研修OB・OG懇親会 [プログラミング言語Java教育]

7月22日(土)に、第4回Java研修OB・OG会をHP本社8Fのカフェテリアで開催しました。今回は、Java研修修了生だけでなく、Go研修修了生および現在Java研修を受講している人達も対象とした拡大版でした。

第3回と同様に2部構成にしました。私も入れて技術セッションには45名が参加し、懇親会には42名が参加しました。

  第1部 15:00〜17:10 技術セッション
  第2部 17:10〜19:30 懇親会

技術セッションでは、まず、「Node.js 日本ユーザーグループ」の会長である古川陽介さんからNode.jsの話をしてもらいました。古川さんが使っているTwitterのプロフィールのアイコンが、Java研修の最終課題用に作成されたものであることを知りました。

20247635_10211555245811368_2830317892286980961_o.jpg

2件目は、修了生が3名働いているクラウド会計ソフトを提供しているfreeeを西出さんに紹介してもらいました。

freee.jpg

3件目は、GROOVE Xに勤めている荒木さん(Tour of Goの日本語サイトの運営者)からロボット関連の話をしてもらいました。

Atoto.jpg

4件目は、ホンダのR&Dセンタ−Xに勤めている東さんから、ホンダおよびR&DセンターXの紹介をしてもらいました。

ここで、技術セッションの予定時間が過ぎたので、会場のカフェテリアでお酒を飲みながらの懇親会です。

懇親会.jpg

このカフェテリアは、TVドラマ「半沢直樹」の第6話で撮影に使われた場所でした。

半沢直樹.jpg

懇親会の途中で、私が「Java・Go研修を振り返って」と題した話をしました。

振り返り.jpg
この後、LTを2件と、場所を提供してくれたHPおよびDCX Technology社の紹介を加藤さんから行ってもらいました。

OG会.png

Java研修を始めた2000年の頃は、私は40歳であり、受講生との年齢差も15歳程度でした。17年が経過し、最近では、受講生の父親と同じか年上という状況になっています。

この17年間で、正確な数字はないのですが、Java研修およびGo研修で、200名以上の修了生を送り出し、さまざまな企業で活躍しています。そして、私事ですが、8月31日付けで株式会社リコーを退職し、9月から新たな会社で働き始める予定です。

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

2000年にclibと呼ばれるC++用のライブラリーを開発しました。それは、今でも富士ゼロックスのデジタル複合機で1000万行を超えるコントローラソフトウェア(*)と呼ばれる制御ソフトウェアで使われているライブラリです。メモリ管理機構とマルチスレッドプログラミング機構を統合したようなC++のライブラリです。
(*)http://www.atmarkit.co.jp/ait/articles/1507/06/news009.html

clibは、私がそのAPI仕様をすべて設計し、実装は他の優秀なエンジニア2名に行ってもらいました。API仕様には、防御的プログラミングも含めて、メモリ管理機構での細かな動作仕様も書いていました。

このライブラリに関して、忘れないうちに一連のブログ記事として書きたいと思います。しかし、記憶は嘘をつきます。したがって、事実とは異なった私の記憶の嘘が含まれているかもしれません。

Fuji Xerox DocuStation IM 200/AS 200の開発

時代は、1991年1月17日まで遡ります。その日、私はXerox社のPARC(Palo Alto Research Center)にいました。米国に駐在していましたが米国内で転勤することになり、新たに従事するPARCのプロジェクトの話を聞くためにLAから出張していました。その日は、湾岸戦争が勃発し、PARCの廊下で戦争が始まったと伝えられたことを鮮明に覚えています。

そのプロジェクトは、PARCではPageMillプロジェクトと呼ばれていました。富士ゼロックス社からの駐在員は私一人でした。2年間、米国でそのプロジェクトに従事したあと、製品化のために1993年5月に日本に帰国しました。4年半の米国駐在を終えて富士ゼロックスへ戻り、PageMillプロジェクトの技術の製品化を行うDS企画開発室に配属になりました。

当時、富士ゼロックスはワークステーション事業から撤退を決めており、その開発室にはそれまでワークステーションを開発していた優秀なソフトウェアエンジニアが集められていました。それでもほとんどが私と同じ歳か一つ下ぐらいでしたので、30代前半のソフトウェアエンジニアが集められていました。

この製品化プロジェクトで特徴的だったのは、以下の通りです。
  • 集められたソフトウェアエンジニアは、私も含めて誰一人としてデジタル複合機の開発に従事したことがありませんでした。
  • CPUにはSPARC、オペレーティングシステムはSolaris 2.3という構成でした。
  • 私を含めて全員が、初めてのマルチスレッドプログラミングでした。
  • 誰もほとんど使ったことがないC++で開発することが決まっていました。
この開発では、さまざまな問題に直面し、都度解決していきました。

C++での開発

C++で開発することが決まっていたのですが、当時、C++を学べば学ぶほど困ったなと思っていました。それは、APIを設計するときに、ヘッダーファイルに実装の詳細を記述しない方法がないように思えたからです。実際には、ある書き方を考え出しました。その書き方の詳細については、「API設計の基礎」に書いていますので、参考にしてください。

ビッグバンインテグレーション

継続的インテグレーションという言葉がない時代でしたので、ビッグバンインテグレーションを行っていました。しかし、2週間ごとのインテグレーションは必ず失敗するという状況でした。この問題に対処するために導入したのは、夜間ビルドです。つまり、毎晩自動ですべてをビルドするということです。毎晩ビルドが成功するようになるまでは、数週間を要しました。

当時、ビルドはかなり時間を要していました。そして、夜間ビルドが毎晩成功するわけではありませんでした。毎朝7時過ぎに出社後は、夜間ビルドが失敗していたら、原因を修正して、ビルドをやり直すということを行っていました。また、複数のワークステーションを駆使して行う分散ビルドも自分で開発したツールで行っていました。

メモリ破壊とメモリリーク

開発がある程度進んで、最も大きな問題となったのは、「メモリ破壊」と「メモリリーク」です。コピーができるようになっても、1ページのコピー動作ごとにメモリが2MBもリークしていたのです。

当時、purifyが登場していましたが、ほとんど使えませんでした。マルチスレッドでは正しく動作しなかったの、purifyを使用すると動作が恐ろしく遅くなるため、普段の開発では使えませんでした。

この時、問題を解決するには、メモリ管理を自分で行う必要があると私は判断しました。そして、C++のnew演算子とdelete演算子を独自に実装し、メモリ破壊やメモリリークを検出する機構を入れ、問題を解決することにしました。

つづく

AITCセミナー [プログラマー現役続行]

2017年6月16日(金)に、AITCセミナーで、「ソフトウェアエンジニアの心得 / Go言語の紹介」と題して2時間の話をしました。案内は、こちらです。

「ソフトウェアエンジニアの心得」はQ&Aを入れて2時間30分でいつも話すのですが、約1時間で話をしたため、省略した部分も多かったです。

「Go言語の紹介」は、Go言語の特徴をデモを含めて行ったのですが、45分だったので、用意した資料をすべて話すことはできませんでした。資料は、こちらです。

参加者は約40名程度で、セミナーの後は懇親会で、90分ほど参加者と色々と話をすることができました。

第4回Java研修OB・OG懇親会を開催します [プログラミング言語Java教育]

2年振りにJava研修OB・OG懇親会を開催します。過去の3回の開催記事は以下の通りです。
第4回は、参加資格をJava研修の修了生に限定せず、Go研修の修了生、および現在開講している第25期のJava研修受講生を含めます。

【開催日】 
  7月22日(土)

【場所】
  カフェテリア River South (東京都江東区大島

【時間】
  • 第1部 15:00〜17:00 技術セッション
  • 第2部 17:00〜18:00 懇親会
【参加資格】
技術セッションでは、「Node.js 日本ユーザーグループ」の会長である古川陽介氏(Java研修第8期修了生)によるNode.jsの紹介を含め、修了生が活躍している企業のサービスや技術の紹介を行ってもらいます(古川さんの最新のインタビュー記事はこちら)。

懇親会は、同じ場所で引き続きビュッフェ形式で開催します。

参加を希望される修了生は、私宛にメールで問い合わせください。登録サイトの情報および詳しい案内を送ります。

ソフトウェア開発組織が持つべきカルチャー(17) [ソフトウェア開発組織が持つべきカルチャー]

コードカバレッジを品質基準としない

API設計の基礎」の3.8節「コードカバレッジと防御的プログラミング」では、次のように述べています。
テストコードによるコードカバレッジは、そのソフトウェアの品質を担保しません。コードカバレッジが100%だから、品質が高いとは限りません。バグがあるコードでも、テストでコードカバレッジを100%にすることはできます。
ある機能を持つモジュールを開発する場合、そのモジュールのAPI設計が重要になります。APIの仕様には機能や使い方はもちろんのこと、不正なパラメータの場合の振る舞いが記述されていなければなりません(参考:「API設計の基礎」)。

そして、テストコードとしては、その仕様を検査するテストを書くことになります。①適切なAPI仕様、②それに基づく適切なテスト、そして実装です。実装がテストに合格したら、コードカバレッジを計測するわけです。コードカバレッジでは、コードの実行割合ではなく、実際に実行されたコードがどの行で、どの行が実行されていないかを見る必要があります。もし、実行されていないコードがあれば、その理由を考えます。テストが不足しているのであればテストを追加しますし、不必要なコードを書いていればコードを削除するかもしれません。あるいは、防御的プログラミングのために実行されないコードなら、そのままにしておくかもしれません。

このような開発では、①の「適切なAPI仕様」が記述されているかが、まずは重要です。私自身は、多くのAPIのレビューをしてきましたが、適切にAPIを定義できないエンジニアが多いです。ソフトウェアの経験年数が浅いためにできない人もいれば、ソフトウェアの経験年数が長くてもできない人もいます。この①ができていなければ、コードカバレッジは無意味です。残念ながら①の品質を静的に解析できるツールはありません。経験を積んだスキルの高いエンジニアにレビューしてもらうしかないのです。

②の「適切なテスト」では、仕様通りであるかに加えて、入力パラメータの組み合わせが網羅されているかも重要です。不正なパラメータの検査、境界値分析、同値分割などを適切に取り入れる必要があります。①がきちんとされてない場合、②のテストは正常なケースだけだったり、テスト範囲が狭かったりします。不適切なテストを実行した結果のコードカバレッジも、再び無意味です。したがって、ソフトウェアエンジニアは、テスト設計に関する技法もきちんと学ぶ必要があります。

コードカバレッジの数値が、ソフトウェアの品質を担保するわけではありません。しかし、①と②は静的に測定するのが困難なので、コードカバレッジの数値を単体テストの品質基準にしてしまっているソフトウェア開発組織が多くあるのではないでしょうか。たとえば、80パーセント以上のコードカバレッジをもって単体テストを完了とするとかです。そして、その数値だけが一人歩きを始めます。つまり、開発者や組織が、その数値をクリアするという視点だけで活動してしまうのです。極端な場合には、ソースコードを解析して、高いコードカバレッジとなるテストコードを生成する有償ツールを使って目標値を達成することまで行われたりします(もちろん、品質は向上しません)。結果として、①の「適切なAPI」を定義できなくて、②の「適切なテスト」を設計できないソフトウェアエンジニアを大量生産してしまいます。

残念ながら、コードカバレッジの数値目標を長年追っているようなソフトウェア開発組織では、①や②をきちんと行えるソフトウェアエンジニアが少なく、あるいはいなかったりして、①や②をきちんとレビューするという品質向上の活動ができなくなったりしています。

ソフトウェア開発組織が持つべきカルチャー(16) [ソフトウェア開発組織が持つべきカルチャー]

ソフトウェア開発組織に適切なマネージャを割り当てる

「ソフトウェア開発組織が持つべきカルチャー(まとめ)」を掲載してから2年が経過しました。

ソフトウェアエンジニアにとって、その組織で働き続けるモチベーションをもたらす要因は、時代の先端を行くソフトウェア開発だったり、誰と一緒にソフトウェア開発をするかだったりとさまざまな理由があるかと思います。

私自身は、幸運なことに20代、30代、40代と時代の先端を行くソフトウェア開発に従事し、楽しかったことも多かったです。しかし、一方で、モチベーションを下げる要因も色々とありました。その要因の中で最も大きいのは、「ソフトウェア開発の経験がない人が上司」、もしくは、「経験が数年しかない人が上司」というものです。ひどい状況になると、若手のソフトウェアエンジニア達の前で「ソフトウェア開発は給与が安い若い人がやればよい」という発言をするマネージャがいたりします(いました)。

ソフトウェア開発を一生の仕事をとして取り組みたいと思っている若手のソフトウェアエンジニアが属する組織に、間違ったマネージャを割り当てるのは、長期的にその組織が致命的な悪循環に陥る可能性があります。どういうことかと言うと、成長してきた若手のエンジニアが、さらに成長して中堅として若手を指導する立場になる前に、その組織(会社)を離れていってしまうのです。そのような転職が続くと、マネージャとして適切な人材が組織(会社)に残らなくなって、結果としてソフトウェア開発経験がない人がソフトウェア開発組織のマネージャとなり、悪循環を加速してしまうのです。

私自身は、「ミッションステートメント」で述べているように「技術者の育成も重要であり、次世代を担う技術者の育成も続ける」ということで、2000年からJava研修、2016年からのGo研修を続けています。これらの研修は、ソフトウェアエンジニアの基礎体力として一つの言語をきちんと学んでもらうと同時に、バイブル本を通した技術の学び方を学んでもらうことです。おそらく、一人でバイブル本を読破して練習問題まで解いていくというのは、かなり難しいです。それを研修として取り組んでもらい、研修の日には他の受講生の質問も含めて議論したり、プログラミングの解答を見たり、そして懇親会で話をすることで続けられるのです(さらに、プライベートの時間に予習するために、家族の理解も必要です)。

私の研修の修了生には、富士ゼロックス情報システム社の頃からも含めて転職している人もいますし、転職せずに働き続けている人も多いです。もし、研修の修了生の転職率が高いとしたら、それは、研修が「原因」ではなく、さまざまな転職理由があるはずです。ただ、成長し続けるソフトウェアエンジニアが属する組織に、不適切な上司(マネージャ)を割り当てることが、「高い転職率という結果」をもたらすことは間違いないと思います。

ソフトウェア開発組織では、不適切なマネージャを割り当てないように注意しなければなりません。

書籍『Effective Java, 3rd Edition』が予約注文可能 [Effective Java 3rd]

発売日が2017年10月29日の予定になっていますが、英語版の『Effective Java, 3rd Edition』が予約注文可能になっています。

Effective Java (3rd Edition)

Effective Java (3rd Edition)



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

2016年11月に開講した第4期Java 8研修が終了しました。9名が修了しましたので、これで、延べ35名が修了したことになります。

Java8.png
修了生と私

第4期はリコーITソリューションズ社の秋田事業所からも2名が参加しました。RICOH Unified Communication SystemsRICOH Interactive Whiteboardを使って、晴海本社と秋田事業所を接続して参加してもらいました。

最終回は、午前中にテキストの最終章が終わったので、午後は『Java Puzzlers』をやって今までの学習の成果の確認を兼ねてパズルを楽しみました。

Java 8だけの単独コースとしての開催は、第4期が最後となります。今後は、Java研修の一部として組み込む計画です。

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

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

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

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース

  • 作者: ジョシュア・ブロック
  • 出版社/メーカー: ピアソン・エデュケーション
  • 発売日: 2005/11/14
  • メディア: 大型本


Go言語研修実績 [golang]

今までの実績、現在開催中、今後開催予定をまとめておくためのページです。

プログラミング言語Go基本技術習得コース ― リコー(株)勤務 ―】
開始月 終了月 修了人数 備考
1 2016年2月 2016年10月 9名 社内向け。前半は翻訳原稿を使用
2 2016年7月 2017年2月 5名 社内向け
3 2017年4月 開講中 社内向け
4 2017年4月 開講中 リコーITソリューションズ社向け

【研修内容】

研修では、『プログラミング言語Go』を事前に読んで、質問をまとめてもらうと同時に練習問題を解いてもらいます。この予習は基本的に私的時間に行ってもらいます。月に1日だけの業務中の研修では、質問への回答やディスカッション、および練習問題の解答の確認を行います。
※ 予習がすべて私的時間なので、研修の受講は「希望者」だけです。

社内の研修コースのタイトルは、「プログラミング言語Go基本技術習得コース」となっています。これは初心者向けという意味ではなく、Go言語でプログラミングするのであれば最低限学んでおくべきことを学ぶという意味です。

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

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

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


第2期Go言語研修が終了しました [golang]

2016年7月に開講した第2期Go言語研修が終了しました。

第2期Go研修.png
修了生と私

第2期は5名が修了しました(1名が最終回を欠席)。第1期も入れると合計で14名が修了したことになります。

研修では、『プログラミング言語Go』を事前に読んで、質問をまとめてもらうと同時に練習問題を解いてもらいます。この予習は基本的に私的時間に行ってもらいます。月に1日だけの業務中の研修では、質問への回答やディスカッション、および練習問題の解答の確認を行います。
※ 予習がすべて私的時間なので、研修の受講は「希望者」だけです。

4月からは第3期を開講予定です。第3期からは過去の実績を踏まえて、6回(半年)で終わる研修コースに変更します。

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

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