見出し画像

シアトルで実践する「プログラミング的思考」[8] ~データを表現する(1) デジタル情報として表す

(上の挿絵「お前もだぞ」と書くつもりが「お前だぞ」と間違えて書いて意味不明になってしまいました。できるだけ早く直します。すみません)

コンピューターシステムで問題を解決しようとするときまず必要なのが、その問題に関わるデータをコンピューターが処理できる「デジタル情報」として表すことです。世の中にある様々な物事や概念が、デジタル情報としてどのように表されているかを知る事は「プログラミング的思考」を行うために必要な基礎のひとつです。

なぜデジタル情報として表すのか

そもそもなぜデータをデジタル情報として表すことが望ましいのでしょうか。もちろん、コンピュータが処理できるから、というのが最大の理由ですが、まずデジタル情報の特徴や利点をしっかり理解することが大切です。

伝統的な媒体、例えば紙とインク、化学的な写真フィルム、さらには電気的に記録されたアナログ情報など(磁気テープに録音された音声情報など)、それらの表現方法と比べた時、デジタル情報にはどのような利点があるのかを見ていきましょう。

状態が長持ちする

まず第一に情報の永続性があります。とくに保存する媒体の耐久性が高ければ、半永久的にデータを保存できます。また、データの複製を繰り返し作っても、原則的には内容が劣化しないことはよく知られています。(ただし、ネットワークを介したコピーの場合、劣化の可能性があります。これはコンピューターネットワークの課題のひとつです。)同じ状態を長い間保つことが出来る、これがひとつめの利点です。

柔軟で変更しやすい

次に、デジタル情報はとても柔軟です。紙に書いたり印刷したりした文字や画像などは、書き換えるのが大変です。対して、スマートフォンなどで送信する前のメッセージや、ディスプレイに表示している画像イメージなどは、内容を簡単に変更できます。もちろん銀行口座の残高などの数値情報も簡単に変更することができます。

ただし、この柔軟さが弱点になることもあります。そのデータに誰でもアクセス出来て、簡単に書き換えることが出来るとしたら社会は大混乱に陥ってしまいます。これを理解してこそ、コンピュータのセキュリティ問題と対策を理解することが出来るようになります。

簡単に共有できる

デジタル情報はバイナリー情報として安価で、遠くに、正確に、すばやく送ることができます。電気信号などを使って瞬時に、なおかつほとんど同時に多くの端末に情報を送ることが可能です。コンピューターネットワーキングは、この特徴を効果的に利用する技術です。もっとも身近な例としては、インターネットを介したウェブサイトの閲覧や、オンライン会議などがあります。

簡単に共有できることは新たな問題の原因にもなります。誤った情報や誹謗中傷の内容が拡散されたり、機密情報が洩れて拡散されてしまう問題などがあります。また知的財産などが侵害される問題も同じ理由です。ソフトウェアエンジニアはデジタル情報の利点だけでなく弱点もよく理解しなくてはなりません。

面倒な作業を自動化できる

他にも様々な利点がありますが、最後にデジタル情報はコンピューターシステムによる自動化を可能にする、という点を見てみましょう。これは情報をデジタル情報化することの、究極的な目的だとも言えます。

コンピュータには処理能力がありますが、処理の対象となるものが無ければ何の役にも立ちません。そこで、人にとって煩雑な作業の対象になるものをできるだけデジタル化することで、コンピュータに代わりにその作業をやってもらうのです。

例えば銀行は顧客口座に定期的に利子分の金額を加えるという処理を行うのに、コンピューターシステムを使って自動化しています。これを人の手で行うと大変な労力を必要とします。これは「口座」や「残高」といったデータがデジタル情報として表されているから可能なのです。

このように、なぜ世界の様々な情報をデジタル情報として表したいのかという動機を、しっかり理解することが大切です。では次にデータ表現の基礎について解説します。

デジタル情報として表す

すでにご存知かもしれませんが、デジタル情報は究極的には「0」と「1」の値の連続で表しています。実はごく初期のコンピューターをプログラミングする際は、プログラマも「0」と「1」のふたつの値のみを使ってデータを表していました。ですが技術の発展とともに、より複雑で大量のデータ処理を行うようになり、データ表現も抽象化が進みました。

0と1だけでは面倒過ぎる

技術の進んだ現在ではデータはその値の特徴に応じて「データ型」という種類に分類分けされ、プログラマもその抽象レベルでプログラミングをするようになりました。もう「0」と「1」は使わなくても良くなりましたが、それでも機械のレベルではまだ「0」と「1」が使われます(電子回路のレベルでは「低い電圧」と「高い電圧」などで表されています)。では、コンピュータと人間が同じ情報をどのように異なる方法で表すのかを見ていきましょう。

コンピュータは「0」と「1」で全ての情報を表しますが、この方法をバイナリ(binary)と呼びます。「bi」という接頭語は bicycle (自転車=2輪車) や bilingual (2か国語を話せる人) といった言葉からも分かるように「ふたつ」を意味します。「0」と「1」のふたつの記号(状態)を使って情報を表すのでバイナリと呼ばれます。

一方、人間は「0」と「1」だけでなく「2」や「3」など、10進数で使う10個の記号(0123456789)で数値を表します。それでも、人間が10進法で表す数値はバイナリ(2進法)でも表すことが出来ます。さらにその他、数値以外の情報、例えばアルファベットの「a」はバイナリでは「01000001」で表します。日本語のひらがなカタカナ、漢字なども全て0と1の組み合わせで表すことが出来ます。

このように文字などを数値化することをエンコーディング(コード化)と呼び、エンコードすることでコンピュータでの処理を可能にします。次に、人間が扱うもっと複雑な情報が、どのようにデジタル情報として表されるかを見ていきましょう。

人にとってわかりやすいデータ型

「データ型」とはデジタル情報の「種類」と考えて差し支えないでしょう。すべて0と1から成るデジタル情報ですが、種類別に分けて整理することでコンピュータを人間にとって扱いやすいものにするのです。詳しくみていきましょう。

データ型には、数値や文字などを表す単純なものから、列や行列、グラフや木構造などの複雑なもの、画像や音声などを表す構造など様々なものがあります。さらに人間社会のデータ、例えば「住所」や「銀行口座」、「SNSへの投稿」なども、特定の目的と構造を持つデータ型として取り扱います。そうすることで、人間にとってより直感的なデータの表現になり、設計や実装の際に生産性が上がります。

なぜ生産性が上がるかというと、例えば水の沸点100℃を表したいとして、「100(10進数)」という値を「0」と「1」だけでを表すと「1100100(2進数)」となります。これは人間にとってはとても面倒な表し方になってしまいます。そこでコンピュータが理解できる命令文(インストラクション)に変換する前の段階までは、人間にとって扱いやすい10進数のデータ型を使って「100」と表すのです。その後、機械が理解できる「1100100(2進数)」というフォーマットに変換され、コンピュータで処理することが出来るようになるのです。

データを操作する

ところで多くのデータ型は特定の「操作(オペレーション)」を行うことができます。例えば数値データ型は「足す、引く、掛ける、割る」といった四則演算ができますし。音声データなどはプログラムとデバイスを連係させて、空気を振動させて「音」として「再生する」という操作が出来ます。

ですが、異なるデータ型では目的も種類も異なるので、例えば文字データに対して「掛け算」の処理は行えません。「あ」と「い」という2つの文字を掛け算した答えなど存在しません。同様に、ふたつの曲データを割り算することも意味を成しません。

このように情報を特定のデータ型で表すことで、処理や操作に関してルールを設けることができ、データ処理に一貫性のあるルール体系を持たせることができます。また、誤って意味のない処理を行うことを防ぐことにも役立ちます。間違えにくいことは人間にとっては扱いやすいことになるのです。

この記事が気に入ったらサポートをしてみませんか?