# 1周目 読み終えた
「コンピューターサイエンス講義」というタイトルよりも、横に少し小さく書かれている「今こそ知っておくべきデジタル世界の基礎知識」の方が内容をよく表している。特にプライバシーとセキュリティについての警句が各所に置かれているので、コンピューターとインターネットに触るのが少し怖くなる
...続きを読むくらいだった。インターネットが怖く思えるのは、最近はすっかり薄れていた感覚で、知らずに麻痺していたのが解けたようだった。
## 14章を読んだ
次にくるものは?
締めくくりの章。ここまで読んでくればおそらくは予想がつくとおり、決して技術の発達によって未来が明るくなるような楽天的な予想をしていない。まだ未解決の問題がたくさん残っている。それらを残したままより良い方向へ進むには無理があるように思える。コンピューターは今のままでも十分面白いものだけど、まだまだ改良の余地はあるだろうし、ここでストップしてしまうようなことは望まれない。そうはあってほしくないと思う。
## 13章を読んだ
プライバシーとセキュリティ
この本では何度もプライバシーとセキュリティについて注意喚起されてきた。コンピューターサイエンスと題している本だが、本当に伝えたいことはコンピューターの細々とした仕組みについてではなく、これらではなかったのかとさえ思える。プライバシーとセキュリティは同一視されやすい。プライバシーが漏洩することは危険でもある。セキュリティーを確保することははプライバシーを守るためにも役に立つ。両者を守るためにも必要不可欠なのが暗号の技術であり、そこに注目している。暗号アルゴリズムの重要性は色んな所で耳にするが、ようやく、初めてその重要性を感覚的に理解できたかもしれない。
## 12章を読んだ
人工知能と機械学習
多くのメディアが賛美する近年のAIに関わる動向について、やはり誇大広告が紛れ込んでいると見る立場のようだ。そうであると分かっていても、これだけ持ち上げられたら無関心を保つことは難しい。中立的でありながら、なんとかうまく溶け込めるようになりたいものだ。短い章ではあるが、ざっくりと現状がどうなっているのかを知ることができた。
## 11章を読んだ
データと情報
検索エンジンから話が始まる。そしてトラッキングに関する警告につながっていく。インターネットでの活動は必ず追跡されている。それはやはりプライバシーの観点から望ましくない。そもそも収集されたデータは何に使われるのだろうかというと、広告のために利用されるのが主で、そのために売買されているようだ。それ以上の悪いことにも利用されている可能性もある。トラッキングから少しでも逃れるために、意識的に対策を行わないといけない。ささやかながら普段の行動を変えることで、できることもある。
## 10章を読んだ
ワールド・ワイド・ウェブ
セキュリティに関していくらか楽観的な自分でも強い不安を覚えるくらいに、Webの負の側面が強調されている。公共の場の無線LANサービスなんかは絶対に使わないでおこうと心に決めた。
いつからか、Webを利用する上でのプライバシーをあまり考えなくなってしまっていた。Webブラウザはほぼデフォルト設定のままで、JavaScriptは実行し放題、唯一入れているプラグインはDuckDuckGoのプライバシーガードのみになっている。一番確実な手段はネットワークケーブルを引っこ抜く、あるいはWi-Fiのスイッチをオフにしてしまうことだろう。それでは不便極まりないので、少しずつ制限を弱めていくと、どこかで妥協点が見つかるはずだ。その妥協点は本当に安全なのかは全くわからない。インターネットに接続している時点で、そうでない場合と比較にならないくらい、コンピューターは危険にさらされている。そんな中でできることなどたかが知れているのではないか、そんな諦めがあった。Webブラウザに対する信頼もある。ここ何年かの間で、Webブラウザはさらに洗練されてきた印象を受ける。きっとこのWebブラウザならそんなに間抜けなことはしないだろうと安心して使っていて、実際に目に見えるような形で問題に遭遇したこともない。昔はもっと懐疑的であった。時代が変わってWebの安全性は少しは改善されてきたのかと思って懐疑心は薄れてきていた。しかし、安全になったようなこと全くないようだった。残念なことだ。
## 9章を読んだ
インターネット
インターネットは重要だ。いくらネットワークの社会インフラが整っていても、コンピューターでそれを活用できなければあまり意味がない。インターネットにつながっていないコンピューターもあまり面白みがない。20年くらい前のゲーム機なんかはネットワークにつながってなくても面白いものではあった。それは、コンテンツがインターネット以外の媒体で提供されているからあまり問題にならなかったのだろう。PCにはコンテンツがほとんど含まれておらず、インターネットから入手することが前提となっていたところがある。今や、インターネットにつながらなければWindowsはライセンス認証すらできなくなっている。もはやコンピューターとインターネットは切り離せないもの考えて良い。
インターネットを支えるソフトウェア技術はTCP/IPであり、重要性が強調されている。ネットワークプロトコルは階層化されている。ある階層のプロトコルはその他については一切関与せずに、愚直に自分のことだけをこなしていく。このモデルは大成功した。今のところほとんど完璧に機能しているとみなしてもよく、裏舞台で実験されていたとしても、表立って新しいモデルに置き換えようという動きはない。TCP/IPについてしっかり学んでおくことはまだ当分の間、必須科目であり続けるのだろう。
## 8章を読んだ
ネットワーク
古来から人力でどうやって遠く離れた場所に情報を伝達してきたか、それから機械を使うようになって、電子を使った手段に発展してきた。ネットワークは技術的な課題だけではなく、個人、企業、政府、その他の団体にまたがって、社会的な課題も含んでいる。特にコンピューターの利用に関わる話題として、無線ネットワークの実現に注目する。携帯電話の利用は当たり前になりすぎて、つながるのが当然のような感覚でいるが、背後では複雑なことが行われていることを忘れないでおきたい。
## 7章を読んだ
プログラミングを学ぶ
JavaScriptとPythonを少しやってみる。意外なことに、これまでになく平凡な内容だった。プログラミングの経験のない人にとっても特別に優れたガイドではなさそうだし、経験者にとっても特別に得るものが多いわけでもなさそうに思えた。もしプログラミングの講師をするなら言語はPythonを選択するそうだ。もし自分が初めてプログラミングの講座を受講するなら、ラズパイで電子工作をPythonで学びたい。Webブラウザの環境よりも遥かにプログラミングをしてコンピュータを操っている実感が得られる。Arduinoでももちろん良い。問題は楽しいと思えるかどうかだ。オンラインコンパイラではプログラムが動作しときの楽しさが激減してしまうのが問題だ。
言語を学ぶだけのか、プログラミングを学ぶのかにより適した材料に違いはあるだろう。Webの偉大さは認識しているつもりだ。それでも、Webプログラミングが最初に学ぶべきものなのかどうかには否定的な立場を取る。JavaScriptが最初の言語として優れているようには見えないというのもある。Pythonが広く利用されているのは、機械学習やその他のAI技術やデータサイエンスなど、そういった技術的な背景があるからであって、Python自体が特別最初の言語に向いているわけでもないように思う。Pythonを学ぶ人すべてがAIやデータサイエンスに関わりたいわけではないだろう。かといって、他に良い言語があるわけでもないので、別にそれで不利益があるわけでもない。
## 6章を読んだ
ソフトウェアシステム
OSとアプリケーション。OSの役割について、なぜ必要なのか、何を行っているのか。汎用化が進んでいる。特殊目的のハードウェアであっても、新たに専用のOSを開発するコストを差し引くと、Linuxなどを採用するケースが多くなってきている。現代普及しているOSは、Microsoftのものを除くと、ほとんどがUnix系列になっている。これは少し寂しい話だ。アプリケーションはWordがよく引き合いに出されてきた。ここではWebブラウザーが取り上げられている。Webブラウザーの役割がOSに近いところがあるからだ。WebブラウザーをOSとするコンピューターシステムのようなアイデアをありがちだが、実現しないのだろうか。ChromeOSの存在が気になる。
## 5章を読んだ
プログラミングとプログラミング言語
アセンブリ言語と高級言語。知的財産権。オープンソースソフトウェア。どれも自分にとって重要な話題だった。まったく目新しい話題であるわけではない。プログラミングを始めてから、少しずつ経験を積むにつれて、最後にはオープンソース、別の言い方をするとフリーソフトウェアにたどり着くのが自然な流れであるように解釈できなくもない。それだけが唯一の正解であるなどとは思わないし、そういう意図で構成された章であるわけでもないだろう。自分の場合にはよく当てはまっているし、それで良かったと思うだけだ。プログラミング言語のようなコアなツールはオープンソースでなければ支持を得るのは難しいという主張には全く同意する。
## 4章を読んだ
アルゴリズム
アルゴリズムは料理のレシピのように例えられることがある。この例えはイメージしやすくて便利なのだが、コンピューターに仕事を依頼するレシピとしては不完全でもある。コンピューターに依頼するときは、料理のレシピのような曖昧な記述は一切許されない、融通の利かないものだ。
線形時間 N の探索と、対数時間 log N の二分探索を比較して、対数時間アルゴリズムがいかに優れているかを明らかにする。線形探索では、データが1000増えれば1000ステップ増加する。二分探索では、10ステップくらいしか増えない。10億増えても30ステップしか増えない。データが多くなるほど対数アルゴリズムの優位性は際立つ。ソートアルゴリズムについてもO(N^2)とO(N logN)では大きな違いが出てくる。最後にP=NP問題について触れられていている。
## 3章を読んだ
プロセッサーの内部
プロセッサーの動作をシミュレートする、おもちゃのコンピューターを使って解説が進められる。アセンブリ言語の経験があるのなら馴染み深いものだ。おもちゃではあっても、その原理は変わらない。フェッチ、デコード、実行の処理サイクルは本物のコンピューターと同じである。本書で強調されていることに、命令もデータも同じようにメモリにロードされる、ストアドプログラム方式の流れを体験できる。プロセッサーの性能は指数関数的に向上していくことが予言されていて、そして真実となった。しかし、物理的には大きな進化を遂げながら、やはりその原理は変わっていない。単純に処理速度を向上させる単純な目標に絞ることができたのも後押しとなったのだろう。性能が上がったことによる恩恵で、単に短時間で計算が行えるにとどまらず、根本は同じことなのだが、コンピューターによっていろんなことが可能となった。この傾向はこれからも続いていくのだろうか。
## 2章を読んだ
ビット、バイト、そして情報の表現
二進数について。なぜコンピューターは二進数を扱うのか。アナログとデジタルの違い。どのようにして写真や音楽や動画をビットで表現しているのか。全く未知の話題ではなかった。ビットやバイトという名称の由来は何なのかなどの豆知識が披露されていて、読んでいて飽きない内容だった。
## 1章を読んだ
コンピューターとは何だろう?
めっちゃ読みやすい。コンピューターの発展の歴史について柔らかく語られている。自動車の基本的な構造が変化していないのと同様に、コンピューターもフォン・ノイマン型のアーキテクチャから変わっていないという対比は分かりやすい。それでいて、性能は1960年代から桁違いに向上している。基本アーキテクチャを変えることもなく、これだけの性能の向上を達成しているのはよく考えると興味深い。PCがどうなっているのか、各コンポーネントの仕組みと役割が解説されている。PC自作派の人にはおなじみだろうけど、最近はパーツで購入して自分で組む人が減ったような気がするので、こういうのも必要だろう。少なくともコンピューターに関わるなら、教養としてでだけなく、実用的な面からも知っておいたほうがいい内容だ。
## 0章を読んだ
はじめに
特にプライバシーの危機が強調されている。あらゆる情報、例えば、ある個人が今どこにいるとか、どんなものを買ったとか、インターネットでどんなサイトにアクセスしたとか、そういうのはすべて記録されている。そして、様々なところで売り買いされたり、悪用されたりする可能性がある。そう聞いてもあまり驚かないのは、感覚が麻痺しているからだろうか。もし、自分一人だけの情報がダダ漏れになっている、とかだと嫌な感じがするけど、世界全員がそうであるというのなら、仕方ないというか、諦めに近い気持ちになる。心理的な対策として、PCに保存されているデータはすべて見られているくらいの気持ちでいて、見られて困るような変なものは入ってこないようにしている。しかし、これはあまり健全ではないし、そういう話でもない。困るのは、本当にセキュリティが必要な、アカウントの認証情報やクレジットカードの情報なんかだろう。これらがダダ漏れになるのは流石に気分が悪い。もっと深刻なのは、セキュリティが脆弱な社会というのは、土台が不安定な上に立っている建物のようで、ちょっとしたことで崩れてしまう危機感すら感じさせる。
## 前書きを読んだ
原題は "Understanding the Digital World" のようだ。本来の対象読者は、エンジニア、数学者、物理学者のような技術的背景を持つ人たちではないと書いてある。コンピューターの専門家向けの本ではないという意味で、教養と呼ぶのは誤解のない良い名前だ。
丁寧に書かれている良い前書きなのだけど、一つだけ気になるのがある。ネットワークを介した攻撃者のことをハッカーと読んでいるが、カーニハン先生が本当にそういう文脈でその単語を使うのかどうか気になって、Google Booksを覗いてみたら本当にhackerと書いているようで、意外だった。