プログラミング言語の経験(4) [プログラマー現役続行]
私自身のMesa言語による開発は、1991年5月にXerox PARCへ転勤して新たなプロジェクトへ従事することにより終わりました。その後のPARCでの2年間は、再びC言語でソフトウェア開発を行っていました。
1993年5月に4年半の米国駐在を終えて日本に帰国した時は、33歳でした。日本に帰国してからは、後にFuji Xerox DocuStation IM200として商品化された製品の開発に従事しました。IM200は、従来のデジタル複合機としてのコピー/Fax機能に加えて、ペーパーユーザーインタフェースによる新たなサービスを搭載した製品でした。
Fuji Xerox DocuStation IM200
当時の富士ゼロックスは、ワークステーション事業から撤退し始めており、ワークテーション開発に従事していた30代前半のエンジニアが集められて、IM200の開発を始めました。この製品は、従来のデジタル複合機のソフトウェアを流用することなく、集められたメンバーですべてを新規にC++言語で開発しました。そして、OSとしてSolaris 2.3を採用していました。
C++言語は、1993年に日本に帰国してから本格的に学び始めました。大学からも含めれば15年間もすでにプログラミングをしていたのですが、オブジェクト指向言語は初めてでした。従って、オブジェクト指向とは何かというところからの学習でした。オブジェクト指向が何となく分かったような分かっていないような状態で最初に直面した問題は、C++言語での実装の隠蔽でした。
その頃は、C言語での開発でも実装を隠蔽する抽象データ型を意識して開発していました。そのため、たとえprivateのフィールドであっても、クラスにフィールドを追加すると、そのクラスを使用しているクライアントのコードをすべてリコンパイルする必要があるのは困るという問題に直面しました。それで、何とかそのようなリコンパイルを回避するようなC++言語の使用方法はないかと考えて、ある方法を思い付きました。そして、その方法ですべてのコードを書くというプロジェクト方針にしました(詳しくは、「API設計の基礎」を参照してください)。
開発メンバーのほとんどが30代前半だったためなのか分かりませんが、かなり楽観的なチームの雰囲気で、発生する問題は全部解決していけば何とかなるという雰囲気でした。(それに加えて、飲み会もかなり頻繁に行ってました。週に2、3回とか・・・)
ある程度開発が進んで大きな問題になったのは、2週に1回のリリース用ビルドが必ず失敗するということです。当時は、継続的インテグレーションという考えはない時代でしたので、全員のソースコードを集めて、2週に1回ビルドして、コンパイルできない状況が繰り返されていました。さすがに何とかしないといけないということで、夜間に自動ビルドをすることにしました。当初は、毎晩、ビルド失敗の連続でしたが、数週間したら安定してビルドできる状態になりました。
さらに開発が進んで、次に大きな問題になったのは、「メモリーリーク」でした。メモリーリークだけでなく、メモリー破壊も含めて何らかの手を打たないと製品としては安定しないことははっきりしていました。それで、C++言語の標準のnew演算子とdelete演算子を全く別の実装に置き換えることで解決を図りました。マルチスレッドプログラミングをしていたので、スレッド単位でのメモリーリークを検出できるようにし、ある程度のメモリー破壊もdelete演算子の呼び出し時に検出するようにしました。
ペーパーユーザーインタフェースではなく、別のサービスも同時に子会社で開発されており、それが1995年末に自治体窓口証明発行システムとしてFuji Xerox DocuStation AS200※が発売になり、翌年にはペーパーユーザーインタフェースを搭載したIM200が発売されました。
※ リコー内でも知らない人が多いのですが、このAS200は、後にリコーへOEMされて「イマジオ 市町村窓口証明システムSG2000シリーズ」として発売されています。
Fuji Xerox DocuStation AS200
私にとっての初めてのC++言語による開発でしたが、振り返ってみるとできていないことも多数ありました。
1996年8月末に36歳で退職するまでの3年間は、C++言語で(マルチスレッド)プログラミングしていたことになります。
1993年5月に4年半の米国駐在を終えて日本に帰国した時は、33歳でした。日本に帰国してからは、後にFuji Xerox DocuStation IM200として商品化された製品の開発に従事しました。IM200は、従来のデジタル複合機としてのコピー/Fax機能に加えて、ペーパーユーザーインタフェースによる新たなサービスを搭載した製品でした。
Fuji Xerox DocuStation IM200
当時の富士ゼロックスは、ワークステーション事業から撤退し始めており、ワークテーション開発に従事していた30代前半のエンジニアが集められて、IM200の開発を始めました。この製品は、従来のデジタル複合機のソフトウェアを流用することなく、集められたメンバーですべてを新規にC++言語で開発しました。そして、OSとしてSolaris 2.3を採用していました。
C++言語は、1993年に日本に帰国してから本格的に学び始めました。大学からも含めれば15年間もすでにプログラミングをしていたのですが、オブジェクト指向言語は初めてでした。従って、オブジェクト指向とは何かというところからの学習でした。オブジェクト指向が何となく分かったような分かっていないような状態で最初に直面した問題は、C++言語での実装の隠蔽でした。
その頃は、C言語での開発でも実装を隠蔽する抽象データ型を意識して開発していました。そのため、たとえprivateのフィールドであっても、クラスにフィールドを追加すると、そのクラスを使用しているクライアントのコードをすべてリコンパイルする必要があるのは困るという問題に直面しました。それで、何とかそのようなリコンパイルを回避するようなC++言語の使用方法はないかと考えて、ある方法を思い付きました。そして、その方法ですべてのコードを書くというプロジェクト方針にしました(詳しくは、「API設計の基礎」を参照してください)。
開発メンバーのほとんどが30代前半だったためなのか分かりませんが、かなり楽観的なチームの雰囲気で、発生する問題は全部解決していけば何とかなるという雰囲気でした。(それに加えて、飲み会もかなり頻繁に行ってました。週に2、3回とか・・・)
ある程度開発が進んで大きな問題になったのは、2週に1回のリリース用ビルドが必ず失敗するということです。当時は、継続的インテグレーションという考えはない時代でしたので、全員のソースコードを集めて、2週に1回ビルドして、コンパイルできない状況が繰り返されていました。さすがに何とかしないといけないということで、夜間に自動ビルドをすることにしました。当初は、毎晩、ビルド失敗の連続でしたが、数週間したら安定してビルドできる状態になりました。
さらに開発が進んで、次に大きな問題になったのは、「メモリーリーク」でした。メモリーリークだけでなく、メモリー破壊も含めて何らかの手を打たないと製品としては安定しないことははっきりしていました。それで、C++言語の標準のnew演算子とdelete演算子を全く別の実装に置き換えることで解決を図りました。マルチスレッドプログラミングをしていたので、スレッド単位でのメモリーリークを検出できるようにし、ある程度のメモリー破壊もdelete演算子の呼び出し時に検出するようにしました。
ペーパーユーザーインタフェースではなく、別のサービスも同時に子会社で開発されており、それが1995年末に自治体窓口証明発行システムとしてFuji Xerox DocuStation AS200※が発売になり、翌年にはペーパーユーザーインタフェースを搭載したIM200が発売されました。
※ リコー内でも知らない人が多いのですが、このAS200は、後にリコーへOEMされて「イマジオ 市町村窓口証明システムSG2000シリーズ」として発売されています。
Fuji Xerox DocuStation AS200
私にとっての初めてのC++言語による開発でしたが、振り返ってみるとできていないことも多数ありました。
- 自動テストを書くこと
- 継続的インテグレーション
- 防御的プログラミング
- 「インタフェース」を用いた設計
1996年8月末に36歳で退職するまでの3年間は、C++言語で(マルチスレッド)プログラミングしていたことになります。
2015-03-05 06:56
コメント(0)
コメント 0