はじめまして!CREとしてエンジニアをやってますkazuです🦌
AtCoderの問題を2023年12月から解き始めて、2024年4月で200 問に達成したので、そこで気づいたことをいくつか共有しようと思います!
やり始めた経緯などについては、前回の記事があるので、気になる方はご覧ください✨
AtCoderの過去問100問解いて得たこと - Qiita
100問との違い
- 問題にもよるが1~2処理は、パッと思いつくようになった
- 人のコードを参照するようになった
- 「この問題のときは、この関数が使えそう」など脳内サジェストできるようになった
- 「この問題はすぐに解ける」「これは少し時間がかかる」など自分の中の基準ができた
問題にもよるが1~2処理は、パッと思いつくようになった
これは、大きな進歩と言えそうです。今までは、解く事が一つのゴールだったのですが、その先を見据えられるようになりました。多分、強強エンジニアなんかは、これがいくつもパターンがあって、そこから最適なものを選ぶことでパフォーマンスを出しているんだろうなと思います。
僕はまだ、問題に対して最適解を出せるほど、解法の数が多くないので、まずは引き出しを増やすことを意識しなくちゃなと思います。
マイクロソフトの牛尾さんが、言ってましたが、脳の負担を減らす方法として以下を提唱していたので、まずはレベル1を増やすことを継続して行っていきたいなと思います。
😩レベル4:自分では無理
😟レベル3:スパイクソリューションがあればなんとかなる
🙂レベル2:ググれば解決できる
😄レベル1:何もググらず即実装ができる
人のコードを参照するようになった
100問までは、問題を解くことに必死で、とりあえず問題をクリアすればいいと思って望んでいたのですが、だんだん溶けるようになってくると「不細工なコードより、かっこいいコードを書きたい」と思うようになりました。そのため、自分が提出したコードを他の人のコードと見比べて、「これはかっこいいな」とか「これは見づらいな」とか色々観察するようになりました。
そこで新しい記述を得ると、次回以降の処理で試したりできるので、自然と自分のレパートリーが増えることを実感しました。
「この問題のときは、この関数が使えそう」など脳内サジェストできるようになった
数を一定こなす事によるメリットかもしれませんが、問題の傾向から、「この関数とこの関数は使えそう」とかいくつかの関数を引き合いに出して、別々の処理パターンを考えることもできるようになりました。
自然にできる感覚は、常に脳内引き出しにその関数が閉まってあって、開けたらすぐ出てくる感覚に近いです。
それらが、すでに机の上に並んでいる状態で、そこからどれを使おうと考える感じとも言っていいかもです。
「この問題はすぐに解ける」「これは少し時間がかかる」など自分の中の基準ができた
定量的に数をこなしたので、自分の中でこの問題に対する時間がどのくらいかかるのか?などなんとなくでも把握できるようになりました。恐らく、これは実務的にも工数の見積りなんかで使えるんじゃないかなと思います。
200問解いて得たこと
- 定量をこなすことに順応してきた
- 忍耐力がつく
定量をこなすことに抵抗感がなくなり、順応してきた
最初は、問題を解くことも億劫であった自分ですが、今となっては朝30分を使って、2問解く事が習慣になっています。慣れって怖いですね。
ただ、定量をこなすだけだったら、続かないと思うのですが、自分の成長が目に見えるため、それが面白くてどんどんはまってやってしまう感じです。
今では、1つの目標として、1000問解くことを目標にしています。こうやって、一つ一つ自分の基準を上げていけば、新しい事を始めた時に、それが参考になったりするので、一定の量をこなすことは何をするにしても、大事にしています。
忍耐力がつく
数に対する抵抗感がなくなり行動おこしてると、自然と忍耐力が身についてきます。人間ですから、途中で面倒くさくもなります。それでも、やらない1日で後悔したくないので、どんなにめんどくさい日でも1問は解くようにしています。これを繰り返してると、自然と忍耐力が身につくという(笑)
ゴルフの時もそうでしたが、成長曲線って、右肩上がりに直線ではなく、なだらかなカーブを描いて成長していくので、焦らず、目の前の1問に取り組むのみです。
この精神をゴルフで、先に学んでいたからこそ、続けられているのもあるかもしれません。
まとめ
ここまできたら、1000問までは報告できるように頑張りたいなと思います。とりあえず、A問題は解けるようになったので、次はB問題に挑戦していこうかなと思います。
B問題を普通に解けるようになったら、1ランクアップしそうな気がします。