エンジニアになるためのマインドについて

# はじめに
近年、プログラミングスクールの乱立やprogateなどの教材が増えたことでエンジニアに興味を持ったりそういった仕事をしてみたいと感じている人は増えていると感じています。また、実際にエンジニアになった人でも自信が持てず辞めてしまったり、劣等感などの不安を抱いたりしてしまう人は少なくないでしょう。

こちらに実際に挫折した人のデータがあります。

* [プログラミングの挫折率は約90％](https://www.sejuku.net/blog/109190#:~:text=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%8C%AB%E6%8A%98%E7%8E%87%E3%81%AF%E7%B4%8490%EF%BC%85,-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E8%80%85&text=%E3%81%A4%E3%81%BE%E3%82%8A%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%82%92%E8%A1%8C%E3%81%A3,%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82&text=%E3%81%93%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92,%E6%8C%AB%E6%8A%98%E3%82%92%E6%84%9F%E3%81%98%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)

エンジニアになることを挫折してしまう原因は環境や時間、お金、内容が難しいなどさまざまな要因があります。これらを乗り越えるのが大変であることは現エンジニアである私も大変よくわかっております。

この記事がそういった壁を乗り越え、挫折してしまいそうなエンジニアの手助けになればと思います。


# 挫折その１～不向きだと錯覚する～

エンジニアになろうとしたときにほとんどの人はprogateなどの無料で学べるサイトから入ると思います。
そういったサイトで学習していくと
   
* 課題がわからない
* 課題はできるが何に使うのかわからない？
* やりたいことは明確だけど何を学べばいいかわからない
* 言語がいっぱいあってどれを学べばいいかわからない......

などといった悩みが少なからず出てくると思います。
挙げるときりがありませんがこれらを経験した先に見えるものは大体 **”自分にはエンジニアは向いてないのかな？”** になります。

私ですら週一くらいでそういう考えを持ってしまいます。

なぜこう思ってしまうのか分析してみましょう。

## 原因

向き不向きを感じてしまう直接的な原因は

* 解消できないエラーが出てきた
* バグが治らない
* より効率的なコードを他人が書いていた
* 他人のコードが読めない
* 進捗が遅い

などがあると思います。
これらから見るに大元の原因を大きく分けると

* 自分の能力に限界を感じたことによる自分に対しての怒り
* 他人と比較したことによる劣等感

の2つにまとめられると思います。これらはエンジニアに限らず様々な仕事やスポーツ、ゲームなどにも当てはまりますね。

この2つの中でもエンジニアは特に能力の限界を感じやすい職業です。おそらく今まで経験してきた中で最も限界を感じています。

### なぜ能力の限界を感じやすいのか

限界の感じやすさはエンジニアの特性にあります。

エンジニアが度々扱う**プログラミング言語**というものは機械と会話するために作られたものになります。機械と会話といっても

* スマホを使って電話をする
* コピー機を使う
* ゲームをする

など様々な方法がありますが、これらには必ずプログラミング言語が**翻訳者**として仲介をしています。

最も厄介なのは翻訳内容を伝える相手は一言一句のミスも微々たる文法のミスも許してくれません。そのミスをすると必ず難癖付けて翻訳し直しをさせてきます。さらに、翻訳した内容の順序に間違いがあっても融通も利かさずにそのまま実行してしまします。言ってしまえば完全体指示待ち人間です。

こちらにより詳細にプログラミング言語がどういったものか説明しているサイトのリンクを張っておきます。

* [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word1897.html)


人間同士ならなんとなくで会話できるし日本語においては割と文法とか伝える順番適当でも会話になります。でもプログラミング言語はそれを許してくれません。

友人Bさんがいたとして。

自分「これ食べれる？」
Bさん「”食べれる？”じゃなくて”食べ**ら**れる？”な！！」
自分「これ食べられる？」
Bさん「**これ**って何？」
自分「このリンゴ食べられる？」
Bさん「**このリンゴ**って品種何？」
自分「この青森産ジョナゴールドのリンゴ食べられる？」
Bさん「無理」

とか言われたらイライラしますよね。多分縁切りますよね。でもエンジニアはこのBさんと会話をしないとお金がもらえないんです。そのためにBさんがどういう人か、どういう言い方をしないといけないのか知識をつけないといけません。

ここでエンジニアはうまくコミュニケーションできない自分が悪いと思ってしまいます。それによって自分の能力に限界があると錯覚してしまうのです。

ここまでくればどういうマインドを持ってプログラミングをすればいいかわかりますね？

## ~向き不向き~を解決する処方箋

**”自分にはエンジニアは向いてないのかな？”** と思ってしまうことに対するおすすめのマインド処方箋は

* エラーが出ても自分は悪くない！機械が理解しないのが悪い！！！
* 進捗が遅いのは自分のせいじゃない！！機械がなかなか言うこと聞かないのが悪い！！

という**プログラミングに対する他責思考**です。

ちなみに**プログラミングは競争じゃない**ので他人と比べるのはやめましょう。とはいえ後輩のほうが実装が速かったりより良いコードを書いたりすることもありますね。おめでとうございます。たった今あなたはそのコードを見ることでエンジニアとして一つ成長しました。そう思いましょう！！

# 挫折その2~エラーによる詰み~

これはどのエンジニアも経験したことがある内容になります。

エラーが出たが

* エラーログの内容がわからない
* 調べてもエラーログに関する記事が出てこない

こんなこと山ほどあります。
現役のエンジニアでさえ解決できないエラー出てきます。

これに関しては今までどれだけのエラーを直してきたか見てきたかといったところがもろに出てきます。どんなにベテランの人でも一つ一つ積み上げた経験と勘を駆使してエラーを直しています。初学者のころから直せたわけじゃありません。

## エラーを直す手順
ここで大事なのは地道に一つ一つエラーを直して知見を積んでいくことです。この知見を詰むためには必ず自分でエラーを解決するという体験をすることが大事です。
エラーを解消する手順を説明した記事がありますので読んでみてください。
* [エラーメッセージの読み方と対処, 検索や質問の原則](https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5)

とは言えそれでも解決しないことは全然あります。そういった場合のマインドを教えておきます。

## ~エラーによる詰み~に対するマインド処方箋

これに関して大事なマインドは **エラーは友達！敵じゃない！！** ということです。

エラーはあなたが間違ったことをしていることを知らせてくれるとてもいい子です。
赤や黄の見た目＋口調がきついときがありますが悪気があってそうしてるわけではないことを理解してあげないといけません。

もしエラーに気付かないで突き進んでしまうともっと大きなエラーやバグにつながってしまいます。
それを引き留めてくれているのです。

ですので、たとえエラーで詰んでしまっても怒らずにそっとしてあげてください。もしほかに実装する箇所があるなら先に実装進めていったん忘れましょう。
後日見てみると意外と大したことないエラーだったりします。

なんか、夫婦喧嘩のようですね。

# 挫折その3~なんか思ってたんと違う~

これは大いにあり得るし何なら自分も最初思ってました。少しだけ自分の話をします。

### 経験談
私が一番最初に触ったプログラミング言語はC言語というものでとても気難しい奴でした。
それにいざ動いても**Hello World**などのテキストが表示されるだけでした。
自分はもっとイケててカラフルでなんかパパっとゲームとか作れると思ってました。

しかし、いろいろ勉強してく中でHTMLやCSSというものを知り実際に触ってみるとなんかカラフルになるし案外簡単に色を付けれたりすることを知りました。さらに、JavaScriptというものを使えば何やら動きが付けれるらしい。
この時、私はWEBのフロントエンドエンジニアになることを決意しました。

この経験から言えることは何のためにプログラミング言語を学んでいるかよく考えることだと思います。

## プログラミング言語を学習する意味

たいていの人がプログラミングの勉強を始めたときにすることはHello Worldを表示することだし文法を学びます。しかしやりたいことはAIやゲーム制作、WEB制作です。

初学者のうちにありがちな間違いとしてよくあげられるのが言語ばかり勉強して実物を作らないということです。
プログラミング言語が勉強したくてエンジニアになった人なんてめったにいないと思います。何かしらやりたいことがあってその手段としてプログラミング言語を勉強しているはずです。

英語にたとえるとわかりやすいと思います。

Aさんは海外に移住した池と英語は話せません。そこで英語を勉強することにしました。
しかし、英語が完璧に話せない自分はまだ海外に移住してはいけないと思い込んでTOEICや英検を受けてレベルを図ろうとします。
その結果、いい点数が出ずに英語を勉強することをあきらめ海外移住まであきらめてしまいました。

こういった話はよくあるともいます。
ここでAさんがとるべき行動はひたすら英語を勉強するのではなくまず海外に行くことなのに手順を間違えたために目的を達成できませんでした。

ここまでくると解決策は見えてきますね。

## ~なんか思ってたんと違う~に対するマインド処方箋

英語で例を挙げたように持つべきマインドは**学習が途中でもとりあえずものを作る**ことです。

実際に働いているエンジニアはものを作りながらその中で必要になった知識をつけるといった順番で実装していることが多いです。動かしてエラーが出て直してまたエラー出ての繰り返しをしています。

先ほどのエラーは友達敵じゃないというのはこういった手順をとっているときに親切に間違いを教えてくれて新たな知見をためる手伝いをしてくれてることを踏まえた上での発言でもありました。

ここで大事なのは**完璧なものを作らなくていい**ということです。

不格好なものでいいので自分が作ってみたいものをたくさん作ってみてください。思った通りのものができなければもちろんこだわってもいいですし数をこなしてもいいです。

とりあえず勉強より実践です！！

# まとめ

今回は3つのエンジニアが挫折する理由に対するマインドセットを自分なりに書いてみました。まとめると

* **プログラミングに対する他責思考**
* **プログラミングは競争じゃない**
*  **エラーは友達！敵じゃない！！** 
*  **学習が途中でもとりあえずものを作る**

の4つになります。

もちろんこれが全員に当てはまると思っていませんし何ならもっと大切なマインドセットがあるかもしれません。
しかし、これが当てはまって実践したことでエンジニアになることができる人は少なからず増えると思っています。

無理せず自分のペースでゆっくりエンジニアを目指してみてください。