Web系エンジニア新卒１年目が入社半年後に感じた、初学者エンジニアに必要なスキルまとめ

# はじめに

文系出身で（ほぼ）未経験から、Webエンジニア職に就職した僕が入社後半年経って感じた、未経験エンジニアが率先して学んでおきたいスキル及び教訓をまとめてみました。
初学者の方の参考になれば幸いです。

## 簡単な経歴

- 4年制文系私立出身（愛知県）
- 学生時代に３か月ほど大学生専用のプログラミングスクールに通う（言語：Ruby on Rails）
- 2022年新卒として都内エンジニア職に就職
- 使用言語：PHP(80%), Javascript(10%)
- 入社前研修としてhtml, cssの課題あり

### 入社後~半年
- 4月~4月中旬：新卒研修
- 4月中旬~6月初旬：オンラインプログラミングスクール研修（PHP)
- 6月中旬：業務スタート

# 教訓：「備えあれば憂いなし」
### 早めにプログラミング言語以外の知識にもアンテナを張っておく

エンジニアを目指し始めたころは、htmlやcssだとか学んで得意げになってた自分がいます。。（コード書いている俺イケてる！的な）
ただ、就職してからはエンジニアとして働くにあたって、プログラミング・コーディング以外で把握しておかなければならないことが山ほどあります。

プログラミングスクールなどではこういったプログラミング以外の知識についてはあまり触れません。なぜなら触れたらきりがないから。

未経験でスタートした場合、プログラミング以外の知識が乏しくても「壁にぶち当たる」とまではいきませんが、少しでもキャッチアップしているだけで（こんなワードやフレーズが存在するんだなあ、とか）初期段階の理解スピードが全然変わってくると感じます。

次からは、そんなプログラミング以外でなるべく早く身に着けておきたいスキルについて、僕個人の視点からご紹介します。

# 初学者エンジニアが率先して身に着けるべきスキルまとめ

|   | 率先度 |
|:-:|:------:|
| プログラミング言語  | :sunny::sunny::sunny::sunny::sunny:  |
| フレームワーク  | :sunny::sunny::sunny: |
| DB操作（SQL）  | :sunny::sunny::sunny::sunny:  |
| 環境構築  | :sunny::sunny::sunny::sunny:  |
| Web界隈知識  | :sunny::sunny::sunny::partly_sunny:  |
| Linux  | :sunny::sunny::sunny:  |
| Git (GitHub)　  | :sunny::sunny::partly_sunny:  |
| タイピング  | :star:  |
|  ホウレンソウ | :star::star::star:  |　     

以下詳細です。

## プログラミング言語
こちらは言わずもがなです。
主に利用していく言語を学ぶと思いますが、ここでの基礎の落とし込みがどれだけできてるかで、その後のフレームワークの学習効率にも差が出ると感じます。

僕の場合PHPでしたが、研修やオンラインテキストだけでは十分に理解できない部分もあったので参考書を購入しました。研修で落とし込めなかった箇所は参考書からキャッチアップしていくといった形でした。

因みにPHPを学ばれてる方やこれから学ぼうと考えている方は、以下の参考書を強くおすすめします！分厚いですが各セクション毎に分けられているので、欲しい情報だけキャッチアップできますし、とても丁寧に書かれています。
#### [独習PHP 第4版](https://www.amazon.co.jp/%E7%8B%AC%E7%BF%92PHP-%E7%AC%AC4%E7%89%88-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4798168491/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1667806054&sr=8-5 "独習PHP 第4版")

## フレームワーク

こちらはプログラミング言語とセットみたいなイメージです。

開発自体が言語単体でおこなうことが少なく、基本はフレームワークを使っていると思います。
学んでいる言語について一通りこなせるようになったら、並行してフレームワークも学ぶとよいです。

### いきなりフレームワークから始めるのはおすすめしない
そんなにないケースだと思いますが、例えばプロダクトの完成を目標にしてRuby on Railsを早々に使い始める、、みたいな。フレームワークから入ると、何がその言語特有の構文なのかだったり、仕組みだったりかがわからないまま進めることになってしまいます。

またプログラミング言語には基礎概念みたいなもの（変数、配列、条件分岐、繰り返し処理など）がありますが、これらの仕組みはどの言語でもほぼ共通です。こういった基礎知識をアバウトにして進めていくと結果成長速度が遅くなります。
ですのでまずは優先して言語への理解を優先してほしいです！

「急がば回れ」ってやつですね！

### 各言語におけるメジャーフレームワーク
調べればすぐに分かりますが、参考程度に。

- PHP : Laravel
- Ruby : Ruby on Rails
- Java : Spring
- Python : Django
- Javascript (Typescript) : React, Vue.js

https://rookie.levtech.jp/guide/detail/147/

## DB操作（SQL)

こちらはバックエンドの方が対象ですが、業務に入ってからはデータベース操作に対する知識がめちゃくちゃ大事だなと感じています。

Twitterのようなアプリケーションなどを作る際にも当然DB操作が必要になってきますし、プログラミング言語もDBからの情報を扱うための構文などあります。
僕や同期もこのDB操作にかなりつまずきました（笑）

SQLのような知識は全てのプログラミング言語に共通なので、意識しながら学ぶだけでも今後が楽になると思います！

https://www.pgls-kl.com/article/article_18.html

## 環境構築

こちらは僕が入社してから一番つまずいたものです。。今でもむずいと感じます。

プログラミング学習の初期段階では、マニュアルみたいなものに沿ってやっていけば意識せずとも、"画面に文字が表示される"といった環境を構築できたと思います。（Progateならすでにできてるみたいな）

実際は自身で仮想環境などを作ったり必要なソフトウェアをインストールしたりと「プログラミング」を動かすまでに準備しなくてはいけないことが結構あります。
しかも例えばPHPにしても環境構築の仕方は色々あります。

そして現場では、実際のプロダクトに利用されている環境（本番環境という）でプログラミングを書くわけにはいきません。
なのでプロジェクト毎に自身のPCで開発環境（ローカル環境という）を構築する必要があり、企業ごとに構築の仕方も違います。

環境構築については僕自身まだまだ知識が浅いですが、PC内で環境を構築する場合に、どのような環境構築の仕方があるのか簡単にご紹介します。

### よくある環境構築

1. 仮想マシンで環境構築
    - VirtualBox
2. コンテナ型で構築
    - Docker
2. クラウド型で構築
    - AWS
2. パッケージソフトを使って構築（初心者向け）
    - XAMPP（Windowsの方）, MAMP（Macの方）

最近ではただプログラミング単体を動かすだけならVSCodeの拡張機能でできたりするので、VSCode様様です。（笑）

また実際の現場における、シチュエーションごとに作られている環境の種類についても触れておきます！

### ざっくばらんな開発環境の種類

だいたい１つのプロジェクトで利用されている環境は以下になります。（もっと細かく環境を構築しているところもあるかもしれません）

<dl>
    <dt>1. 本番環境</dt>
    <dd>実際に我々がアクセスしている環境 (例：https://qiita.com/)</dd>
    <dt>2. ステージング環境</dt>
    <dd>本番環境とほぼ同様の環境であり、本番環境にあげる最終チェックをおこなう場所。</dd>
    <dt>3. 開発環境（社内）</dt>
    <dd>各メンバーがローカル環境（後述）にて開発した内容をアップし、メンバー全員が確認できる環境。</dd>
    <dt>開発環境（ローカル）</dt>
    <dd>プロジェクトにアサインされたメンバーが自身のPCでつくる環境。メンバーはこの環境でプログラミングをおこなう。無事動作の確認やテストが完了したら社内環境やステージング環境にあげていくといった流れ。</dd>
</dl>

いかがでしょうか。環境構築は初心者が最もつまずきやすく、気嫌いする類かと思います。
環境構築に取り掛かる際には、「何のためにこのソフトが必要なのか？」というwhyの視点を持ちながら進めると、理解が早くなるので意識してみてください。


https://japan-design.jp/programming/4059/#rtoc-10

https://www.youtube.com/watch?v=dryV8zU7o9U&ab_channel=SAMURAIENGINEER%5B%E4%BE%8D%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%5D

## Web界隈知識

アバウトで申し訳ないですが、このスキル（知識）は最も幅広いので「界隈」とさせていただきました。こちらに関しては、エンジニアのみならずこの先IT業界で働くのであれば、必須の知識です。
とかいいつつ僕自身も、まだ理解に乏しい言葉がたくさんあります。

ただ業務に携わっていく中で、きちんと「自分の中に落とし込んだほうがいいもの」と「随時調べるとよいもの」とに分かれると感じたので（これも職種によりきですが）、前者に位置づけした早めに押さえておきたいワードをいくつかご紹介します。
ぜひ調べてみてください。

### ネットワーク系
- サーバー
- IPアドレス
- ドメイン
- ホスト
- ポート番号
- http / https
- ssh
- VPN
- Cookie / セッション
- リクエスト / レスポンス
- API

### PC系
- OS
- バージョン
- ミドルウェア

### プログラミング系
- 絶対パス / 相対パス
- キャッシュ
- ログ
- バリデーション
- MVC
- デバッグ

たくさんですね。。多分「いやこれもじゃね？」と言われそうですが、もし加えるべきものがあれば、コメントしてくれると嬉しいです！

また逆に、僕が都度調べるつもりでいるワードに関しては、

- セキュリティ関連用語（マスアサインメント脆弱性など）
- 公開鍵 / 秘密鍵
- ファイアウォール
- 正規表現

などです。
**セキュリティ関連**については近年非常に重要視されているので、プログラミングに慣れてきたあたりから、インプットしていけるよう心がけるといいと思います！

https://www.youtube.com/watch?v=D6s7f8DHd5M&ab_channel=SAMURAIENGINEER%5B%E4%BE%8D%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%5D

## Linux

きましたLinux！といっても初心者の方には、ほんとに:question:かと思います。
ただエンジニアとして働くためには大切なスキルであり、不変のスキルです。一度慣れてしまえば、SQLのように扱う言語がなんで変わらず使用していくスキルになるので、ぜひ調べてみてください。

じゃあ「実際どういった時に使うの？」というと、
- サーバー上のディレクトリやファイルを操作するとき
- ターミナル（CUIツール）ってやつで操作するとき
- 前述した環境構築をするとき

などがあげられるかと思います。
既にターミナルやコマンドプロンプトなどのCUIツールを触ったことがある方は、知っているかもしれませんがcd や lsといったものも、いわゆるLinuxコマンドと言われています。

Linuxのコマンドに関しては種類も用途もかなり多いので、流れとしては
1. 基礎部分のコマンドをしっかり覚える
1. 使えると便利なコマンドを知る
1. システムの設定などを操作するコマンドを知る
1. 権限を操作するコマンドを知る
1. その他のニッチなコマンドを知る

的な感じで進めれば良いのではないでしょうか！
ポイントとしては、そのコマンドで一体何ができるのかをきちんと理解しながら、進めることです。ただマニュアルや記事に載っているからコピペして入力しました、ではなかなか自分の知識としては身につきにくいのではないかと。

感覚ですが、このLinuxの知識が蓄積されていくとPC操作や開発でできることの幅がグンと広がります。いわゆる自走ができてくるようになり、エンジニアとしての自信もついてくるのではないかと考えます。
僕自身も、Linuxの知識についてはまだまだなので少しずつ積み上げていきたいと思います。
がんばりましょう。

https://www.youtube.com/watch?v=91-TmH12o3s&ab_channel=SAMURAIENGINEER%5B%E4%BE%8D%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%5D

## Git (GitHub)

gitは「分散バージョン管理システム」と呼ばれるもので、プロジェクトのソースコードを管理するためのシステムです。gitはチームで開発を進める際にほぼ必須のスキルとなります。
ただ、企業によってはバージョン管理にgitではなく、SVNというバージョン管理システムを利用しているところもあります。

gitを必要なスキルとした理由は、
1. 採用してる企業の割合がSVNより多いこと
1. 世界的には多分圧倒的にgit(GitHubの利用なども含めて）
1. コマンドで操作することがメインとなる（SVNはマウスでぽちぽち操作する）ため、覚えることもそれなりに多い
1. 仕組みが初心者にはまあまあわかりにくい

などです。

またGitHubは世界中のエンジニアや企業が、gitを利用してリモート上でソースコードを管理できるサービスです。
個人開発でも利用できたり、オープンソースコードであれば世界中のエンジニアのソースコードを見ることができたりと、とても便利です。

gitの仕組みやコマンドについては、別記事を作成できたらと考えています。

#### [gitとは - IT用語辞典](https://wa3.i-3-i.info/word12778.html)

https://www.youtube.com/watch?v=yzNPC_QzgFM&list=PLO2rbprf-Znt9FGzYbPhzf_NvzTf0Yloy&index=10


## タイピング

こちらは「ブラウインドタッチタイピング」を身につけれることがゴールかなと思います。

タイピングは正直そこまで重要性は高くありません。遅くてもきちんとコーディングできれば問題ないですし、より大切なのは「正確さ」でしょう。
ただタイピングをきちんとできるようになれば、

- 情報収集
- コーディング、プログラミング
- チャットツール / メール

これらの業務スピードが早くなることは間違いありません。
結果仕事の効率と生産性が上がることになり、より結果を出せる人材に近づけます。(と信じています）

このタイピングのスキルは、エンジニアのみならずPCを利用する全社会人にとって価値あるものになるはずです。そして身につけられれば一生ものスキルです（きっと自然と箸を持つような感覚）。
かくいう私も、ブラインドタッチが出来てるわけではありませんが、練習し始めてからはタイピングをするのが気持ちよくて仕方ありませんし、実際に速くなっています。


そして何より、エンジニアっぽさが出ますよね！！！

タイピング練習のおすすめサイトをご紹介しますので、1日に5分でも1週間に1回でもやってみてください。

1. [マイタイピング](https://typing.twi1.me/)
1. [e-typing](https://www.e-typing.ne.jp/roma/variety/business.asp)
1. [寿司打](https://sushida.net/)


## ホウレンソウ

初心者の時は当然わからないことが多く、何がわからないかもわからない時もあります。その際に、ネットなどで情報収集するだけではなかなか解決できなかったり、理解できないことがあります。
またエラーや課題に遭遇した際に、どう検索すれば欲しい情報が手に入るのかも初めのうちは難しいです。

最終的にはやはり先輩や社内のエンジニアの方々に直接聞いて、解決することがほとんどです。

そして、その際に「ホウレンソウ」をきちんと行うことで、相手の時間・自分の時間を無駄に浪費しないことが大切です。

「ホウレンソウ」については、新卒研修などで学ぶ機会があります。
業務できちんと意識しながらコミュニケーション取れるよう、身につけましょう。

https://tech.drecom.co.jp/communication-tips-for-junior-engineer/

# おすすめサイト＆ツール

僕が個人学習の際に参考にしているサイトやユーチューバーをご紹介します。

[侍エンジニア](https://www.youtube.com/channel/UCCFOQO5aDK0xXam4cUQXT8g)

- web界隈の知識を網羅的に学べる
- 再生時間も10分前後なので気軽に見れる
- アニメーション形式なのでみやすい

https://www.youtube.com/channel/UCCFOQO5aDK0xXam4cUQXT8g

[だれでもエンジニア](https://www.youtube.com/c/KiyotoUniv/featured)

- モチベーションを上げたい方におすすめ
- 現役エンジニアの考え方や視点を学べる
- 動画の再生時間はかなり長いが、伝え方が上手なのでスラスラみれる

https://www.youtube.com/c/KiyotoUniv/featured

[渋谷で働くエンジニア福](https://www.youtube.com/channel/UCqzJi2o7bAPtRD3tTFvi7zA/featured)　（PHP初学者向け）

- テキストで教えられるような投稿機能作成だったりを動画形式で学べるので、耳から情報を吸収したいときに最適
- laravelに関する動画もある
- 何かとわかりやすい解説

https://www.youtube.com/channel/UCqzJi2o7bAPtRD3tTFvi7zA/featured

### より網羅的に学習したい方はUdemyがおすすめ！（動画購入サイト）

IT関連、ビジネス関連、エンジニア関連と豊富な学習動画を購入することができるサービスです。企業の研修に使われている動画もあるほどです。
頻繁に割引キャンペーンをやっているので、だいたい2000円前後で動画を購入できます。

有料なだけに動画内容もかなり優良です。

まずはどんな動画があるか訪れてみて、気になるものがあればぜひ一本でも購入することをおすすめします。

https://www.udemy.com/

# まとめ

以上が僕個人の見解でした。

他にも、
- オブジェクト指向
- 設計
- テスト

などエンジニアとして重要なスキルはあります。

初期の段階では改めて、

1. **プログラミング言語** : プログラミングをするスキル
1. **フレームワーク** : 実務レベルの開発をするためのスキル
1. **DB操作** : データを操作するためのスキル
1. **環境構築** : プログラミングを行う手前のスキル
1. **Web界隈知識** : IT・業務の全体像を把握するためのスキル
1. **Linux** : コンピュータを操作するためのスキル
1. **Git (GitHub)** : ソースコードを管理するためのスキル
1. **タイピング** : 業務・開発スピードを上げるためのスキル
1. **ホウレンソウ** : 円滑のコミュニケーションをとり、5W1Hをきちんと行うためのスキル

この9つのスキルを率先して身につけられるように、積み上げていきましょう！