ラベル ビジネスモデル の投稿を表示しています。 すべての投稿を表示
ラベル ビジネスモデル の投稿を表示しています。 すべての投稿を表示

2009-04-25

組織はソフトウェアエンジニアに投資できるか

このブログで、日本のソフトウェア技術者は試行錯誤的アプローチで組込みシステムのソフトウェアを作ってきたと書いてきた。それでも組込み機器の品質が保たれているのは、日本人に特有の「あたたかい人間関係の中のやさしい一員」という性質と職人気質、そして品質を心配する強い意識があるからだとも書いてきた。

これらの日本人の特性プラス「何かあったらソフトウェアをすぐ修正」という行動によって、日本の組込みソフトウェアは今のところかろうじて高品質を維持していると思う。しかし、これらの状況は、ソフトウェアの規模が小さいことと、日本のソフトウェア技術者が劣悪な環境を我慢(高収入を求めずにオーバーワークに耐えるということ)しているからまだ破綻していないのであって、システムソフトウェアの規模が増大(例えば実行コード行数ベースで30万行を超えるような規模)し、技術者がその過酷な労働に耐えきれなくなってきたときには、組込みソフトウェアの品質と開発効率が著しく低下し始めるはずだ。

もしも、ソフトウェアに関してどうにもならなくなってしまったら、組織はこの状況を打開するためにソフトウェア開発に対して何らかの投資をするしかない。今回は組織がソフトウェア開発(実際にはソフトウェア技術者教育)に投資できるかできないかの境界について考えてみたい。ソフトウェア開発に関して悪循環が始まっているかどうかの指標は、組織がアウトプットしているソフトウェアが結果的に利益を生んでいるかどうかで簡易的に判断できる。どのプロジェクトも利益を出せていないのなら、悪循環のフェーズに入っていると考えられる。利益が出ている商品、製品、プロジェクトと利益がでていない商品、製品、プロジェクトが混在している場合は必ずしも悪循環のフェーズに入っているとは言えない。

何はともあれ、ソフトウェアエンジニアという末端の立場から離れて、自分が経営者になったつもりでこの後の記事を読んでいただきたい。

なお、ソフトウェアは毎日のソフトウェアの活動で構築される。ツールにノウハウを隠蔽することはできるが、ツールを使いこなせるようにするにはトレーニングが必要になるから、結局はソフトウェアエンジニアに対する教育やマネージメント、インフラに対して投資をしなければ、ソフトウェアの品質や開発効率は上がらない。そう考えると、よっぽどの裏技を使わない限り、ソフトウェア開発に対して何らかの投資をしない組織のソフトウェア品質と開発効率は上がらない。

そして、プロジェクトマネージャーより上の立場の者は、まずは、ソフトウェアエンジニアに対する投資を組織からどうやって引き出すかについて考え、それが無理だと分かったとき、もしくは自分自身がエンジニアに投資を進言する立場にない場合は、組織を見限るか、それとも組織に留まって、どれくらい自己投資できるかどうかという方向に考えを切り替えるべきだと思う。

【組織がソフトウェアエンジニアに投資できるかどうかの境界】

1. 儲かっている会社は投資できる

当たり前だが、潤沢に利益を出している会社はソフトウェア技術者教育やツール、インフラ整備、プロセス構築、技術コンサルの導入などに投資できる。人を動かすだけで一見投資が必要ないように見える社内コンサルのような支援部隊を組織するような場合でも、人材を外から引き抜くのにお金がかかったり、現場から人材を外すことで工数の穴埋めをしなければいけなかったりするから投資は必要だ。

儲かっている会社はいろいろな手を打つ選択肢がある。ただ、気をつけなければいけないのは、ソフトウェアに関する投資ははっきりとした効果が見えにくいから、投資が役に立たなかったとしても口先だけで継続的に組織からお金を引き出そうとする人たちもいるということだ。

でも、儲かっている会社はある程度の無駄をしても原資があれば、何かしらの手を打ち続けることはできる。現在のように不況に陥ってしまうと、儲かっていた会社も利益が減ってしまい、ソフトウェア開発に対する投資を絞ってしまう傾向はあるだろう。

2. 儲かっていない組織でも技術者への評価に差を付けることで投資はできる。

利益がそれほどない組織でも、ソフトウェア開発に投資する意志とある程度の金(例えばソフトウェアエンジニア一人に対して年間最低10万円以上)を捻出できれば、新入社員や将来有望な技術者、今後、利益を生むアーキテクチャ(再利用資産を構築できるアーキテクチャ)を設計できるアーキテクトに対して集中的に投資するという方法はある。

アメリカではプログラム言語の書き方を知っている程度のスキルのエントリーレベルのソフトウェアエンジニアの年収は200万円以下だと聞いたことがある。そこから、スキルがアップするにつれて年収が上がっていく。日本も同じようにスキルがゼロに近い新入社員への報酬を減らしたら、優秀な技術者への投資分の数十万円/人くらいは出せるだろう。

しかし、このやり方は日本人にはなじまない。日本では長い間その組織、業務を経験させ、その時間の中で成長させるというところが多い。あえてこれを教育と呼ばないのは、組織的な戦略を持たずに現場に任せきりで、日々の業務をやらせているだけで技術を引き上げようという意志を持っているプロジェクトは多くないと感じているからだ。だから、組織が意識的に取り組む「投資」とOJTという名の実際には何もしていない状態は分けて考えている。

逆に、新入社員こそ組織として投資しやすい対象であるというのが日本の特徴だ。もっと、やってくれと言われることはあっても新入社員ばかり金をかけて不公平だという中堅、ベテランエンジニアはほとんどいない。

ソフトウェアエンジニアの中に年功序列ではなく、スキルの高さによって評価に差をつけて、実際にサラリーに差をつけて、そこから投資の費用を捻出するという方法は、よっぽど組織の上位層に強い意志と決断があって、目指すべきゴールがはっきりしていないとできるものではないと感じる。

なぜなら、日本人の「あたたかい人間関係の中のやさしい一員」という性質は人と人に差を付けるというのをいやがるからだ。自分もあまり好きではない。テストの点数で評価している訳ではないから、何をもって投資対象として選択されたのかについて技術者の中に疑念が生じると「あたたかい人間関係の中のやさしい一員」という性質を活かすことができない。

だから、技術者に格差を付けて集中的に投資する方法は日本の組織ではなじまない。

3. 自分で自分に投資する

組織がソフトウェアエンジニアに投資しない、選択的でも投資できないのなら、自分で自分に投資するしかない。お金をかけようとかけまいと冒頭のような状況でエンジニアに対して投資する気がないのなら悪循環からは決して抜けられない。(誰かがスキルアップするトレーニングを自分に提供してくれる筈だと考えるのは、そうならなかったときにスキルアップできないのは人のせいだと考え自己努力しなくなってしまうから危険だ)

自分自身の投資の仕方については次回の記事に回すとして、もしも、自己投資に成功してスキルアップした時に起きる問題について触れておこう。

何らかの投資の結果、自分のスキルが向上しソフトウェアの開発効率や品質をアップできるようになるとどうなるか。そもそも、組織が投資してくれないので自己投資しているのだから、スキルアップが成功したとしても、組織貢献を明確に示すことができないのなら、組織からの評価を期待することはできない。

自分のお金や時間でスキルアップして、組織貢献を実現できたのに評価されないかもしれないのだ。評価されないどころか、スキルアップして開発効率や品質向上を実現してできた余裕につけ込まれて他人の開発効率や品質の悪いソフトウェアを何とかする仕事を回されてしまう危険性さえある。

これはやりきれない。頑張ってスキルアップした技術者の努力が報われない社会、業界が発展する訳がない。

でも、現実はこんなもんだ。だから、頑張ってスキルアップできた技術者はその組織で報われないことが分かったとき、例えば組織を出てコンサルタントになり、1 の儲かって利益を出せている会社を助ける側に回ることになる。

そうなると、成長した技術者が去ってしまった組織が潤沢な利益を出せていなかった場合は、さらにソフトウェアの開発効率が悪くなり、品質も悪化し、残った技術者が残業することでしか対応できなくなる。

この論理だと、ソフトウェアエンジニアは自己投資でスキルアップしても報われないから、自己投資しないでじっとしていた方がいいのかということになってしまう。

そんな筈はないから、こう考えるしかないと思う。

組織がエンジニアに投資をしないのなら、エンジニアは自己投資してスキルを上げ、スキルアップしたことでソフトウェアの開発効率と品質を高め、顧客満足が高まったことに対して満足を感じるようにする。顧客満足を高めたことで自分のモチベーションを保ち、顧客満足を高めることに貢献したことを組織に示し評価を得、同じことを他の技術者もできるようにするには投資が必要であると説く。

4.  ソフトウェア開発やソフトウェアエンジニアに投資しないという選択

組織がソフトウェア開発に投資しない、技術者も自己投資しないとう選択肢はないのか。ないことはない。以下のようなケースが考えられる。

a) 投資せずに技術者に負担を強いる。
b) ソフトウェア部品を外から買い自組織では作らない。(サプライやにaを強いるか、逆にソフトウェア部品の価格をつり上げられるという問題あり)
c) 安い海外の労働力にシフトする。(「あたたかい人間関係の中のやさしい一員」という特性は使えない)
d) ソフトウェアでは勝負せず、真似できないハードウェア技術で勝負する。

以上、組織もエンジニアに投資を行い、エンジニアも自分自身に投資をし、投資の結果、ソフトウェアの開発効率と品質が上がり、顧客満足が高まり、それが自己満足につながって、組織にもその成果を認めエンジニアを評価し、投資の効果を確認するのが一番いい。それができないのならソフトウェアエンジニアは幸せにはなれないように思う。

次回は、お金をできるだけ使わないでソフトウェア技術者に対する投資をする方法について書こうと思う。
 

2006-12-09

MATLABのビジネスから見る知的生産性とは

MATLAB というツールをご存じだろうか? MATLAB とは MATrix LABoratory の略で MathWork 社が市販している計算技術用ソフトウェアのひとつである。日本ではサイバネットシステム株式会社が販売代理店となっている。

12月7日に 毎年恒例の MATLAB EXPO 2006 が東京プリンスホテルパークタワーで開催された。

MATLAB EXPO に行くといつも不思議に思うのはどうして一つの製品とそれにまつわるサードパーティだけの資金でこんなに派手な展示会ができるのだろうという疑問だ。

MATLAB EXPO 2006では、ランチボックスの券が配られていたし、講演を聴いたり、サードパーティのブースに立ち寄ってポイントを集めると帰りに抽選ができ、マウンテンバイクやニンテンドウDS Lite などが当たる。はずれても500円のクオカードがもれなくもらえる。他の展示会と比べてもかなりリッチな感じがする。

MATLAB のビジネスがなぜリッチなのかは後で触れるとして、MATLAB EXPO 2006 で MATLAB と Simulink をそれぞれ1時間ずつさわる機会があった。

簡単な例題をMATLAB と Simulink を使い、インストラクターの指示に従いながらノートパソコンで実際にやってみるというトラックだ。

MATLABの演習トラックの例題は、excelシートに格納されたいろいろな周波数が混在した信号のデータ列を読み込んで FFTをかけて、パワースペクトルを表示させて信号の周波数特性を眺めてみるというものだった。

この例題を通して 分かったMATLAB の特徴とは次のようなものだ。
  1. データは何も指定しなければ double 型で読み込まれる。(インストラクターはMATLABは通常のプログラミング言語のようにデータ型を指定する必要がないと言っていたが、正確にはデフォルトで double型になるということ)
  2. MATLABはBASICのようなインタプリタ型であり、コマンドラインから入力した命令を1行ごとに解釈し実行する。
  3. いろいろ試行錯誤してうまくいったら、プログラムファイルに実行したコマンドをコピーして整形し保存するような使い方が一般的。
  4. プログラムファイルにはスクリプトのファイルと関数のファイルの2種類があり、用途によって使い分けることができる。
  5. スクリプトファイルと関数ファイルはテキストなのでライブラリとして公開することが簡単にできる。(利益を考えなくて良い研究者達には便利)
  6. GUIのインターフェースはあらかじめいろいろなものが用意されている。

さて、用意された信号データの周波数成分を調べる演習で感じたのは「これって、自分が excel でやってた手順と同じだなあ」という感覚だ。

信号処理の仕事を生業としていた技術者としては、A/D変換したデータの周波数特性を調べるという作業はなじみが深い。

今回 MATLAB で実施したようなことは、ちょっと面倒だが excelのシート上で計算を行い、最終的に出た結果をグラフ表示させることで同じことができる。じゃあ、なんで MATLAB EXPO がこんなにリッチなのか。それは、MATLAB のパッケージ力と simulink のコンビネーションが強力なのだ。

MATLAB と Simulinkのコンビネーションが利益を生み出すしくみについては後で触れるとして、次に、Simulink の例題を行った。Simulink では MATLABで作成したコンポーネントをワークスペースに配置し、コンポーネント同士を結線して必要なシステムを構成していく。コンポーネントは分野ごとにライブラリが用意されており、自分でコンポーネントをわざわざ作らなくても大抵のことができてしまう。ただ、特定の分野によって必要なライブラリをパッケージにした商品が別売りされておりこれらのパッケージを売るサードパーティの会社がたくさんある。(ここに MATLAB EXPO がリッチである秘密がある)

演習では、SIN波を発生させて、スコープで眺めたり、ノイズを混入させた音声信号にフィルタをかけ、FFTを行ってパワースペクトルを取り、生波形を表示させながらフィルタの効きを見たりした。

MATLAB を使うとローパスフィルタの設計も簡単にできる。たとえば、カットオフ周波数0.4Hz、次数7、通過帯域リップル1dB、遮断周波数30dBの仕様を満たす楕円フィルタを設計したいとしたら、

>> [b,a] = ellip(7, 1, 30, 0.4)

と打ち込めば、b=分子係数と a=分母係数が求まる。このフィルタの周波数特性をグラフに表示させるとあら不思議、狙った通りの特性がでている。

さて、ここからが本論だ。

信号処理系の組込みソフトエンジニアは、MATLAB と Simulink がいとも簡単にやってのけるこのようなフィルタ設計をどうやってやって設計してきたか。

まず、前提条件として8ビット、16ビットの汎用的なCPUで、double の演算をバシバシ使うフィルタを設計したらまず先輩から「バカ」と言われる。C言語で書いた浮動小数点の演算をアセンブラのコードに落とすとどうなるのか見たことがあるエンジニアなら分かると思うが、整数演算なら3インストラクションで終わるようなたった一行の処理が、浮動小数点演算では100インストラクション以上かかったりする。

(unsigned short)x = (unsigned short)x /2

と

(double)x = (double)x /2.0

は両方ともたった一行で表される式だけれども、アセンブラにすれば上は汎用レジスタに格納して右に一回シフトして終わり。ところが下は延々と処理をこなさないと答えがでない。

要するに浮動小数点の演算は CPUに負荷をかけるし、組込みシステムのCPUはフィルタ以外にもやらなければいけない処理がたくさんあるので、組込みソフトエンジニアはできるだけ整数演算で目的の周波数特性に近い特性が得られるようなフィルタを設計する。

このようなフィルタは基本的な設計の指針はあるものの、最後は組込みソフトエンジニアが試行錯誤で作り上げることになる。組込みソフトエンジニアが要求と制約条件をすり合わせて最適解を求めるのだ。

MATLAB と Simulink がいとも簡単に目的の周波数特性のフィルタを作り上げることができるのは、PCの能力が格段に上がっているからだ。昔なら大学の計算機センターくらいでしかできなかった計算を今ならパソコン上で待ち時間なしで実行できる。

MATLAB と Simulink には上記のような試行錯誤で作り上げる職人芸のような要素はない。MATLAB と Simulink で作るモデルは MDD(Model Driven Design)で言うところの PIM(Platform Independent Model)になるのだろう。ただ、負け惜しみ的な気持ちも含めて言うと、プラットフォームに依存していないといっているのは、非常に高性能なプラットフォームを想定していて、かつ、データ型はデフォルトで double 型にしているからPIM(Platform Independent Model)だと言えるのであって、MATLAB と Simulink で作ったモデルは(コストアップをともなわずに)必ずしも組込みシステムに実装できるとは限らない。

コストアップをともなわずにと注釈を入れたのは、DSP(Digital Signal Processor)を使ったり、FPGAのIP(Intellectual Property:知的財産)に落とし込んでしまえば実装が可能なところまで実装技術が進んでおり、コストを気にしなければPIMはPSM(Platform Specification Model)に変換できる世の中になっているからだ。しかし、多くの場合このようなアプローチはコストアップがともなう。でも、MATLAB と Simulink を使って作ったモデルが商品の価値となり、コストアップとその価値のトレードオフの結果がユーザーに受け入れられるのであれば問題ないし、職人芸で作り上げるコンポーネントよりも早く開発でき品質が高いのであれば、ツールやライブラリが高かったとしても最終的にはペイできるかもしれない。

ところで、Simulink と非常に似ているツールでナショナルインスツルメンツ社の LabVIEW というものがある。LabVIEW も Simulink と同じで、豊富に用意されたコンポーネントをつなぎ合わせて、あっという間にカスタマイズしたオシロスコープなどができてしまう。

MATLAB , Simulink にあって、LabVIEW にないもの、それは研究者に対する配慮ではないだろうか。MATLAB , Simulink は自然科学の研究者にとってとても有効なツールだと思う。過去の研究者が発表した理論式を組み合わせたり修正したりして、まだ未着手の分野の対象から取り出したデータに適用して、グラフィカルに表示させれば論文用の図があっという間にできてしまう。

コンポーネント化された知見を組み合わせるか、モディファイするか、パラメータを変えるかして、未開拓の分野の問題を解決する実験をパソコン上でシミュレーションをし、よさげな結果がでたらグラフィカルに表示して論文にする。うーん、こんなおいしい話はない。(いずれにせよ、科学技術の研究とはそういうものかもしれないが・・・)

そして、新しくできた知見はパッケージにして売り出すこともできる。ただ、ひとつ問題なのは、MATLAB , Simulink で作ったモデルは、強力な性能のCPUと浮動小数点演算によって裏打ちされたPIMであり、ひ弱なCPUと整数演算と限られたメモリいう制約条件を持つシステムに実装するには、また別の組込み技術が必要になるということだ。(どんな技術が必要かは『組込みソフトエンジニアを極める』を参照されたし)

しかし、そうはいうものの、CPUの性能は常に向上し続けており、メモリの価格も安くなっている。分野や用途によっては、研究者が考えた新しいコンポーネントを人の手を介すことなく製品に組み込むことも可能になってきた。

このことは MATLAB , Simulink が、研究者と開発現場のエンジニア、科学技術を必要としている企業の橋渡ししているとも言える。個人的な偏見かもしれないが、研究者と現場のソフトウェアエンジニアは仲が悪い。なぜなら、浮動小数点演算に象徴されるように、研究者は組込みソフトの開発現場の制約条件を考えてくれていないという思いが技術者サイドにあるからである。

しかし、『組込みソフトエンジニアを極める』第2章 機能分割のハードルを越える p147 図2.23 制約条件をクリアしながら最適化を図る に描いたように、規模が拡大したソフトウェアシステムではもうすり合わせ的な作り方では開発が間に合わないし、品質を確保することもできない。

科学技術をコンポーネント化し組み合わせの部品として使うことができればアドバンテージになりやすい。しかも科学技術の部分は利益を欲しないアカデミアンの研究成果やサードパーティのライブラリを使うこともできる。

でも、コンポーネントの組み合わせだけでは十分に要求を満たせないのが組込みソフトの難しいところだ。グニャグニャしたすり合わせ的な要素は必ずある。そして、そのすり合わせ的な要素が商品の快適性や低消費電力を可能にしていたりする。

MATLAB , Simulink を触ってみて分かったのは、MATLAB , Simulink は知的生産性を高めるための道具として優れているいうことだ。科学技術をパッケージ化し、必要な分野の企業に売る。パッケージ化したコンポーネントはオブジェクト指向設計と同じで、高凝集・疎結合なモジュールとなっているためつなぎ合わせて使いやすい。

このコンポーネントの需要が高めれば、黙っていてもどんどん売れる。科学技術をコンポーネントに隠蔽して商品として売るビジネスモデルは当たれば利益率が良いだろう。

組込みソフトウェア、組込み機器自体は、実は知的生産性の高めることに成功した顕著な例と言える。組込み機器のソフトウェアに知見を隠蔽することができ価値が認められば、製品は黙っていても工場がどんどん作ってくれ、知見は製品に乗ってどんどん売れる。

問題は組込みソフトウェアの規模が大きくなってきたので、組込み機器の内部で組み合わせ用のコンポーネントを使わないと開発効率が上がらなくなってきたということだ。

ところが、組込みシステムに使うミドルウェアは必ずといっていいほどチューニングが必要であり、ポーティングを行うことが多い。これは黙っていてもどんどん売れるという流れではない。知的生産性が悪い。

コンサルティングなども同じだ。人がコンサルテーションによって知見を伝えることができる効率には限界がある。著名なコンサルタントの単価を上げても普通のコンサルタント100人分にすることはできないだろう。

一方、書籍は知見を広めるには非常にいい媒体で知的生産性が高いが、単価が安いので利益率が低い。

でも、MATLAB , Simulink はツールを媒介して、比較的単価の高いパッケージを流通させることができる。だから、MATLAB EXPO はリッチなのだ。

今後、MATLAB , Simulink で作ったコンポーネントが組込みシステムに実装できるかどうかは、組込みアーキテクトが組込みシステムを科学技術が適用される部分と適用されない部分に切り分けて設計できるかどうかにかかっていると思う。

科学技術を適用する部分をパッケージにし、インターフェースを明確にして、システムの制約条件をクリアすることができれば製品の付加価値を高めることにつながる。

科学技術は先人の科学者が何百年もかけて積み上げた知見のたかまりだ。すり合わせて作るソフトウェアには数人のエンジニアの知見しか作り込めないが、科学技術をコンポーネント化して組込みシステムに実装できれば、のべ何百人分もの知見を製品にインプリメントすることができる。

それが他社に真似できないような知見ならさらに競争力は高まる。

ちなみに、MATLAB , Simulink を使わなくても、科学技術を利用する部分を特定しコンポーネント化することができ、制約条件をクリアして実装する技術があれば、付加価値の高い製品を作り上げることはできるので、慌ててMATLAB , Simulink の購入を検討するのはやめた方がいい。