挫折しないで楽しくプログラミングを学ぶためのTips

# こんにちは！
はじめまして！休学してコードを書きながらフラフラ楽しく生きている者です。
最近は、学生向けの日程調整ツールを個人開発したりしています。
![Comma-sns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1819316/3a071ee9-72ae-f221-c22e-54b351d16d5c.png)
[Comma - 時間割ベースの日程調整ツール](https://com-ma.app/)

大学に入学するちょっと前の時期から、独学で２年くらいプログラミングをやっています。


僕自身は、コツコツ継続して独学してきたわけではなく、挫折しまくって、なんとか実務ができるようになった人間です笑


この記事が少しでも参考になればうれしいです。

# 初心者を苦しめる要素
## 学習スタイル探し
幸か不幸か、現代ではインターネットで色んな情報を仕入れることができます。


よくインターネットでは、
***初心者は書籍を使って学習すべき***
***プログラミングスクールに通うべき***
といった意見を見かけます。

しかし、技術ブログなどで独学をしてきた僕としては、
**それらの意見が100%正しいとは思いません。**

### 初心者は書籍を使って学習すべきか？
個人的には、書籍のサンプルプログラムを作っても、
それは人が作ったコードの写経であり、
大したエラーに遭遇しないので、あまり力が付かないと思います。

エラーの原因を探しているときは色んな知見が得られますし、
**プログラミング力 ≒ エラー解決力**だと思うので、
そういう時間を大事にしたいです。

### プログラミングスクールに通うべきか？
プログラミングスクールに関しては、個人的には**あまりオススメしない**です。
理由は２つあります。

１つ目は、**エラー解決力がつきにくそう**だからです。
ほとんどの場合、プログラマーはネットの情報でエラーを解決します。
つまり、グーグルが先生です。
**グーグル先生から上手に答えも導き出せたら勝ちなんです**。

初心者を困らせるエラーのほとんどは、経験のあるプログラマーに聞けばすぐ解決します。
しかし、グーグル先生に聞く習慣を身に着けたほうが、将来役に立つと思うのです。

２つ目の理由は、**授業料が高いからです**。単純な理由です笑
無料と有料、どちらのほうが好きですかと聞かれたら、もちろん無料ですよね！

授業料が高い　→　プログラミングスクールやめる　→　プログラミングやめる
といった流れも目に見えるので、個人的にはオススメしないです。

（通ったことないんで参考までに）

### 自分に合うスタイルでOK
長ったらしく書いてしまいましたが、これらは僕個人の意見なので、**自分に合いそうなスタイル**を試してみてください！

## プログラミング言語・フレームワーク選び
世の中には、プログラミング言語やフレームワークが **山のように存在します**。
最初のうちは、色々な情報があって楽しめますが、次第にどれがいいかわからなくなります、、

とはいえ、学びたいプログラミング言語・フレームワークを１つに絞らなければ何も始まりません。
なので、以下の指標をもとに選ぶのがいいかもしれません。

* **一番興味のある分野**
* **二番目に興味のある分野**
* **作ってみたいもの**

例えば、
一番興味のある分野 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;**ゲーム**
二番目に興味のある分野 &nbsp;&nbsp;→ &nbsp;&nbsp;**webアプリ**
作ってみたいもの &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;**FPSゲーム**
であれば、**C#** がいいかも

一番興味のある分野 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;**モバイルアプリ**
二番目に興味のある分野 &nbsp;&nbsp;→ &nbsp;&nbsp;**webアプリ**
作ってみたいもの &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;**SNS系のサービス**
であれば、**React** か **Ionic**がいいかも

というように、かなり絞れると思います！

## エラーとエラーとエラー
初心者の時期には、たくさんのエラーと遭遇します。
エラーが出ると嫌になりますよね、、
でも、先述の通りエラーから学べることはたくさんあります！


**エラーを経験した数だけ強くなります。**
エラーと友だちになりましょう！
エラー文でググるだけではなく、何が原因かを考える癖をつくると、
より早くエラーを解決できるかもしれません！




# モチベーション維持のための心持ち
## 「楽しい」という感情を一番に
***天才は努力する者に勝てず、努力する者は楽しむ者に勝てない***

という言葉があるように、「楽しい」という感情は自分を成長させてくれます。
だから、プログラミングが「楽しい」と感じないときは、**距離を置くこともアリだと思います**。

実際、ぼくは何度もプログラミングから離れました。
最初はゲーム開発にトライしては離れ、AIにトライしては離れ、チャットボット開発にトライしては離れ、、

でも不思議なことに、離れても数ヶ月すると「**もう一回やろう！**」という気持ちが芽生えました。

どんなに小さい開発でも、新しい知識を身につけることができたので、無駄ではなかったなと、今では思っています。

## お金を稼ごうとしない
**ソフトウェアエンジニア = 稼げる職業** というイメージがあるかもしれませんが、実務ができるレベルになるにはかなり時間がかかります。（僕の場合１年かかった）

というのも、実務ではプログラミング言語の知識はもちろん、データベース、開発ツール、webの知識などが求められるからです。

なので、稼ぐ手段としてプログラミングを意識してしまうと、初心者期間はかなりしんどいと思います。

**自分のペースで楽しむこと**に重きを置いて、モチベーションを維持しましょう！

## 自分の技術レベルを受け入れる
受け入れることは、**卑下することでも、過信することでもありません**。

自分の技術レベルを卑下してしまうと、アイデアを形にしようという気持ちになりません。
「難しそうだから」という思い込みが邪魔をしてくるのです。

***Done is better than perfect***

という言葉があるように、何かを形にする経験はめちゃめちゃ大事だと思います。
手を動かしているときに色んな発見があったりするんです。
自分を卑下して何もしないのはもったいないです！

逆に、自分の技術レベルを過信するとどうなるのか？
最初は自信と勢いと気合でいい感じに開発が進みます。
ですが、段々と自分の制作物がイメージとは程遠いことに気づき、燃え尽きてしまう。
そういったことが起きがちです。

僕は初心者の頃、個人でFPSゲームの開発をしていました。
必死であれこれ調べながら作っていたのですが、Apexとかバトルーフィールドと比べたら
制作物がゴミカスにしか見えませんでした笑
そんな感じで、ゲーム開発はあえなく挫折しました。

長くなりましたが、まとめると
**自分の技術レベルを受け入れて、ちょっとした成長を喜ぶことが大事**なんだと思います。

# まとめ
さらっとこの記事の内容をまとめると、
* **書籍やプログラミングスクールでの学習はおすすめしない**
* **でも自分のスタイルに合いそうならOK**
* **自分の興味を軸にプログラミング言語などを選ぼう**
* **すぐに稼ごうとしない**
* **自分の技術レベルを受け入れて、少しずつ成長しよう**

といった感じです！

みなさんが素敵なプログラミングライフを送れることを心から願っています！！！