ラベル 知的生産性 の投稿を表示しています。 すべての投稿を表示
ラベル 知的生産性 の投稿を表示しています。 すべての投稿を表示

2007-07-29

プロフェッショナルの条件

先日記事の中でピーター・F・ドラッカーの本は斜め読みしにくいと書いた。実際、『マネジメント - 基本と原則 [エッセンシャル版]』
は斜め読みしにくいと思ったが、買っておいてまだ開いてもいなかった『プロフェッショナルの条件―いかに成果をあげ、成長するか』を斜め読みしたら、こっちはすごく読みやすかった。

しかも、書いてあることが逐一納得できる。この本はネタ本としては最適であることが分かったので、これから少しずつ記事の中で小出しにしていきたい。

【ピーター・F・ドラッカー】

Peter Ferdinand Drucker、1909年11月19日-2005年11月11日)はオーストリア生まれの経営学者・社会学者。なお、著書『すでに起こった未来』(原題"The Ecological Vision")では、みずからを、生物環境を研究する自然生態学者とは異なり、人間によってつくられた人間環境に関心を持つ「社会生態学者」と規定している。ベニントン大学、ニューヨーク大学教授を経て、2003年まで、カリフォルニア州クレアモント大学院教授を歴任。「現代経営学」、あるいは「マネジメント」 (management) の発明者と呼ばれる。ドラッカーの著書の日本での売り上げはダイヤモンド社刊行分だけで累計400万部余り。

【『プロフェッショナルの条件』 はじめに より引用】

 今日あらゆる先進国において、最大の労働人口は、肉体労働者ではなく知識労働者である。20世紀の初め、最先端の先進国でさえ知的労働者はわずかだった。全労働人口の3%を超える国はなかった。だが今日アメリカでは、その割合が40%を占める。2020年には、ヨーロッパ諸国や日本もそうなる。このように大量の知識労働者は、歴史上初めての経験である。彼らは生産手段を所有する。知識を所有しているからである。しかも、その知識は携行品である。頭の中にある。

 :

 もう一度繰り返すならば、知的労働者とは、他のいかなる者とも二つの点で大きく異なる存在である。第一に、彼らは生産手段を所有する。しかも、その生産手段は携行品である。第二に、彼ら(そしてますます多くの彼女ら)は、雇用主たる組織よりも長生きする。加えて、彼らの生産手段たる知識は、他のいかなる資源とも異質である。高度に専門分化して、初めて意味を持つ。脳外科医が真価を発揮するのは、脳外科に専門分化しているからである。おそらく、膝の故障は直せない。熱帯の寄生虫にいたっては、手もでない。

 :

 1950年代、60年代のアメリカでは、パーティで会った人に何をしているかを聞けば、「GEで働いている」「シティバンクにいる」など、雇用主たる組織の名前で返ってきた。当時のアメリカは、今日の日本と同じだった。イギリス、フランス、ドイツその他あらゆる先進国が同じだった。ところが今日、アメリカでは「冶金学者です」「税務をやっています」「ソフトウェアの設計です」と答えが返ってくる。少なくともアメリカでは、知識労働者は、もはや自らのアイデンティティを雇用主たる組織に求めなくなっており、専門領域への帰属意識をますます強めている。今日では日本においてさて、若い人たちが同じ傾向になる。

 :

 今や唯一の意味のある競争力要因は、知識労働の生産性である。その知識労働の生産性を左右するものが知識労働者である。雇用主たる組織の盛衰を決めるものも、一人ひとりの知識労働者である。
 これらのことが何を意味するのかが、本書の主題である。・・・・

【引用終わり】

本を斜め読みするときでも、「はじめに」はじっくり読むことにしている。なぜなら、「はじめに」は著者が示したその本のコンセプトであることが多いからだ。『プロフェッショナルの条件』の「はじめに」はハッと思ったのは、21世紀においては知識労働者の割合が40%を超しているというところだ。

コミュニティ活動で組込みソフトエンジニアの教育コンテンツを作る活動をするにあたって、ソフトウェアの世界で技術者教育が大事であることは直感的に分かっている。当然、いい教育を提供するためには費用もかかるし管理工数もかかるのだが、組織内でその費用を確保する際に「それだけの費用をかけるのなら効果についても示せ」などと言われることがある。有効な教育コンテンツを作成することに心を砕いている人は、教育に対する費用対効果を示すことほど難しいことを知っており、「それだけの費用をかけるのなら効果についても示せ」などと言われると「ああ・・・分かってないなあ」と感じる。

しかし、ピーター・ドラッカーが書いているように先進国では労働者の40%が知識労働者であることが認知されていれば、白いキャンバスの状態で入ってきた新入社員に必要な教育を提供することがいかに重要であるのかがわかる。

新入社員・初級技術者への教育の重要性が理解できない理由は体系的な教育、体系的なOJTを実施しなくても、職場で働いていれば必要な技術が身に付くと考えているからに他ならない。

しかし、現在の組込みソフト開発は、20年前の数人のプロジェクト、1年から2年あった開発期間のときとは規模、複雑性からしてまったく状況が異なる。試行錯誤的なアプローチで30人、30万行の組込みソフトウェアを品質よくスケジュール通りにリリースすることはほとんど不可能である。(30人以上のプロジェクトはプロがマネージメントしないと倒れるの記事を参照のこと)

ただ、そうはいうもののビジネス系のソフトウェア開発と違って、組込みソフトの開発では、新しいデバイスを使うときや要素技術的な検討をするときは試行錯誤的なアプローチも必要だ。なぜなら、すでにできあがっているソフトウェアモジュールを組み合わせて商品が作れるような状況では、その組織にしかできないコアな資産があるとは言えず、結局は競争力の弱い製品しか作れないからだ。

だから、新しいデバイス、新しい技術、自分たちにしかない技術を使ったソフトウェアを試行錯誤的なアプローチで作り、再利用可能な資産となるように洗練させるという工程が必要になる。組込みソフトの世界では試行錯誤的アプローチも必要だし、要求を分析してシステムの構造を考えるといったトップダウン的アプローチも必要なのだ。

ところが、その両方のバランスを考えるまでもなく10万行を超えるような組込みソフトを試行錯誤的なアプローチでだけで作りきってしまうプロジェクトも世の中には存在する。このような組込みソフトで起こるバグは非常に見つけにくいし、再利用もしにくい。

そんなプロジェクトのメンバーが、『プロフェッショナルの条件』の「はじめに」に書いてあるように、パーティの席で見ず知らずの人に自己紹介する様子を見ていれば、おそらくほとんどの技術者は「○○株式会社に勤めています」とか「○○株式会社のソフトウェアエンジニアです」と答えるだろう。

自分自身はこんなときには「組込みアーキテクトです」と答えたいと常々考えている。ピーター・ドラッカーが書いているように所属ではなく専門領域を言いたい。その深層には自分は組織に所属していることでステータスを示したいのではなく、専門領域のプロフェッショナルとしてのステータスを主張したい気持ちがある。

そう考えると、技術者個人が勉強するのはパーソナルスキルを高めるためではなく、プロフェッショナルスキルを高めるためということになる。パーソナルスキルを高めることで終わってしまうと「USBコントローラを使いこなしたい」とか「オブジェクト指向設計を身につけたい」とか「UMLを覚えたい」という目標になるが、プロフェッショナルスキルを高めるためと考えると、「顧客満足を高めるために必要な技術はなんだろう」とか「上司を納得させてこの提案を通すためにプレゼンテーション能力を上げたい」といった一段高い視点で考えるようになる。

ピーター・ドラッカーの本を読むということ自体も同じだ。ソフトウェアエンジニアがマネジメントの神様の本を読む必要はないと考えるか、それもと組込みソフトエンジニアとしてプロの仕事をするためには知識労働者がすべきことを学ぶ必要があると考えるのかは、組込み製品開発のプロフェッショナルを目指しているかどうかで変わる。

知識労働者が生産手段を所有し、それが頭の中に入っているとなると組織はその頭の中の知識を表に出して資産化する必要がある。そうしないと、知識労働者が組織を去ると同時にその知識労働者の頭の中にある大事な資産までも持って行かれてしまうからだ。ソフトウェア技術者を代替えが可能な部品のように考えているマネージャはこのことを理解していない。

協力会社の社員が入れ替え可能なように見えるのは、新たにアサインされた代わりの優秀なエンジニアがソースコードに埋め込まれた設計情報を読み取っているか、もしくは再設計しているのかのどちかだ。どちらにしても、無駄な人件費がかかっている。そんな無駄な工数がかかっていても開発費が抑えられているのは、仕事を出しているクライアントの会社の社員よりも何倍も優秀であっても、会社間の上下関係だけで不当に安い賃金でこき使われているからだ。優秀なエンジニアがその能力を正当に評価されていない状況を見るのは辛いものだ。

さて、昨年のソフトウェア品質シンポジウムの講演で ものづくり経営研究センター長 藤本隆宏先生は、「ものづくりとは設計情報の転写である」と言った。(「人工物に託して、設計情報=付加価値を創造し、転写し、発信し、お客に至る流れを作り、顧客満足を得ること」であるという意味。(ものづくり戦略とソフトウェア品質参照のこと)

組込みソフトにおいて、設計情報とは設計プロセスであったり、UMLで示したアーキテクチャであったりする。(ソースコードは粒度の細かい設計情報であり、再利用という観点からすると資産価値は低い)

ソフトウェア技術者がプロフェッショナルスキルを意識していれば、価値の高い設計資産をアウトプットすることに重要性を感じるはずである。

『プロフェッショナルの条件』には、30年以上繁栄し続ける組織は滅多にないと書いてある。知識労働者の寿命はもっと長いので、組込みソフトエンジニアは組織への帰属を意識するよりも、専門領域のプロフェッショナルとしてどう成長すべきかを考えることが大事なのである。
 

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 の購入を検討するのはやめた方がいい。