- Published on
Scrapbox: コンピュータはなぜ動くのか 知っておきたいハードウェア&ソフトウェアの基礎
- Authors
- Name
- ryyta
- @fubar1346
第1章: コンピュータの3大原則
- コンピュータの3大原則
- コンピュータは入力、演算、出力を行う機械である
- プログラムは、命令とデータの集合体である
- コンピュータの都合は、人間の感覚と異なる場合がある
- CPU: コンピュータの頭脳であり、プログラムを解釈・実行し、内部で演算を行う
- メモリ: 命令とデータを記憶
- I/O: パソコン本体とハードディスク、ディスプレイ、キーボードなどの周辺装置を接続してデータの受け渡しを行う
第2章: コンピュータを作ってみよう
- 回路図を用いて擬似的にコンピュータを作成する
第3章: 一度は体験してほしいアセンブラ
本章の目標
- 「1と2を加算する」というプログラムを実行したときにコンピュータの内部でどのような動作が行われるかを知る
メモ
- 低水準言語
- マシン語とアセンブラ
- マシン語: CPUが解釈・実行できる言語で、命令とデータをすべて2進数の数値で示す
- アセンブラ
- マシン語の数値が意味する命令に英語の略語を割り当てた言語
- マシン語に変換されてから解釈・実行される
- アセンブラとマシン語の命令は1対1で対応しているため、アセンブラでプログラムを記述することはマシン語でプログラムを記述することと同等で、コンピュータのハードウェアを直接操作する
- オペコード(opecode): アセンブラにおける命令のこと
- オペランド(operand): 命令の対象となるデータのことで、CPUやメモリーの中にあるデータを指定する
第4章: 川の流れのようにプログラムは流れる
- プログラムの流れ
- 順次: メモリに記憶された順序で順番に進む流れ
- 分岐: 何らかの条件に応じてプログラムの流れが枝分かれする流れ
- 繰り返し: プログラムの特定の範囲を何度か繰り返す流れ
- 構造化プログラミング
- プログラムを順次・分岐・繰り返しの3つの流れで記述し、ジャンプ命令を使わないプログラミングのこと
- ジャンプ命令はプログラムを複雑にし、バグの原因になるため、構造化プログラミングが推奨される
第5章: アルゴリズムと仲良くなる7つのポイント
- 問題を解く手順が明確で有限回であること
- アルゴリズムとは「問題を解く手順を、もれなく、文書や図で表したもの。さらにその手順は明確で、有限回でなければならない」
- 勘に頼らず機械的に問題が解けること
- コンピュータが理解できる、機械的な手順でなければならない
- 定番アルゴリズムを知り応用すること
- コンピュータの処理スピードを利用する
- どんなに長くて面倒な手順でも、明確で機械的であるならば立派なアルゴリズムである。コンピュータの処理速度を意識してアルゴリズムを検討する
- スピードアップを目指して工夫する
- アルゴリズムは処理時間の短い方が良いアルゴリズムである
- 「番兵」と呼ばれる目標となるデータを使う方法など、様々な手法を駆使・工夫して短いアルゴリズムを考える
- 数値の法則性を見出す
- 法則を見出すことでアルゴリズムを短くできるし、処理時間も短縮できる
- 紙の上で手順を考える
- まず紙の上に文書や図でフローチャートを書き起こすことで、整理がしやすくなる
第6章: データ構造と仲良くなる7つのポイント
- メモリーと変数の関係を知る
- メモリーは変数を格納するための領域であり、変数はメモリーのアドレスを持つ
- 1個の変数がプログラムにおけるデータの最小単位であり、それが物理的なメモリー領域に対応する
- データ構造の基本となる配列を知る
- 配列は複数のデータを格納するためのメモリー領域をまとめて確保し、全体に1つの名前をつけたもの
- 定番アルゴリズムで配列の使い方を知る
- 定番データ構造のイメージを掴む
- スタック
- データを積み重ねるように格納するデータ構造
- LIFO(Last Infinity, First Out)方式
- キュー
- データを列に並べるように格納するデータ構造
- FIFO(First Infinity, First Out)方式
- スタック
- スタックとキューの実現方法を知る
- スタック
- 配列、スタックポインタ(スタックの最上部に格納されたデータのインデックスを示す変数)、プッシュ関数、ポップ関数で構成
- キュー
- 配列、フロントポインタ(キューの先頭に格納されたデータのインデックスを示す変数)、リアポインタ(キューの末尾に格納されたデータのインデックスを示す変数)、エンキュー関数、デキュー関数で構成
- スタック
- 構造体の仕組みを知る
- C言語の構造体
- 複数のデータをまとめて1つのデータ型として定義するための仕組み
- 構造体のメンバーは、それぞれ異なるデータ型を持つことができる
- リストと2分木の実現方法を知る
第7章: オブジェクト指向プログラミングを語れるようになろう
- 略
第8章: 作ればわかるデータベース
- 既知のことのみかつ基本的なもののみのため、略
第9章: ネットワークコマンドでネットワークの仕組みを確認する
- LAN(Local Area Network): 限られた範囲でのネットワーク。自宅や企業内のネットワーク
- WAN(Wide Area Network): 広範囲でのネットワーク。インターネット。企業同士を結ぶようなネットワーク
- MACアドレス(Media Access Control)
- 48ビットで構成される固有の識別番号
- 上位24ビットがハードウェアメーカーの識別番号、下位24ビットが製品の機種とシリアル番号
- IPアドレス(Internet Protocol)
- 32ビットで構成される識別番号(IPv4の場合)
- 上位桁はネットワークの識別番号(= ネットワークアドレス)
- 下位桁はネットワーク内のホストの識別番号(= ホストアドレス)
- ホストとは通信機能を持ったパソコン、プリンタ、ルーターなどの機器のこと
- ホストアドレスとしては、
00000000
と11111111
は使えない- 全て
0
の場合はネットワークアドレスを表し、全て1
の場合はブロードキャストアドレスを表す
- 全て
- サブネット・マスク
- IPアドレスのネットワーク部分とホスト部分を区別するための情報
255.255.255.0
の場合、上位24ビットがネットワークアドレス、下位8ビットがホストアドレス
- IPアドレスとサブネット・マスクをAND演算することで、ネットワークアドレスを求める
- IPアドレスのネットワーク部分とホスト部分を区別するための情報
- ARP(Address Resolution Protocol)
- IPアドレスからMACアドレスを取得するためのプロトコル
- LAN内のすべてのホストに対してARPリクエストを送信(ブロードキャスト)し、レスポンスがあったホストのMACアドレスを取得しIPアドレスと対応させる
- IP: データの送信者と受信者をIPアドレスで識別し、いくつかのルーターを経由してデータを送るためのプロトコル
- TCP: データの送信者と受信者がお互いに相手の確認を取り合いながら確実にデータを受け渡すためのプロトコル
第10章: データを暗号化してみよう
- 暗号化、公開鍵暗号方式などの基本的な情報のため、略
第11章: そもそもXMLって何だっけ
- 略
第12章: SEはコンピュータ・システム開発の現場監督
- SE
- コンピュータ・システム全体に関わるエンジニアであり、プログラムだけに関わるプログラマとは違う
- コンピュータ・システムとは、様々なハードウェアとソフトウェアを組み合わせて構築されたシステム
- 基本設計や細かな使用決めを行い、プログラミングはプログラマに任せ、SEはプロジェクト管理やソフトウェアの開発管理を行う
- コンピュータ・システム開発の最初(調査分析)から最後(保守管理)まで、すべての工程で作業を行うエンジニア
まとめ
内容的には、みんなのコンピュータサイエンスとか入門コンピュータ科学(Computer Science An Overview)の方が内容の濃さはあった。
ただあまり知識がない段階での入りとしてはこのくらいのライトさがちょうどいい気もするので、初学者にはおすすめかもしれない。
後半の方の章は、ほんとにさらっと表面をなぞる程度だったので上記2冊とかのほうがいいと思うが、1~3章くらいの部分は基礎かつ丁寧にわかりやすく解説してあるので、この書籍で学んでおくといいのかもしれない