近年ではITに携わる人のスキルセットや情報処理に対する理解も多様化しています。
サーバシステム、クラウドサービス、スマートフォンのアプリ、機器組み込みのプログラムなど、ソフトウェアはあらゆるところで私たちの生活に関わっています。
30年前、コンピュータシステムはもっと簡素で理解しやすかったのですが、システムが複雑化した現代においては、システムの本質を把握することは容易ではなくなっている実感があります。仮想化、分散化、フレームワークの進化、ライブラリの進化、様々な利便化によって、概念化された情報処理の仕組みの中でプロセス的思考に捕らわれてしまい、情報処理の本来の流れがイメージしにくくなっています。
しかし情報処理の基本は、昔からまったく変わっていません。
とくにコンピュータシステムの基本概念、データやアルゴリズムに関する学習をすっ飛ばして現場に長くいる技術者が増えているように思います。それでも仕事ができてしまうのが面白いところですが、そこをすっ飛ばして「できてるからいいじゃん」という考え方では、自分が処理している情報とは一体何であるのかを見誤るリスクが常に伴ってしまいます。
システム開発のメソッドやノウハウ、ベストプラクティスに長けている現場技術者がデータの本質を理解できていないケースに数多く遭遇しました。グローバルでITの進歩は加速し続けていますが、外資系で様々な国の技術者と働いていて見えてくるのは、日本人技術者には専門教育や自主学習を軽んじている傾向があることと、情報処理の捉え方が稚拙である人が多いということです。現場にいるとそれを強く感じます。
とくに日本のITの現場は新旧の社会概念が複雑に絡み合って、自分がやっていることが何なのかについて考える時間がどんどん少なくなり、システムの本質を深く理解するチャンスがどんどん減っている現状を感じ、危機感を覚えます。
ここでは「コンピュータを使ってシステムを作ることって、どういうことなの?」について持論を書きます。システム設計やコーディングをしている時にいつも思い出すことを中心に書き始めていこうと思います。
僕が普段こうしたことを言わない理由には、公的な場所で話す機会があまりないということもありますが、自分で考えて自分なりの答えを見つけることが大事だと思うからです。しかし、最近ちょっと反省しているのは、あまり抽象的なことばかり突き詰めて話しても、理解してくれる人はそれほどいないし、そこは自分にとっての最先端であるということで、過去の経験から現場に紐付いた概論を伝えることをもっとしっかりしないと、その先にある話をしたときに誤解をされてしまったり、理解してもらえなかったりするという事です。ですので、コンピュータシステムの現場でエンジニアリング、プロジェクトマネジメント、システム設計、問題解決、顧客サポート、コンサルティングと多岐に渡る立場を経験してきた僕がシステムというものをどのように捉えているかを伝えるために、実際にITの現場に携わっている方々や、ITに仕事として関わっていない方にもわかりやすいように書いてみることにしました。
情報システムって何?
IT関係の方には常識すぎる内容かもしれませんが、前提知識としてまず情報システムとは何なのかについて書いておきます。ここは個人的にはとても大切な部分です。
初めに答えを書いておきます。
ITシステムは、「データを操作する仕組み」です。
ITシステムは、複数の構成要素や層(レイヤー)で構成されています。
ソフトウェアを動かすことを目的として、その基盤としてOS(オペレーションシステム)があり、その基盤にハードウェアがあります。ハードウェアとは、サーバ機器、ルータ、スイッチ、ハブ、その他なんでも物理的に触れられるものです。こうしたハードウェアたちは、ソフトウェアが無事に動いてくれるために必要なお膳立てとなります。
ハードウェアを動かすためには、ハードウェアそのものや、それを設置する場所、電源や既存のネットワークに接続するための配線、エネルギー源としての電力、冷却するための空気などが必要となります。
ソフトウェアを動かすためには、ソフトウェアの製造(開発)が必要です。
ソフトウェア開発は、それ自体を作ることにフォーカスしがちですが、実はより大きな「情報」というものを取り扱うための様々な手続きを規定するプロセスに過ぎません。つまり、ソフトウェア開発(システム開発)でフォーカスすべきなのは、ソフトウェア(システム)そのものではなく、そのソフトウェア(システム)が処理する対象となる情報の流れになります。
「データの流れを変える」
これが、ITシステムの真髄となります。情報という目に見えないものの流れを計画通りに変えてやることで、利用価値を上げます。これをデータ化といいます。データ化した情報はコンピュータシステムが処理できる形式になってシステムに入力できます。次にそのデータを処理します。それは、河川を流れる水の流れる方向を変えるために川に堤防を作ったり運河を作ったりすることと似ています。ここで大切なのは、どんなに素晴らしい堤防を作るかではなく、どのように水の流れをコントロールして目的通りに水を流すか、ということになります。そして狙い通りに処理されたデータが出力されます。
ITシステムを作るうえでフォーカスする、3つの大切なこと。
- 入力(Input)
どのようなデータをシステムに取り入れるか。世の中の「情報」を「データ化」するという処理を含む。 - 処理(Process)
入力されたデータをどのように流していくのかを規定する。 - 出力(Output)
処理されたデータが入力されたデータから「変化」した結果。この出力に価値をつけるのが一般的。
上記のうちひとつでも誤っていれば、物事は期待通りにいかないのです。
水とデータの違い
情報というものは目に見えるものから目に見えないものまで常にこの世界にあり、世の中の様々な物事の認識の手がかりとして、人々の主観の拠り所となっています。ただし、それらは人間が認識・想像できるものとして存在していますが、コンピュータシステムが理解できるようにはなっていません。
たとえばここに、水があります。この水は、H2Oであり、水素と酸素で構成されています。この水素と酸素のひとつひとつは原子といいます。原子は原子核と電子で構成されています。原子核は核子(陽子と中性子)で構成されています。電子は素粒子の一種で、……
こうした「情報」を「データ」にする処理を「データ化」といいます。
データ化の盲点
さて、ようやく本題に近づいてまいりました。
データ化は、万能とは程遠いものです。データとは、事象のごくごく限られた(たったひとつの)認識の側面をルール化しただけのものにすぎません。それは一眼レフカメラのようなもので、データ化の肝要なところは、情報のどの部分にフォーカスしてデータ化を行うかという点です。
その流れを少し変えてやる仕組みがソフトウェアであり、ソフトウェアを動かすプログラムです。
河川の進路に手を加えるような感覚です。
ソフトウェアには、無から何かを作り出す力はありません。入力があって、出力があります。
ソフトウェアをデザインするということは、入力・出力を規定して、その間の処理を設計することに他なりません。こうしたことを抽象的に捉えることができて初めて、システム設計ができます。
これがプログラムという形でノイマン型コンピュータに実装されているわけですが、この流れは我々人間の考え方とも深く関わっています。
まず初めに、入力(input)において、人間が認識できない情報はデータ化することができない。さらに認識できるものでもデータ化の手法によって、対象の情報は概念化されてしまうので、情報量が制限されてしまいます。この制約を前提にした設計思想を持っていないと、データ偏重主義と言われてしまうかもしれませんね。データは万能ではないのです。
つまり世にある情報をコンピュータに処理させるためには、概念化というプロセスが存在します。ここは現時点で人間によってなされるものです。これをコンピュータにさせようとする試みが、コグニティブという分野になります。しかしながら人間の認識アルゴリズムをコンピュータに再現させるという流れそのものが、元情報からどのようにデータとして必要なものを取り出して、不必要なものを捨てるかという処理です。
認識とはなにか。意識とはなにか。
情報から有意性のあるデータを抽出する処理は、意思によってデータの解釈を独善的に行うプロセスであると言い換えることもできます。
ですので、まずひとつ強く主張したいのは、「デジタル化されたデータは万能ではない」ということです。データは1つの固定された視座から捉えた物事の1側面を、特定の閾値に応じて0か1かに振り分けた結果でしかないということです。
では、万能ではないデータを処理して得られる出力には何の価値があるのでしょうか。それは、深く掘り下げれば出力されるデータには意味はないということになります。出力されたデータには価値の重み付けは存在し得なく、その出力を読み取る我々の脳(意識)にある認識バイアスによって初めて価値を持たせられるということです。
データはデータでしかない、ということです。
ひとつのデータが示す内容によって表されるものは、そのシステムを設計するときの抽象的概念に縛られています。限られた視野の結果でしかないという認識を持っているかいないかが重要だということです。
どんなに複雑化しても、コンピュータが処理しているものは人間にとって補助演算装置でしかないとも言えます。ただの複雑な電卓です。
このようにデータを捉えると、システム設計というものは、世の中に対して非常に重い印象付けをしてしまう可能性のある、責任の大きい仕事です。
リンゴそのものは情報によって構成されていますが、そのリンゴの写真を処理している情報システムにはリンゴの本質を担保させることはできないということです。
この部分を踏まえていないディスカッションを耳に目にするたびに、データ偏重している世の中に危険を感じます。データをいじっても、本来の情報には何も影響しないのです。そこでデータが表すものに固執した話をしていても、結局のところひとつレイヤーの違うところの話をしているだけです。
データ分析からは、当然予想される可能性のある結果しか得られません。あらゆるデータや統計が、物事の一方的な主観でしかないということは、ITのプロであるならばしっかりと認識したうえで仕事をしてほしいものです。
そこには、データ化によって見えなくなっているものがあるということに気が付かないというリスクがありますから。
コメント