それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

読書感想文(コンピュータはなぜ動くのか)

毎日触っているパソコンですが、そういえば仕組みを全然理解していませんでした。CPUって何ぞ? てなわけでコンピュータに関する基礎的な知識が欲しくて読みました。 なるほど~と思った部分をかいつまんでメモします。

1章 コンピュータの三大原則

1.コンピュータは入力、演算、処理を行う

webページ、ゲーム、ワープロetc...多くの処理をこなせるコンピュータだが、行っていることは上記3つのみ。

2.プログラムは命令とデータの集合体

どんなに複雑なプログラムも命令とデータ”のみ”から作られている。 これはコンパイルされたプログラムのファイルの中身が16進数の羅列であることからも言える。

3.コンピュータの都合は人間の感覚と異なる場合がある

全て数値で表すため、直感とは異なる場合がある(色の識別が赤、青でなく255,0,0や0,0,255など)

この三原則さえ押さえていれば最新技術も難なく理解できる。

4章 プログラムの基本の流れ

全部で三種類

順次進行、条件分岐、繰り返し

コードを書く上でフローチャートは超!重要

筆者はフローチャートを1か月かけて作り、コードは2日で書いた経験があるらしい。

5章 アルゴリズムのポイント7つ

特に重要だと思ったのが

3.定番のアルゴリズムを知り、活用する

世の中にアルゴリズムは多数存在する(ユークリッドの互除法、エラトステネスの篩など)が、 それを覚えるよりも、自分で考えることが重要。

例えば12と42の最小公倍数を求めるアルゴリズムを考えた時、そのような定番のアルゴリズムは存在しない。 しかし、最小公倍数が「2つの数字の積÷2つの数字の最大公約数」で求められることを知っていれば ユークリッドの互除法を用いて簡単に求めることが出来る。

なので、問題が出されたときに「どうせ○○法とかいう定番アルゴリズムがあるんだろ?」って思わないことが大事。 ↑これめっちゃ思ってました。一生懸命アルゴリズムを検索して中身読んでも結局理解できず、諦めるという経験を何度もしてます。 まずはどういう手順を踏めば解答が導きだせるか、考える癖をつけたいです。

他には処理スピードを意識する、省ける所は省く、番兵(線形探索で有用)を活用する、フローチャートを書くなど。 少しだけ競プロを齧っていたので、この辺の考え方は共通していて参考になりました。

6章 データ構造と仲良くなる

スタック、キュー、リスト、二分木

飲食店の品出しでスタック方式を使うと怒られるので気を付けよう。

7章 オブジェクト指向プログラミング

クラスの概念

→関わりのある変数と関数を1つのパッケージにして可読性、開発効率、保守性を向上する 大規模プログラムに適した手法と言える。

オブジェクト指向プログラミング

例えばじゃんけんの場合

オブジェクト指向でない場合のコード

/* プレイヤーAが手を決める*/
a = GetHand();

/* プレイヤーBが手を決める*/
b = GetHand();

/* 勝敗を判定する */
winner = GetWinner(a, b);

オブジェクト指向でのコード

// プレイヤーAが手を決める
a = PlayerA.GetHand();

// プレイヤーBが手を決める
b = PlayerB.GetHand();

// 勝敗を判定する 
winner = Judge.GetWinner(a, b);

となる。 現実のじゃんけんではAさんとBさんに属する手が3種類(グーチョキパー)のどれかを示し、判定を行う。 そのためオブジェクト指向プログラムは現実の物と物に注目し、モデリングできる言語である。

8章 データベース

OracleSQLserverMySQLなど DBMSを指示(CRUD)するためにSQLが使用される。 SQLは市販のDBMSほとんどに使用できる。

感想

コンピュータの基本のキの部分を知れてよかったです。 コンピュータやプログラムの核となる三つの原則を理解していれば、より高度な知識や概念も吸収しやすくなりそうな気がしました。

小学生の頃に隠しページ(webページに隠されたリンクやパスワードを探しだして次のページに進む遊び)のサイトでひたすら遊んでいたのを思い出しました。 もっともっとコンピュータに詳しくなるぞ!