paizaのスキルチェックD問題を全部解いたらめっちゃ成長を実感したので、3つに絞ってお話します。
こんにちは。くすき(@ra_kusuki)と申します。paizaの「プログラミングスキルチェック」にドハマリし、ハマりすぎて一番カンタンとされるD問題(全177問)を4日かけて全部解きました。このnoteでは、D問題を埋めることでどんな変化が起こったかを、その時の記録とともに記しておきます。
まず、D問題を埋める前の僕について
まずはD問題を埋める前の僕について。Paizaスキルチェックに関係しそうな箇所に絞って記載します。
Paizaスキルチェックの経歴:
D問題→C問題→B問題と経て、とあるA問題にチャレンジしたら全く解けず(ランタイムエラー頻発)。解決策すら思いつかなかったため、地力が足りないと判断し、「一番カンタンな全部やってみるか」と思いついたのが、今回のD問題埋めのきっかけ。挑戦言語は全問JavaScript。
JavaScriptの経歴:
30歳&未経験なのになぜかWebプログラマーに応募し採用されたのを機に、実戦で無理やり覚える。スクーリング経験はゼロ。その後、ブックマークレット作りにハマってJavascriptそのものよりスクレイピング方面ばかり経験を積む。forとifがわかればなんとかなると割と本気で思っていた。
タイピング:
ネトゲにハマっていたのと、テクニカルサポート勤務経験によってタッチタイピングは平均より早い方(e-typing 計測でWPMが最大434)ただし早いのは日本語ローマ字とテンキーのみで、数字と記号の連続入力は苦手([0]とかきつい)
マウス操作:
超苦手。思った場所を狙ってクリックすると頻繁に1ドットずれる。あまりに苦手すぎたが故に、ブラウザ操作を1クリックで済ませるためだけににブックマークレット開発にのめり込み、作ったツールを販売するまでに至った。
◇
ぶっちゃけ、ツールを作って販売したりもしていますので、ググればなんとかなるという謎の自信はありつつ、Javascriptそのものの理解についてはかなり乏しいという状態です。こんな僕がD問題をすべて埋めたらどうなったか、3つの実感をもとにお話したいと思います。
◇
実感1:コーディングの反復練習で手が覚えた。
振り返って一番の恩恵はなんといってもこれ。paizaのスキルチェックは問題の並びが上から難易度が低い順になっているのですが、D問題はこの並びが神がかっていて、どこかのタイミングで初めて覚えた解き方(書き方)を、次の問題、その次の問題と繰り返し使うことが多かったです。そしてこれが本当に良かった。D問題を上から順番に埋めていくだけで、これまで知らなかったり不慣れだったメソッドや関数を使いこなせるまで自然と反復練習する形になっていて、いつの間にか手が覚えてました。
例えばfor文。自分はjavascriptでチャンレジしてましたが、これまでループといえばfor、もしくはwhileぐらいのイメージしかなく、アロー関数すらよくわからなくて避けてたのですが、今ではすっかりmapとかfilterとかreduceの強力さにドハマリしました。
このnoteを読んでいるあなたがアローとかmapに不慣れなら、是非騙されたと思ってD問題埋めて見てほしい。終盤には自然とmap使えるようになってる自分に驚くはず。僕の場合、終盤でfor使ったら「ゴリ押ししてしまった」って気持ちになってました。
実感2:あっという間にレーティングが上昇し、最後まで飽きずに続けられた。
D問題を埋めで得られる恩恵として、レーティングの上昇はもちろん外せないです。理由1がスキルアップに直結するのに対し、こちらは学習意欲面に直結します。
僕の場合、大体1問満点で5ほど上昇、満点を逃すと50ほど下降て感じで、D問題埋め終了時点で開始前からレーティングが480ほど上昇しました。道中3問ほど凡ミスで満点を逃して-150されてるので、全部満点ならD埋めだけで1800超えも夢じゃないです。
「レーティングが上がったからなに?」って思われそうですが、僕はこういう小さなご褒美があると楽しくなってすぐに次の問題解きたくなるんですよね。実際、仕事終わって夜寝るまでに毎日30問~40問程度解いてました。
その結果が下のグラフ。点が縦にびっしり集中しているのがおわかりいただけると思います。
レーティングだけでみれば、S問題やA問題にチャレンジしたほうがリターンが大きいです。大きいんですが、S問題やA問題は想定回答時間がだいたい2時間以上のため、課題に向き合う時間や気力を確保するのが意外と大変なんですよね。それに比べてD問題は、D問題は大体2,3分、先述の反復練習で手が覚えている解き方なら、早くて1分以内で解けます。このお手軽さのおかげで、毎晩、仕事が終わったあとでもどんどん問題を進めていくことができ、結局一日も休むことなく一気にD問題を埋められました。
実感3:自分が書いたコードに対する理解が急激に深まった。
3つ目の実感は、このnoteを書いている間に気づいたことです。あまり記憶力に自信がないこともあり、今まで何かをコーディングする際は、かんたんなメソッドや関数もほぼ毎回ググってたのですが、今回のD問題埋めで新たに学んだメソッドについては、途中から応用した書き方もスラスラ出てくるようになっていました。
なんでかな?と思って、脳科学などでそれっぽい事例を調べてみたところ、実感1の反復学習、実感2の小さなご褒美に加えて、始めるまでの心理負担が少なさと、適度なプレッシャーのおかげで、コーディング中、いつも以上に集中して取り組める仕組みになってました。
繰り返しますが、D問題は大体2,3分、先述の反復練習で手が覚えている解き方なら、早くて1分以内で解けます。このお手軽さのおかげで、次々とチャレンジできるのですが、ここに「ミスするとレーティングが一気に下がる」というプレッシャーが程よく合わさって、D問題埋めを進めてる間、反復して書いたコードへの理解度が格段に増していったのを感じました。
先程ちらっとお話しましたが、D問題も残り3問くらい、となったところで、2問連続で満点を逃し、レーティング100落としました。原因は、問題文の読み間違いと、なんとなくでメソッドつかってたことでした。ミスした問題はすぐ再チャレンジして100点取れるようにはなったけど、コツコツ積み上げたレーティングが一気に降下して結構悔しかった。しかし、この悔しさがより一層コードに対する理解を深めてくれました。
以上、自分がD問題埋めで実感した3つでした。ここまで読んでくださったあなたには、騙されたと思って、まずは1問、D問題を解いてみてほしいです。多分5問位連続で解いちゃって止まらなくなります。
◇
結論:初心者は勿論、中・上級者もやって損なし!
A問題やB問題がスラスラ解けないならやる価値あり!
というわけで、僕が経験した成長の実感3つから、paizaスキルチェックのD問題埋めは、レーティング1800以下の人はもれなくオススメします。ちなみに「レーティング1800以下」という基準は、自分がD問題を埋めているだけでレーティングが1266から最大1834まで上昇、最後ミスでレーティングを落としつつ、1747でフィニッシュしたという経験から、「安定して1800以上をキープできてないならやる価値あり!」という個人的な考えに基づいています。
あと、これも自分の経験上、もしあなたが、S問題やA問題で「そもそもどう書けばいいんだ?」と悩んだり、B問題やC問題で「コーディングが想定時間内に間に合わない」と感じているなら、D問題を埋めるだけで見違えるほど成長しますので、是非騙されたと思ってやってみてください!
◇
ここまでお読みくださりありがとうございました。このnoteがあなたのプログラミングスキルの成長のきっかけになったらめっちゃ嬉しいです。
おしまい。
この記事が気に入ったらサポートをしてみませんか?