学習中・エンジニアデビューを通じて必要だったこと


## :beginner: はじめに

はじめまして、エンジニア2年目のsatokoです。初案件参画から早くも？ようやく？1年が経過しました。
私と同じように初心者、又は独学でエンジニアを目指している方・奮闘中の方のお役に立てればと思い、振り返りも踏まえて初案件参画までの1年 〜 今日までヒシヒシと感じた｢学習中・エンジニアデビューを通じて必要だったこと｣をこの記事に纏めました。
<h2>:runner_tone1: 学習中・エンジニアデビューを通じて必要だったこと(目次)</h2>

[1.環境構築周りの知識と理解](#1-wrench-環境構築周りの知識と理解)
[2.ショートカットキーとコマンドの網羅](#2-bookmark_tabs-ショートカットキーとコマンドの網羅)
[3.デバッグ機能を使いこなす](#3-bar_chart-デバッグ機能を使いこなす)
[4.Gitの習得](#4-dividers-gitの習得)
[5.質問力を高める](#5-question質問力を高める)
[6.エンジニアデビューまで&デビュー後 共に戦い支えてくれる人の存在](#6-two_women_holding_hands-エンジニアデビューまでデビュー後-共に戦い支えてくれる人の存在)

<br>
まずはプロフィール(経歴)をご紹介します。

### :musical_score: プロフィール
- ザ・文系です
- 趣味ですが音楽活動を続けています
- 前職は販売、管理、接客等をしていました。人と話すのが好きです
- エンジニアを目指すまでは前職の業務でExcelを使う程度のPCレベル
- コーディング〜PHPを前社カリキュラムで半年、その後独学で半年ほど学びました(最初はデザイン系での活躍を目指していたので、バックエンドエンジニアを志したのは独学中です)
- 上記の1年間は中々に大変でした・・・デビューへの道は遠く、案件決定への話が進まないetcで気づけば半年ほど独学状態に
- 一日も早くエンジニアとして現場に飛び込みたかったこともあり再転職活動開始。焦りと熱意を汲み取ってもらい2023年に現社に入社しました
経営陣、エンジニアメンバーのサポートを受け、晴れてSESデビューを果たしました！
<br>


私のようなほぼ独学スタートの初学者は、初案件参画までに何から学べばいいのか、一度は路頭に迷います。

*｢独学 勉強法｣*

*｢(自身の目指す専門言語) 参考書｣*

・・・とりあえずこんな感じでひたすらググって専門言語やエディタの使い方、参考書、実際の動かし方などの情報を得ていきます。
<br>

そこから色々経てついに案件参画！(すっ飛ばしました)エンジニアとしての一歩を踏み出した後にもこれ先に知っとくべきだったな～、大事だな〜ということにたくさん出逢います。色んな意見があると思いますが開発言語の勉強以外で個人的に必要だったことは以下5つ。

### 1. :wrench: 環境構築周りの知識と理解
これはほぼ参画初日から通る必須の門ですね。ベテランの方でも意外に躓くと聴きますし、言語やプロジェクト・現場によって違うので細かいことは割愛しますが

- 使用言語で必要なダウンロード物
- パッケージ管理システム(mac: Homebrew、windows: Chocolatey等)の使い方
- Git, コマンド操作
- コンテナ型仮想化(Docker)とAWSの連携
- 開発をよりスムーズにしてくれるIED(Visual Studio CodeやEclipse)の使い方
https://qiita.com/EasyCoder/items/81cf7674235a7a19d69c#:~:text=IDE%E3%81%A8%E3%81%AF%E3%80%81Integrated%20Development,IDE%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82
この辺りは予習必須です。予習事項は自身でググって確認する程度で進め、現場ごとに違う設定のことは考えても仕方ないので積極的に質問しながら(質問しなくてもいいぐらいのドキュメントがしっかりしている現場に出逢うと感動すると思うので、私もしっかり残していきたいです)、お互いにストレスを減らして初期の山場を超えられるといいですね。

<h3 id="menu2">2. :bookmark_tabs: ショートカットキーとコマンドの網羅</a></h3>
こちらは私が記載した経歴レベルの方だけで大丈夫ですが、この2つはスピーディな開発に欠かせません。案件に入るとわざわざ覚える機会を逃してしまうので、案件参画前に普段から習得することをオススメします

私はUdemy(オンライン学習 セールが頻繁にあるのでその時期をねらっています)で学習しました。
後は実際に現場で使用したコマンドなどはGitHubにメモしたりしています。

<h3 id="menu3">3. :bar_chart: デバッグ機能を使いこなす</h3>
フロント・バックエンドに関わらず、デバッグ機能は使いこなして引き出しを増やした方がいいです。

個人の制作物や教材アプリ等の活用時であれば、ある程度はググッたり質問して解決できるエラーで済むと思います。

しかし、実際現場に出て開発・修正するコードは自分だけでなく現場ごとや今まで携わった人が積み重ねた制作物です。

エラー解決や調査の際に、適切なlogの出し方を判断してデバッグ機能を活用できると非常に役に立ちます。
私はlogの出し方等をググッた程度でデバッグ機能を本格的に使えるようになったのは案件参画後です。開発スピードを上げたり、各処理の発火タイミングの確認やエラー解消に欠かせないため、ここは業務に入る前から確実にコツを掴んでおいた方がいい点かと思います。

```JavaScript
// JavaScriptのデバッグ機能 

$test = '2024-04-20'
console.log('test変数の中身だよ', $test)
// 結果：test変数の中身だよ 2024-04-20

// ブラウザ開発者ツールの「Console」に出力されます
```
```PHP
// PHP(laravel)のデバッグ機能

$test = '2024-04-20'
dd($test);
// 結果：'2024-04-20'

// 処理を止めて変数の中身をブラウザ側に表示します
```
```PHP
// こちらもlaravelの機能例 (SQL文とパラメーター配列の出力をしてくれます)

$test = User::where('group', '=', 'student');
log::info($test->toSql(), $test->getBindings());
// 結果："SELECT * FROM users WHERE group = 'student'" 

// laravel独自のlogファイル(laravel.logなど)に出力されます
```
例としてJavaScriptとPHP(Laravel)のデバッグ機能を書きましたが、ご自身の(目指す)専門言語のデバッグ機能が
- どこに記述すれば正しく機能するのか
- どのタイミングでデバックした処理が発火しているのか
- 記述したデバックがどこに出力されるのか
etc・・・調べて実践してみてください！


<h3 id="menu4">4. :dividers: Gitの習得</h3>
3.と同様、自分一人で管理していた独学時代とは違い、各案件や職場ごとにお作法があるのでどういうブランチわけが主流なのか、リポジトリの概念などは理解しておきましょう。｢プルリク｣や｢マージ｣、｢コンフリクト解消｣等も避けて通れない作業なので、調べたりエディタやAWSなどと絡めて流れを理解しておくと現場で生かせるかなと思います。

Gitはコマンド操作(CUI)でできる方がスピードがあるのですが、GUIは視覚的にわかりやすく初心者の方にもおすすめです。(個人的にもGUIが好き)

Git活用に便利なGUIツール
- Visual Studio Code
- SourceTree

<h3 id="menu5">5. :question:質問力を高める</h3>
開発をしていると分からない・あと一歩が進まないなんてことは毎日のように出てきます。私は人と話すことは好きですが、質問したり相手の話(特に専門的なこと)を理解するのが苦手です。
ですがここは避けて通れないところなので、分からない壁にぶち当たったときは以下を意識しています。(すべてを実践できるよう絶賛奮闘中です・・！)

1. まず全体ファイルや資料で参考にできそうな箇所を検索する
2. ググる
3. 上記を行った上で20分以上解決しない場合はどこで躓いて(現状)、(目的) を頭で整理する(私と同じく頭で整理するのが苦手な方はメモや紙に文字やグラフで簡潔に整理するのがおすすめ)
4. 上司や担当の方に質問する(この時、伝えるのは簡潔に、必要資料やlogは省かず提供すると相手も何回も質問の意図を聴き返さず済む)

3をすることで自分で解決できるヒントが整理できるかもしれないですし、「あれ、どういう内容で質問してる(されてる)んだっけ？」とお互いならないためにも必要作業かなと思います。

質問する相手の時間を取ってしまうので、4の判断タイミングは結構気を使いますよね。早すぎても「調べる気あるのか？」と思われるし、長すぎても「もっと早く聴い(くれ)てたら解決できたのに」なんてことはザラにあります。いい塩梅を一緒に見つけていきましょう〜！

<h3 id="menu6">6. :two_women_holding_hands: エンジニアデビューまで&デビュー後 共に戦い支えてくれる人の存在</h3>
特に私のようにPCを使うのがやっとレベルからスタートする方には正直ここが1番大事だと思います。

*｢エンジニア初学者の9割は挫折する｣
｢独学だけで目指すのは厳しい｣*

といった記事をたくさん見ましたし、実際その通りでした。
2年目でもまだまだポンコツですが、それでも今日もエンジニアとして奮闘できているのは、6.の縁に恵まれたからです。
前社でのカリキュラム勉強時代や独学時から、主人や同じ志を持つ初学者の友人に救われました。
案件参画前からは現社メンバーにも支えられて今の自分があります。
エンジニアを目指したり、エンジニアで居続けると必ずどこかで挫折します。(それは他の職業でも言えることですが)
技術を磨き続けることはもちろん、そういうタイミングが来た時に｢私はここに支えられてるんだ！｣と想える場所を創り続けることが、継続に繋がるのではないでしょうか。
<br>

長文になりましたが最後まで読んで頂きありがとうございました。
エンジニアを目指す(奮闘中の)誰かの心に少しでも光を見いだせたら嬉しい限りです。