IT業界入門者が絶対に抑えておきたい基礎知識

## この記事の対象者
この記事の対象は以下のような人です。

- IT業界にこれから足を踏み入れる人
- 大学の情報学部に入ったけどプログラミングに触れたことがない人
- 未経験からエンジニアに憧れてエンジニアに転職したい人



## この記事を読んで得られるもの

上記のような人を対象として、この記事を読めばIT業界の全体像がつかめ、IT業界に足を踏み入れてから何をすればいいのかを書いています。すでにエンジニアとして活躍されている方でも意外と知らない人もいるようなので、これを機に見直してみてはいかがでしょうか。

筆者もたまたま大学受験の滑り止めで受けた某大学の情報系の学部に進学をしたのをきっかけにIT業界に足を踏み入れ、一年半が経過しました。大学に入学したての頃は、右も左もわからず目についたプログラミング言語に触ってみるような感じでした。今では、ありがたいことにIT企業でのバイトを経験することができており、多種多様な技術的な知識もついてきたように感じます。筆者と同じような境遇の人たちの道標になれば幸いです。

## プログラミングを勉強する前に知るべきこと

いざIT業界に足を踏み入れようと思ってもどのような働き方があって、仕事で何をするのか理解していなければゴールの定まってない迷路を延々と進むようなものです。
まずは自分のなりたいエンジニアの種類を定め、その上で入りたいIT業界の企業がどんなものがあるのかみていきましょう。


### エンジニアの種類

エンジニアの種類は実に多種多様で、実際定義が厳密にされてないものも多くあります。ですのでここに載っているエンジニアの分け方が絶対というわけではなく、企業ごと、業界ごとで少しずつ呼び方や定義は異なります。ここでは一般的に初学者が抑えておけば良いものに絞って載せています。

#### フロントエンドエンジニア

フロントエンドエンジニアとはブラウザで見れる見た目部分を作るエンジニアのことです。ホームページのデザインやレイアウトを考えたり、それを実装したりするエンジニアのことを指します。

#### バックエンドエンジニア

バックエンドエンジニアとはフロントエンドエンジニアとは逆にブラウザで見れない部分を作るエンジニアのことです。例えばECサイトの決済の部分や商品の検索の処理の部分を実装するエンジニアです。

#### インフラエンジニア

インフラエンジニアはバックエンドエンジニアよりさらに深い階層を作るエンジニアのことです。例えば、データの通信やサービスの基盤となるような部分を担当します。

#### データサイエンティスト

データサイエンティストはデータ分析をするエンジニアです。与えられたデータを用いてビジネス成功の要因を掴むことを目標にします。

#### AR・VRエンジニア

AR・VRエンジニアはAR・VRを開発するエンジニアです。この分野は比較的歴史が浅く、採用してる企業も限定的です。

#### モバイルエンジニア

モバイルエンジニアはスマホのアプリを開発するエンジニアです。スマホといってもiphoneなのかandroidなのかで必要とされる技術が違うので、モバイルエンジニアの中でもiphoneアプリを作る人とandroidアプリを作る人に分かれることが多いです。

#### 組み込みエンジニア

組み込みエンジニアは家電製品などのハードウェアを動かすためのプログラムを組んでいくエンジニアです。ハードウェアだったり、コンピュータの深いレイヤ層の技術が要求されます。

#### ゲームエンジニア

ゲームエンジニアはゲームを作るエンジニアです。家庭用ゲーム機だったり、webアプリなど様々なゲームの形態があり、それによって使われる技術も様々です。

### IT企業の種類

働き方の種類が分かったところで、これらのエンジニアを雇用してる企業についてみていきましょう。IT業界には沢山の企業がありますが、その中でも大きく3つに分けることができます。それぞれ詳しくみていきましょう。

#### Sier

Sierというのは簡単にいうと受託企業のことです。お客様からの要望を受け、必要なシステムの開発を行います。様々な開発工程を経験できる反面プログラミングと関係のない工程の作業も多いです。

#### SES

SESとは上記のようなSierのような企業に対して、技術者を派遣する企業です。基本的に客先常駐型になるので働いてる企業への帰属意識が薄れがちなことが多いです。

#### web系企業

web系企業はweb系の自社サービスを提供してる企業を指します。例えば、メルカリやクックパッドなどですね。比較的、働き方が自由な企業が多いです。

## いざプログラミングを始めるなら

これで、エンジニアの働き方と雇用する企業の種類を掴むことができました。次はその企業で使われる技術について具体的にみていきましょう。

### プログラミング言語の種類

プログラミング言語には色々な種類があります。自分が何をするかによって適している技術が違うので、なりたいエンジニアの種類に合わせて学習していく技術をしっかりと選定していきましょう。

#### HTML/CSS

これは厳密にはプログラミング言語ではないのですが、web開発の基礎となる技術なのでどの種類のエンジニアでもある程度できることが多いです。フロントエンドエンジニアの業務で多く使います。

#### JavaScript

javascriptはHTML/CSSと合わせて使う、webページの複雑な処理を実現するために使われます。HTML/CSSだけだと基本的にはページ遷移なしで表示を変えることができませんが、javascriptを使うことでそれが可能になります。


#### PHP

PHPはwebアプリケーション開発でよく使われます。主に、webアプリの処理部分で使います。またWordPressというホームページ制作を円滑にするツールの裏側にこのPHPが使われていることからも高い人気を誇っています。

#### Python

こちらはバックエンドエンジニアとデータサイエンスに多く使われます。特徴としては文法が簡単なためプログラミング入門者にもとっつきやすく、拡張性が高いので色々なことができます。最近では、機械学習分野で多く使うことが多いようです。

#### Ruby

こちらもwebアプリケーション開発によく用いられます。言語を開発したのが、日本人ということもあり、日本では高い人気を誇っています。

#### Java

こちらはシステム開発によく使われます。銀行のシステムなど大規模なシステム開発によく使われることが多いです。またandoridアプリの開発にも多く用いられます。

#### c言語

こちらは組み込みエンジニアに多く使われます。初学者にとっては文法が厳密性が高い部分がとっつきにくいらしく、その分マスターできれば確実な技術力がつくので大学のプログラミングの授業で使われることも多いみたいです。

#### c++

C++はc言語の拡張として開発された言語でc言語と同じく組み込みエンジニアによく使われます。モバイルアプリ開発やゲーム開発にも用いられるようです。c言語と共通する部分はあるもののc言語よりも習得難易度は高くなっています。

#### swift

こちらはAppleが主導してる言語で主にIOSアプリ開発に用いられます。IOSアプリ開発には以前まではObjective-Cが用いられていましたが最近では完全にSwiftがメジャーになったようです。
#### kotolin

こちらはJavaから派生して生まれた言語で主にandoridアプリ開発に用いられます。Googleがandoridアプリ開発にKotolinを公式言語に登録して以来絶大な人気を誇っています。


### 開発工程の種類

開発工程には色々な種類があります。基本的にサービスを開発する場合は

1. 要件定義
2. 設計
3. 実装
4. テスト
5. デプロイ
6. 保守

この1~7の工程が存在します。

簡単にそれぞれの工程の役割を説明すると、
まず要件定義では作るものの目的や開発計画について決めていきます、。どれくらいのお金をかけて、いつまでに、どう言ったチームメンバーで、どんなものを作るかを考えます。

次に設計で、定義された要件を満たすように機能要件、非機能要件を決めていきます。作るサービスがどんな機能をもっていてどんな問題を解決するのか具体的に決めていきます。

そして実装では実際にプログラミング言語などを使って、設計通りにサービスを作成していきます。

そして、テストでは実装で作ったものに対して、きちんと設計や要件定義を満たしているかどうかテストをします。

最後に、テストが終わると作ったサービスをデプロイします。デプロイとは作ったサービスを一般のユーザーが触れる状態にすることです。

デプロイが終わると実際に作成したサービスを運用していき、運用していく上での細かい修正や
契約の更新などの保守を行います。

以上が開発工程の基本的な流れです。これらを頭に入れた上で開発工程の種類を見ていきましょう。

#### ウォーターフォール開発

ウォーターフォール開発はSierなどの受託企業で広く取り入れられています。ウォーターフォール開発はその名の通り流れる水の如く、上記であげた1~7の開発工程を上から順にやっていきます。基本的に前の工程の作業が終わってから、次の工程にいくので各工程ごとの品質の担保がしやすいです。ただ作業の遅れや設計の不備などに弱いというデメリットもあります。

#### アジャイル開発

こう言った上記のようなデメリットを解消するために生まれたのがアジャイル開発です。アジャイル開発の基本的な流れは小さい単位で開発とテストを行い、未完成でもユーザーに使ってもらい、フィードバックをもらい改善していくという点です。ウォーターフォール開発との大きな違いはこの小さい単位で開発とテストを行なっていくというところにあります。これにより、顧客のニーズや市場に合わせたスピーディーな開発が可能になるのです。


### 開発でよく使うツール

どの現場においても開発でよく使うツールというのは存在します。使うツールは現場によって様々ですが、ここでは広く一般的に使われているものを存在していきます。

#### バージョン管理

まず紹介するのはバージョン管理ツールです。例えば、サービスを開発するとなった時に顧客のニーズに合わせて変更を行なったが、前のバージョンの方が良かったという状況になったとき、バージョン管理ツールがなければ前回の修正点を手動で戻していくことになります。バージョン管理ツールを使うことでファイルの変更履歴を保存し、履歴中のどのバージョンにも戻れるようにすることができます。

##### Git

バージョン管理ツールとして広く使われているのはGitです。
開発者がリポジトリという情報を格納する場所にブランチというバージョン管理の仕方で変更を管理します。基本的にどの現場でも必須のスキルと考えた方が良いです。gitを効率よく扱うためのGCIツールなども存在します。

##### SVN

中央リポジトリという単一の情報管理場所でバージョンを行うのがSVNです。gitよりも操作がシンプルで使いやすいという特徴があります。機能面ではgitの方が優れているので、近年はgitに置き換えられる立ち位置であまり使われてはいません。

#### プロジェクト管理

開発を進める上で様々な案件やプロジェクトの進捗を管理しないといけません。バージョン管理ツール同様、現場次第でいろいろなツールが使われていますが、現在メジャーなツールに絞って解説していきます。

プロジェクト管理ツールについては数多く存在するので今回は細かい説明は省きます。
以下のようなプロジェクト管理ツールが存在します。

- Trello
- Backlog
- Redmine
- ZenHub

現場によって様々なツールが使われており、比較的操作性の難しくないものが多いので現場に入ってからそこで使われているツールの使い方をマスターすれば良いです。

## プログラミングを始めてから

ここまで読んでくれた皆さんは基本的なIT知識は身につけてもらえたかと思います。ここからは自分の興味のある分野に足を踏み入れてもらい勉強して行って欲しいのですが、プログラミング学習において最も重要なのが、アウトプットです。アウトプットすることによって自分の学びを言語化し、また記事を読んでもらった人からのフィードバックから新たな知見を得られることも多いです。ここではそんなアウトプットのプラットフォームを紹介していきます。

### Qiita

いうまでもなくQiitaです。MarkDown形式で書きやすいのとLGTMをもらえるのでモチベーションを保ちやすいという特徴があります。

### Twitter

twitterはたくさんの人と繋がり情報交換するには最も適切なプラットフォームです。技術系のタグなどもたくさんあり、技術力の高い人もtwitterにはたくさんいるので、活用するメリットは大いにあります。

## 最後に

ここまで読んでくれた皆さんはIT業界で必要とされる基盤の知識は身についてると思います。
エンジニアという職業は営業職や接客業と比べると比較的学習コストのかかる職業だと思います。この記事自体でも分量があったにもかかわらず氷山の一角にすらなってないと思います。その分得られるリターンも大きいので頑張りましょう。