初心者がプログラミング学習で躓く原因とその解決方法を初心者なりに考えてみた

# 自分のスペック
自分でwebアプリケーションを作ってみたいと思い、調べてみるとRuby on Railsがアプリ開発に便利だということがわかり、rubyの学習を開始しました。
webアプリの開発にはフロントエンドの知識も必要だとわかり、[Progate](https://railstutorial.jp/)などを使って簡単にHTMLやCSS、JavaScriptの勉強もしました。
[シラバス](https://cyllabus.jp/pine)の２ちゃんねる作成講座や[railsチュートリアル](https://railstutorial.jp/)を一通り終え、いざオリジナルアプリケーションをつくろうとしたところ全く開発が進まず、中断（"挫折"という言葉は使いたくないので）。

そこで、オリジナルアプリケーションの開発がうまくいかなかった原因とその解決方法を初心者なりに考えアウトプットしてみようと思いました。


# 原因の分析
では、なぜオリジナルアプリ作成となった途端、行き詰まってしまったのでしょうか？
自分がオリジナルアプリを作成しようとしていた時に困ったポイントを振り返ってみると次のような原因が見えてきました。

1. 基礎的な知識の不足
2. 検索力の低さ
3. 復習しない
4. 情報に振り回されがち
5. アウトプットしない


## 基礎的な知識の不足
webは様々な技術が複雑に組み合わさって作られています（私もあんまりわかっていないです）
ですから広範な知識を知っている必要があります。
ですが、初心者なのでそもそもそういう前提となる知識への理解が根本的に足りていないと感じることが多かったです。

## 検索力の低さ
一番目の原因にも関係してきますが、未知のエラーで行き詰まったときや、なにか機能を実装してみたいとなったときにはグーグルで検索するのですが、その検索結果の1番目から20番目(誇張ではなく本当に)をすべてみるということをやりがちです。
というのも、そのブログやサイトに解決方法らしいことが書いてあっても自分の知識以外のことが書いてあったらスルーしてしまうからです。
そして、なんとなく見たことのあるようなコードを見つけると自分の手元の環境にコピペしてなんとなく動いたら終わり、動かなかったらコピペできるコードを探すという無意味な作業を繰り返します。
これも知識が不足しているため、ググって見つけたコードを理解することを億劫に感じているためです。
ですから、たとえ見つけたコードが間違っていたとしても全然気づくことができません。(自分もそういうことが何度もありました)

周りにプログラミングのできる人がいないので推測ですが、できる人はすぐさま信頼できる情報を見つけ自分のものにできるのだろうと思います。

## 復習しない
基礎的な技術の不足のところと関連するのですが、新しい知識をインプットしようとするあまり、復習がおろそかになりがちです。
なぜなら、覚えることがたくさんあって復習している余裕がないと感じるからです。
また、様々なプログラミング学習の仕方を説いているサイトなどをみると「プログラミングは覚えるな。必要なときに調べればいい」と書いてあります。
初心者はこれを真に受けて、入門書に書いてあるメソッドすらもろくに知らないまま開発を始めてしまいます。
ですから標準メソッドでできる処理に意味もなく頭を悩ませることが往々にしてあります。

また、自分のコードを読み返すこともありませんし、読み返してもコメントやわかりやすい変数名･関数名をつけていないので何を書いてあるか自分でもわからなくなります。

## 情報に振り回されがち
知識が全然ないため、ググって出てきた情報を鵜呑みにしがちです。
Rails開発ひとつをとっても、最近はReactが流行っていると聞けばドットインストールの講座を見るもよくわからず、やっぱりJavaScriptを基本から知っていた方がいいと思い勉強し始めるが覚えることが多く嫌になり挙げ句の果てに別言語に手をだす...なんてことは日常茶飯事です。

## アウトプットしない
アプリ開発をしているとよくググったりして調べます。
ですが適当にコピペするのが多いのでアウトプットしようにも身に付いていないのでできません。

# これらの原因をふまえた上での自分なりの解決法

以上述べてきたような悪習慣のままアプリケーション開発をこれ以上進めるのは非効率だと思いました。
そこでネットで調べた情報などをもとに、こうすればより効率よく学習できるのではないかという解決方法を考えてみました。

## ひとつの言語を極めるつもりで勉強する

ひとつのことに集中したほうが学習効率が高まります。
そういう意味でも勉強する言語をひとつに絞るのが得策だと思います。(自分の場合はruby)
また勉強するときは本を読んだりネットで記事を読むといったインプットと同時に、実際に書いてみるアウトプットも大事です。
最近はpaizaというサービスのスキルチェック問題や会津大学のオンラインジャッジなどがアウトプットするのにいいなと感じています(問題を解くのが性にあっていると感じています)
またqiitaやブログにアウトプットするのも知識の定着に効果的なそうです。

## 周辺知識の習得を怠らない
Railsを使っていると、データベースを意識せずに開発を進められますが、少しでも複雑なことをしようと思うと、知らないと箸にも棒にもかかりません。
このようなプログラミング以前の知識を取り入れることが必要だと思います。
今はデータベースやSQLの基本知識を復習して身につけようと考えています。

## 複数の信頼できる情報源を持つ

情報に振り回されないため、また後から復習が容易なようにいくつか情報源をもっておくことが大事だと思いました。
自分の場合は、「たのしいRuby」と「プロを目指す人のためのRuby入門」の2冊を使っています。
またオンラインリファレンスの[Rubyドキュメント](https://docs.ruby-lang.org/ja/)も参照しています。
こうすることで、ひとつでわからなくても他のリファレンスを調べることで補完性が高まると考えています。

## コードを読む
他人のコードを読むのも勉強になるそうです。
しかし、自分のレベルではまだまだ難しそうなのでまずは自分の書いたコードを読み返す(読み返すために普段から読みやすいコードを書くように意識する)ことから始めてみようと思います。(リーダブルコードで読みやすいコードの書き方を学ぼうと思っています)

## 開発を焦らない
これは自戒の意味をこめているのですが、早く成果物をつくりたいと思うあまりネットで探したコードをコピペしてその意味を考えないという状況に陥っていました。
そういう焦りが生じるのは仕方ないことだと思いますが、今はわからないことがあればじっくり調べたり考えたり人に聞いたりすることで知識が深まり、結果的に開発効率をあげると考えています。
うまくいかないことがあれば、逆に成長のチャンスだと思うことを肝に銘じておきたいと思います。

# まとめ
色々とグダグダと述べてきましたが、結局一番大切なのは「学んだ知識をしっかり理解し身につけ、自分で実装できる」ように心掛けながら勉強することなのかと思います。
とりあえずの目標としては、先述したpaizaではBランクになったので次はAランクを目指そうかなと思います。

ここまで書いてきたのはあくまでずぶの素人が考えたことですので、間違っている点やより良い解決法などがあれば教えていただけると幸いです。

また、この投稿が不適切だと思われた場合ご指摘いただけると幸いです。削除または非公開にしようと思います。

最後までお読みいただきありがとうございました。