【基本情報技術者】情報処理の基礎的な用語をまとめる①

#はじめに
これからエンジニアとしてのキャリアを積んでいく中で、
そもそものプログラミングとは何かという部分も絶対に抑えていないと行けないなと思って記事にしようと思いました。
何かスポーツをやる上で、基本的な体力や持久力が必須なように、
情報処理関連の知識も面接で聞かれても答えられるようにまとめていきます。


##コンピュータ

1. 「複雑な計算」や「情報処理」をする機械のこと
2. コンピュータがやることを書き出したものを「プログラム」という
3. PCやスーパーコンピュータ、サーバーなど、用途によって様々な種類がある
4. 「入力装置」「出力装置」「記憶装置」「制御装置」「演算装置」の5大装置から構成されている
5. 制御装置が他の装置に指示を出すことで、装置同士の連携ができるようになる
7. 制御装置と演算装置は*CPU(中央演算装置)*とも呼ばれており、その性能は「コア数」「スレッド数」「クロック周波数」で決まる
7. 記憶装置には*「主記憶装置」「補助記憶装置」*があり、その中で「主記憶装置」であるメインメモリはCPUと補助記憶装置の仲介役
2. メインメモリを増やすと作業に使用できる領域が広がり、結果としてコンピュータの処理速度が上がる

###CPU

* メモリーやHDD・SSDと並んでコンピューターを構成する代表的なデバイスのこと
* Central Processing Unitの略。別名：プロセッサー
* パソコンには必ず搭載されている
* CPUを製造しているメーカーは、Intel（インテル）とAMD（エーエムディー）が有名
* 制御と演算をする役割

https://www.pc-master.jp/words/cpu.html

####レジスタ

CPU内部の記憶装置のこと
https://wa3.i-3-i.info/word1518.html


| CPU | 性能 | 料理で例えると |
|:-:|:-:|:-:|
|コア数| コア数が多いと同時に行える・処理作業の数が増える|シェフの人数|
|  スレッド数|  １コアあたり２スレッドなら２つの仕事を同時に処理できる | シェフが持つフライパンの数  |
|クロック周波数 | 	数値が高いと同じ時間により多くの処理が行える | シェフの動きの速さ  |   

		
###ハードウェア

* 目で見ることができ、手で触ることができるコンピュータ関連のもの
    * ex.パソコン本体、CPU,めもり、電源

###ソフトウェア

* 目で見ることはできず、 手で触ることのできないもので、コンピュータ装置に関連の形のないもの
    * ex . アプリ、OS

####OS
1. Operating Systemの略
1. システム全体を管理し、さまざまなアプリケーションソフトを動かすための最も基本的なソフトウェアのこと

https://www.4900.co.jp/smarticle/7128/

##WEBブラウザ

1. インターネットを閲覧するためのツールのこと
2. WEBサイトが表示されるまで
    1. URLにリクエスト
    2. DNSサーバーにリクエスト  
    3. WEBサーバーにリクエスト
    4. ブラウザに表示

##サーバー

* 利用者の要求（リクエスト）に対して、それに応答したデータを提供するコンピュータやプログラムのこと

###DNSサーバー

* ドメイン名とIPアドレスを変換する仕組みを提供するサーバー

https://www.ntt.com/bizon/glossary/e-d/dns-server.html


####nginx

> フリーかつオープンソースなWebサーバである。処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAPのリバースプロキシの機能や、ロードバランサ、HTTPキャッシュなどの機能も持つ。

https://ja.wikipedia.org/wiki/Nginx


https://qiita.com/riita10069/items/5d36dfeb756e3b6c4978#%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B


##通信プロトコル

* 通信する上でのルール・約束ごとのこと
* 「TTP」や「VoIP」や「PPP」など、いろいろなお約束事がある

https://wa3.i-3-i.info/word1254.html


##プログラミング

* コンピュータに命令を出すこと
* プログラムを作っていくこと
* コンピュータにさせる処理を、順番に書き出したもの
* プログラムとは「コンピューターに対する指示書」
* 一つひとつの支持をコマンドという

https://coeteco.jp/articles/10325

###コンパイラ言語

* 一度にすべてのコードを翻訳してからコンピュータに伝える
* プログラムの中身を最初に全部まとめて、人が分かる言葉（人間語）からコンピュータが分かる言葉（機械語）へ翻訳してから動かすことになるプログラミング言語のこと
* 実行速度がはやい
* ex.Java，C言語


https://wa3.i-3-i.info/word189.html

###インタプリタ言語

* コードを一行ずつ翻訳してコンピュータに伝える
* 「1行目を翻訳して、実行」「2行目を翻訳して、実行」のように、プログラムの中身を人が分かる言葉（人間語）からコンピュータが分かる言葉（機械語）へ翻訳「しながら」動かすことになるプログラミング言語のこと
* プログラムをすぐ実行できる
* ex. PHP,Ruby,JavaScript

https://wa3.i-3-i.info/word188.html


##アルゴリズム

* 問題を解決するための「やり方」「考え方」のこと
* 基本的な構造
    * 順次構造：並べられた手順に沿って処理を行う構造
    * 選択構造：条件によって処理が分かれている構造
    * 反復構造：一連の処理の流れを繰り返す処理を行う構造
* 代表的なアルゴリズム
    * 線形探索法：目的のデータとの大小を比べることでデータを探し出す方法
    * 二分探索法：配列の先頭から順番に目的のデータかどうかを調べていく方法
    * ソートアルゴリズム
        * バブルソート： 一番右を基準にして、小さい順にデータの並べ替えを行い、整列させる方法
        * 選択ソート：最小値を基準にして小さい順にデータの並べ替えを行い、整列させる方法
        * 挿入ソート：初めに整列済にしたデータを基準にして、
          小さい順にデータの並べ替えを行い、整列させる方法

##データベース

* 顧客データや処品データを保存する場所、大きな箱
* データベース活用のメリット
    1. データの入力ミスの防止
    2. データを共有できる
    3. 大量のデータを蓄積できる
    4. 分析がしやすい
    5. セキュリティの管理がしやすい

##トランザクション

* 分割できない一連の処理のこと
    * ex.銀行振り込みの金額入力〜振込完了までの流れ
    * 成功か失敗かしかない
    * 失敗した場合実行前に戻る

##開発手法

* システム開発の進め方のこと
* 代表的な開発手法
    * ウォーターフールモデル：滝の流れのように、工程を順番に1つずつ終わらせていく手法
    * プロトタイプモデル：システムの試作品を作ると言う手法
    * スパイラルモデル：設計から実装までの工程を機能ごとに繰り返して行く手法
    * アジャイル開発：作りながら考えようという世界観の開発手法
        * スクラム：チームのコミュニケーションに着目した開発フレームワーク
        * リーン：トヨタ生産方式をソフトウェアの開発工程に応用した、開発プロセスから無駄を取り除くことを目的とした手法
        * XP：仕様の途中変更や機能の途中追加などを最初から想定している開発フレームワーク


※随時更新中

####投稿者コメント
上記のことをわかっていなくても、プログラミングはできるし、ポートフォリオも作れると思います。でもサッカーでもリフティングができない選手はいないし、エンジニアにおいても「知ってて当然」のレベルなのかなと私は思います。なのでこのあたりを雰囲気だけじゃなくてしっかり理解していきたいと思います！

####My Profile
プログラミング学習歴4ヶ月目のアカウントです！
プログラミングスクールで学んだ内容や
自分が躓いた箇所等のアウトプットの為に発信しています。
もし、投稿した記事の中に誤り等ございましたら、
コメント欄でご教授いただけると幸いです。