rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

プログラミング学習への取り組み方

はじめに

全くの未経験者である私がプログラミングスクールに入学して約2ヶ月経ち、その中で早くも意識が変わったことがありました。 この記事では、この2ヶ月で学んだ下記3点について、アウトプットしたいと思います。

・プログラミング学習の進め方
・エラーに対する考え方
・技術面で成長したこと

本記事の作者について


本記事を書いている私がどのくらいの未経験かというと、プログラミングの勉強を始めようとしたらみんな通るであろう、「Progate」さえ入学の1ヶ月前にその存在を知り、そこから勉強を始めたくらいの超初心者です。

それまでは、ずっとスタバの店員さんをやりながらコーヒーの勉強をするという、プログラミングとは無縁な生活を送っていました。

そんな私のように今はまだ「プログラミングってよくわかってないけど気になる」っていうような人や、独学で勉強しているけどスクールに入るか迷っている…というような人にむけて参考になるような情報をお届けしたいと思います。

※ちなみに私は10月のRUNTEQ(プログラミングスクール)入学のタイミングで仕事を辞め、今はフルコミットで毎日勉強しています!

この記事の対象者


・プログラミングの勉強を最近始めた方
・以前プログラミングを独学で学んでいたが挫折し、スクールに入学するか迷っている方

プログラミング学習の取り組み方

【復習】と【学習を進めること】のバランス


入学前の学習に対する意識→「準備(復習)が一番大事」

準備が8割ともいうように、今までは何かをするときにはきちんと準備をすることに一番重きを置いていました。

それはプログラミング学習をする上でも同じで、「今勉強している知識がちゃんと理解できてから(復習をしっかりしてから)次に進もう」と常に考えながら進めていました。

それが、最近では復習を大事にしつつも、「わからなくてもずっとそこに留まる(きちんと理解するまで復習し続ける)のではなく、一旦進んでみる」ことを意識して進めるようになってきています。

「進める」とはどういうことなのか?少し考えてみました。 (私がこのブログの中で使っている【復習】と【学習を進める】の解釈なので、正しい正しくない、というよりは「そういう意味で使っているんだな」と読み進めていただけると嬉しいです)
復習
一度手を止めて、わからないことを調べたりそれを記事にしてアウトプットし、自分の中に定着させること
進める
とにかく手を動かす、つまりコードを書くこと



なぜ理解しきらずとも学習を進めていくことが大事なのか


私が「とりあえず進んでみよう」と考えるようになった、この2ヶ月間についてお話します。

RUNTEQのカリキュラムに入る前は、railsチュートリアルを勉強していました。

railsどころか、プログラミング経験も全くない私にとってはわからないことの連続でしたが、1周目より2周目、と何度も復習することで少しずつ理解できる部分が増えていくのが実感できました。

2周目でやっと理解できる部分もあれば、2周してもまだわからないと感じる部分もあります。 このとき私は「基礎がわかっていれば次に進んでも理解できて、さらにその次に進めやすいはず。だからわからない部分を完全に潰してからカリキュラムに入ろう」と考えていました。

RUNTEQでは、そんな学習の進捗などをslackのtimesでつぶやいたりできるのですが、そこで講師の方が「次に進んじゃいましょう!」とアドバイスをくださいました。

その時は【わからないことがある中で学習を進める】ということに少し不安がありましたが、アドバイスいただいた通りにRUNTEQのカリキュラムを進めてみることにしました。

実際に進んでみるとカリキュラムはレベルが高く、やはりわからないことの連続です。 進めるだけどんどん新たな知識が出てきて、わからないこともさらに増えていきます。

「わからないことだらけでもなんとか理解しよう」と、とにかく頭を使っているため、夕方頃になるとめちゃめちゃ頭が痛くなるし、カリキュラム始めたての頃は「やっぱりまだカリキュラムを進めるレベルまで達していないんじゃないのか、このまま進めていて大丈夫なんだろうか…」と不安になっていました。

ただ、進めていく中で新たな発見がありました。

新しく出てきた知識の意味がよくわからず、理解できなければ全く勉強していないのと同じかというとそんなことはなく、見たことのある単語として頭の片隅に残っているということです。 使い方がよくわからないのでその時はまだ、ただの点でしかないですが、学習を進めていくと急にその点と点がつながる瞬間があります。

「あの時出てきたあれってこうやって使うのか!」

こんなふうに急に理解できる瞬間が訪れるときがあるので、その時のために今は多くの点を作っておくことが重要です。 もちろん、一つ一つ自分が納得できるところまで理解してから次に進む…というやり方でも最終的に「理解する」という点では同じです。

ただ、【どちらの方が技術を習得していくのに効率的か】を考えた時に、学習を進めることも意識する方が同じ時間で理解できる量が多いように感じるため、まだ覚えることが山のようにある今こそ、スピード感も保ちながら進めていくことを意識しています。

ちなみに、プログラミングスクールに通っている方はカリキュラムなどがあると思うので、それを進めることがコードを書くことに繋がるんじゃないかと思うのですが、独学なら恐らく勉強している参考書などがあると思うので、読み進めるだけではなく、実際にコードを打ってみることが早い成長につながるんじゃないかと思います。

エラーに対する考え方


やっぱり初めて見るエラーとか出ると「何これ…」って戸惑いますよね。 まだチュートリアルに取り組んでいた段階では「とにかくエラーが出ないこと」が一番良いこと、と一生懸命解答を真似しながら、間違いがないかじっくり確かめて進んでいました。

もちろん、初歩的ミスによるエラーで何時間も悩むよりは、そういったケアレスミスをなるべく無くして他のことに時間を使えることがベストではあると思いますが…!

今はケアレスミスのエラーでさえ勉強になると思っています。 エラーとたくさん出会えば、【どこが原因でエラーが出ているのか】、原因を切り分けて考えていく力をつけることに繋がっていきます。(後ほどの技術面で成長したことの中で、どんな風に切り分けを行うのか、の一例を記載しています)

また、よく出るエラーがわかってくるようになると、対処にかかる時間もどんどん短くなっていきます。

そして、プログラミング学習の進め方のところでもお伝えしたように、やはりエラーと出会うことは「こういうことか!」と点と点が繋がる瞬間に出会わせてくれることも多々あります。

そういった経験から、最近は「とにかく手を動かして、エラーに慣れよう」「復習も大事だけど、進むことも意識しながらたくさんの点を作っていこう」と経験を積むことを特に重要に捉え、進めています。

これは性格によって合う合わないもあるかもしれないので、人それぞれではありますが、「準備が第一」という価値観を持っていた私の中ではこの2ヶ月間で一番成長した部分かな、と思っています。

技術面で成長したこと


学習の進め方やエラーに対する考え方が変わったことで、「ちゃんと技術的にも成長してるよ」ということもお伝えしたいので、長くなりますがこちらもシェアします。 もし見ていただける方は折りたたみボタンを押してサラッと見ていただけたら嬉しいです!

(もしプログラミングはじめたての方がこの記事を読んでいたら、正直なんのこっちゃわからないかと思うので、「2ヶ月でこれだけ考えられるようになるんだなぁ」くらいに流し読みしてもらえればOKです)

見てくれる方はこちらをクリック

①出力されるHTMLを見るようになった


入学前の勉強はまだProgateしかやっていなかったので、それまで見なかったのも当たり前といえば当たり前なんですが(笑)、入学してRailsチュートリアルを勉強し、RUNTEQの学習カリキュラムを進めていくうちに意識できるようになったことの一つです。

なんのことかわからない、という人のためにお伝えすると、 HTMLを調べたいページで右クリック→検証をクリック
そうすると出てくる、こんなやつです。
kensyo

例えばテストのエラーがなぜか通らない、とか期待する動きをしてくれない…といった時に、今までは自分の書いたビューテンプレートとばかりにらめっこしていました。 それでもわからずに、講師の方に質問した時に「実際に出力されているHTMLを見てみてください」と助言をいただき、解決できたことがあります。

実は書き方がちょっと間違っていて自分が思ったようなHTMLに変換できていなかった、とか記述の仕方は合っていたけど記述する場所がちょっとずれていてエラーに繋がっていた、などビューテンプレートを見るよりも実際のHTMLを参照する方が気付きやすいこともあります。

②エラーが出た時にどこまで動いているのか、原因の切り分けを意識的に行うようになった


具体的なお話をすると、「編集機能をajax化する」といった課題がありました。 ひとまず実装は済んで「さぁ動かしてみよう!」とボタンを押してみたものの反応がない…

その時自分の中で試したことは、 ①まずはボタンを押して、コントローラのアクションが反応しているのか? →アクション内にbinding.pryを入れてみる image.png

→ページが読み込み中になってconsoleが起動している →アクションは読み込まれている

②アクション内のparamsで内容が受け取れていない? →binding.pryが起動しているので、開いているconsoleでそのまま検証してみる →paramsで変更内容も受け取れている

③アクション内は問題なさそうなので、ビューの問題? →jsを使っているので、 そのファイル自体の読み込みができていない or ファイルの読み込みはできているが、記述ミスなどで内容が反映されていない このどちらか?と予想

→原因を切り分けるために、まずはjsファイルの中身が反映されているのか確認 .js-edit-comment-buttonを押したらアラートが表示されるか実験 image.png →表示されない…

→次にファイル自体の読み込みができていないのかを確認 該当のjsファイルの先頭にdebuggerを置き、consoleが開くか確認してみることに image.png →consoleが開いた!

→ということはjsファイルの
$(".js-edit-comment-button").on('click', function()
「この表記が間違っているか、HTMLファイルの方のこっちの表記がどこか違うのか」というところまで推測したところで原因が突き止めきれず…
<a href= '#', class: "js-edit-comment-button", data-comment-id-"<%= @comment.id %>">

ちなみに反映されない原因は
<a href= '#', class: "js-edit-comment-button", data-comment-id-"<%= @comment.id %>">
このコードのclass:の部分がaタグなのに:で表記されていたためうまく動かないという初歩的ミスでした。(正しくはclass=)

最後まで原因を突き止めきれなかったものの、「どこのファイルに問題があるのか」というところまではたどり着くことができるようになっていました。

最後に


この短い2ヶ月という期間で、ここまで考えられるようになったのは自分の努力のみかというと、RUNTEQに通っていたからこそだと思っています。

独学で始めていたら、こんなに早い段階で「とにかく手を動かそう」と考えて、とにかくコードを打っていたか?私だったらNOです。

エラーで詰まった時はもちろん、まずはネットでめちゃくちゃ調べてみたり、理解できていないであろう部分を復習してみたりします。

それでも中々解決できない時に、講師の方に質問することができる環境があるからこそ、「エラーに詰まって進めなくなるんじゃないか」という心配なく「やってみよう!」と進めることができ、コードを書いていくことで経験をより積んでいくことができます。

そして、現場で求められるであろう、わからない時に【原因を切り分けて先輩に質問する力】についても、RUNTEQで質問をすることが良い練習になっています。

とは言いつつも、まだまだ勉強することもたくさんありますし、毎回上手に質問できているかというとそうでない時もある未熟者ですので、精度を上げていけるよう、引き続き頑張っていきます!