【新人教育 資料】ハードウェア編

# 新人教育 資料 ハードウェア編
## あらすじ
新人がいっぱい入ってくる。新人のレベルもバラバラ。教育資料も古くなっているので、更新しましょう。
どうせなら、公開しちゃえばいいじゃん。という流れになり、新人教育用の資料を順次更新していくことにしました。

※後々、リクエストに応じて更新することが多いのでストックしておくことをおすすめします。

自分は[TEMONA株式会社](http://temona.co.jp/)でCTOをしていますが、頭でっかちに理論ばっかり学習するよりは、イメージがなんとなく掴めるように学習し、実践の中で知識を深めていく方が効率的に学習出来ると考えています。

※他の登壇やインタビュー記事は[Wantedly](https://www.wantedly.com/users/105935)から見てください。

教育スタイルとしては正しい事をきっちりかっちり教えるのではなく、未経験レベルの人がなんとなく掴めるように、資料を構成していきたいと思います。

前回の[【新人教育 資料】UMLまでの道 〜オブジェクト指向編〜](http://qiita.com/devopsCoordinator/items/7d460008177b318129ea)の箸休めにハードウェアの話しです。

## 目次
若干目次がこんな風に固くなっているのは、基本情報とかそういうものにある程度沿った形で説明しているからです

 1. ハードウェア
 - CPU(中央演算処理装置)
 - メモリ(主記憶装置)
 - HDD/SSD(補助記憶装置)
 - 入力装置
 - 入出力インターフェース

## ハードウェア
近頃はクラウドの普及で手頃な開発環境を手に入れるようになりました。私の学生の頃は、開発環境を用意するのにも、高額ですぐに手に入るものではなかったので、バイトでコツコツ貯金をし、貯まったお金を握りしめて秋葉原に通ってなんとか予算内で開発環境を組み上げるなんてことをしていました。

新人に対して、ハードウェアの話をせずとも、ローカルの環境にVirtualBoxを入れて、vagrantやdockerなんかでポチ、ポチすれば開発環境は問題なく作れます。

しかし、ハードウェアの話もなんとなくイメージ出来るレベルまで理解しておいて損はないと思います。

## CPU(中央演算処理装置)
CPUは、コンピューターの頭脳部分にあたります。自作PCでも作らない限り、実際に目にする事はないと思いますが実物は四角いチップです。
実際にはチップケースに収まっていますが、中身は積層で色々な電子部品で成り立っています。
自宅のデスクトップOCなんかの蓋を開けてみても、CPUファンというものが上に覆いかぶさっていて見えないと思います。

|CPU | A製品| B製品 |
|:-----------|------------:|:------------:|
| 型版       |        E5-4603 |     E7-8830     |
| ファミリー     |      Intel® Xeon® E5 |    Intel® Xeon® Processor E7    |
| クロック数     |      2GHz |    2.13 GHz   |
| キャッシュ       |        10 MB |     24 MB     |
| コア数         |          4コア |      8コア      |
| スレッド数         |          8スレッド |      16スレッド      |

### クロック数、コア数
電子工学の領域に足を突っ込んでいる人はクリスタル発信子の周波数みたいなもんて言えばわかってもらえると思うが
大体なイメージを掴めるレベルで説明をします。単位はGHz。1秒間あたりにどれ位の周波数が出るかという単位です。
1GHzは1秒間に10億回ほど、電気信号をやり取り出来る感じの周波数です。

基本的にはGHzが高ければ高いほど、性能（計算能力）が高いというものです。
メインのコアといわれるプロセッサがが1枚であればシングルコア、複数ならデュアルコア、クアッドコア、ヘキサコア、オクタルコアなんて言われたりしますが、今の時代ではマルチコアって複数プロセッサ入っているのね位で認識OKだと思います。
昨今はマルチコアが主流なので、昔ほどGHzが極端に高いものはあまりありません。

1コア(シングルコア)でクロック数2.5GHzよりも
2コア(マルチコア）でクロック数2GHzの方が性能（計算能力）が高いと認識してください。

### スレッド数
計算処理を行う際に同時に処理出来る数の事をスレッドといいます。
スレッド数＝同時処理数と考えてOKです。
計算処理をする際に処理の流れをスレッド（糸）と呼んだりし、プログラム上でスレッドとキーワードが出てきた場合は大抵スレッド処理（並列化処理）の事を指します。

### CPUのよくある認識の違い

- CPUが高いから、必ず早いは間違い
- CPUのあげたら、必ず早くなるは間違い

CPUの計算能力が高くても、CPUの計算能力を使いこなすようにプログラムやアーキテクチャが設計されていなければ
計算能力を使いこなせません。

ここのハードウェアの説明では、説明しませんがCPUの使用率が100%が必ず悪ではありません。

## メモリ(主記憶装置)
CPUが直接アクセス出来る記憶装置の事をメモリ（主記憶装置）といいます。見た目は長細い長方形にチップが乗っているようなものです。
後続で説明をするHDD/SSD(補助記憶装置)とは違い、電源の供給がなくなると内容が消えてしまうような一時記憶装置です。また物理的な磁気の書き込み処理等がないため、高速に動作します。

|メモリ | A製品| B製品 |
|:-----------|------------:|:------------:|
| 容量      |        2GB |     4GB     |
| メモリ規格     |   DDR4 R-DIMM ECC    |    DDR3L R-DIMM ECC    |
| モジュール規格	       |        DDR4-2133|     DDR3L-1600     |

### 容量
メモリを見るべきところはまずはこの容量です。CPUが計算する際に位置的な記憶領域としてメモリを利用します。
容量が多ければ多いほど、CPUが計算する際の一時記憶領域が多くなります。

### メモリ規格、モジュール規格
メーカーなどで決まっているバス（CPUと接続する回線）規格やメモリの大きさ、切り欠きの位置などを表現しています。
対応するCPUやメモリを刺すボードとの規格があっている必要があります。

自作でPCでも作る機会がなければ、大して意識することもないと思うので詳細の説明は省きます。

## HDD/SSD(補助記憶装置)
CPUが直接アクセス出来る主記憶装置に対し、CPUが直接アクセス出来ないものを補助記憶装置とよびます。
補助記憶装置の代表的なものに、HDD、SSD、USBメモリなどがあります。

| HDD | A製品| B製品 |
|:-----------|------------:|:------------:|
| 容量      |        500GB |     1TB     |
| 回転数    |   5400rpm    |    7200rpm   |
| インターフェイス       |        Serial ATA600|     Serial ATA600     |

### 容量
ずばり保存しておける容量。

### 回転数
ハードディスクを分解してみると分かる（昔教鞭をとっていた学校では実際にウォーターカッターで真っ二つにして展示しました）のですが
中はプラッタと言われるディスクと読み込むための磁気ヘッドなどが詰め込まれています。
プラッタを回転させながら、磁気ヘッドを動かく事で、データを書き込んだり、読み込んだりしています。
回転数が早ければ早いほど、その読込などの速度が早くなります。

回転数が高いものの方が高価なため、必要に応じ回転数は選択しましょう。
サーバー等を組む際は大量のファイルを頻繁に読込、書込するような用途を考えているのであれば回転数が高いものを
特に頻繁に読込や書込がなく、保存領域を取りたいのであれば、回転数を下げて浮いたコストの分、大容量のHDDを買うなどの明確に判断をしましょう。

### インターフェイス
HDDを接続するボードに同規格のインターフェイスが用意されているかを確認しましょう。

| SSD | A製品| B製品 |
|:-----------|------------:|:------------:|
| 容量      |        480GB  |     250 GB     |
| タイプ    |   MLC    |    SLC   |
| インターフェイス       | Serial ATA 6Gb/s|     Serial ATA 6Gb/s     |

### 容量
ずばり保存しておける容量。

### タイプ
**MLC**や**SLC**と言われるようなタイプが存在します。
HDDの中身と違い、SSDにはフラッシュメモリという部品で構成されています。

#### SLC
MLCに比べて高速で耐久性が高いが、価格も高い。

#### MLC
SLCに比べて容量当たりの単価が安い。

### インターフェイス
SSDを接続するボードに同規格のインターフェイスが用意されているかを確認しましょう。

### HDDかSSDの選択するポイント
- 耐久性
 - HDDの方が寿命が長い、製品よって違うがSSDは書込回数による寿命制限がある
- 価格
 - SSDの方が高い。SSDを導入する前に、メモリやCPUに投資すべきではないのか、必要性を考える
- 性能と容量
 - HDDの方が大容量、しかし読込速度に関してはSSDの方が早いケースが殆ど、読込と書込が早い方がメリットがあるのか容量が大きい方がメリットがあるのかを考える

補助記憶装置に関しては、構成の仕方により、耐久性の問題や性能の問題に関しては改善余地があるものです。
ここでは説明しませんが、RAID構成などいうキーワードで調べてみると色々出てくるので興味がある人は
ぜひ調べてみてください。 

## 入力装置
一般的に、入力装置といわれれば、マウスやキーボードを指します。
詳細は割愛。

## 入出力インターフェース
その他の機器(マウス、キーボード、モニタなど)と接続するための入出力するアダプタ部分などを指します。
USB2.0、USB3.0、HDMIなど。
詳細は割愛。

## 授業を受け持っていた頃に、なんとなくイメージが湧くように説明していた例
自分が10年前位に、授業でよく例えていた例です。手書きですみませんが。。。
「CPU」は人間の頭で、「プログラム」が腕、「HDD/SSD(補助記憶装置)」が冷蔵庫、「メモリ」がまな板、「データ」が食材、「言語」が包丁。
このような図をホワイトボードに書いて説明していました。

![ハードウェアを理解してもらうのにわかりやすい例](https://qiita-image-store.s3.amazonaws.com/0/74153/a6667f80-783d-36af-116f-05005174e3d3.jpeg "新人にハードウェア周りを教育するための図")


冷蔵庫が大きければ、保存出来る食材の量も大きくなります。
冷蔵庫から早く食材を取り出し、まな板に乗っければ、調理が早く出来るようになります。
すっきりとした頭で、メニューを考え、素早く手を動かせば、調理が早く出来ます。
食材に合わせて、包丁を使い分ける事で、スムーズに調理が出来ます。

食材に対して、まな板が小さかったらのりきらないので、食材を分割し、順番にまな板にのせ加工することになったら
時間がかかりますよね。

なんとなくイメージが掴めましたか？