あくまで自分語りする記事です。
自分の体験談や主観であり、参考になる情報を保証するものではないです。
忙しい方はこちらから読んでいただけると自分語りパートがスキップできます
簡単なプロフィール
- 高校生の頃は数学は結構得意だった
- 大学(院)までは化学の研究をしてた(プログラミング未経験)
- 社会人からSIer勤務、Javaが書けるようになる
- 2021年の夏に事業会社に転職
AtCoderをはじめて一度やめるまで
もともとは「AtCoderというものがあるらしい」というのをなんとなく聞いて、
なんとなく参加したら結構楽しかったのでたまに時間があえば参加してました。
言語はJavaしか書けないのでJavaを使ってました。
ちょうど自分が参加したコンテストが運良く前提知識があんまり必要なかったり、
得意な幾何系の問題が多かったりで実力以上のパフォーマンスがでて、レーティングも実力不相応に上がりました
この頃は前提知識が全くないので、解説を読んでも何も理解できず解きっぱなしの状態でした。
(dp, bfs, dfsのような用語も知らなかった)
平日は帰って死んだように寝るような状態だったので勉強する気も起きず、
アルゴリズムの知識がないので徐々にレーティングが下がっていき、競プロから離れていきました。。
復帰のきっかけ
中途で入社した会社の新人研修の資料にあのt_wadaさんの神資料があり、
それに感銘を受けて実践しようと思ったのがきっかけでした。
(ここでt_wadaさんがなんと弊社技術顧問だったことを知りました笑)
以下2つを実践するのにいいなと思ったのがAtCoderでした。
- 新たな言語を学ぶ
- 毎日コードを書く
神サイトをみつける
ここで、AtCoder Problemsという神サイトを見つけます
(かつての大学同期が作ってたのでめちゃびっくりしました)
自分の過去の回答情報とかをクロールしてくれて視覚的に表示してくれたり、各問題の難易度が表示されてます。
感動するほど神サイトですごいです・・・超オススメです。
1ヶ月かけてGoで解いてみる
転職して平日にも自由時間が確保できるようになったので、
その時間を使ってGo言語の本を読みつつ毎日1問簡単めな問題をGoで解いてました。
簡単めな問題かどうかはAtCoder Problemsから問題に飛べば一発でわかります。本当にすごい・・・
1ヶ月半ほどGoを使ってみた感想ですが、
- 基本的な文法は定着した
- 最近の問題、明らかに難しくなってる
- ライブラリ系が弱い(言語の信念的な面もありそう)
- AtCoderでのユーザー数がそんな多くない
という印象でした。ここで、言語を変えてみることにしました。
Rustにのりかえ
あまり深い理由はないですが、以下で採用することにしました。
- C++は一番多いのでなんか避けたい (あまのじゃく精神)
- Pythonは仕事でもちょっと使うし、どうせなら他の言語触りたい
- Rustは触ったことなかった
- Rustになんとなく興味があった
- 結構AtCoderのユーザー数が多い
1ヶ月ちょっとして基本的な文法が定着してきたので、コンテストに再度復帰することにしました。
そしてハマった
ちゃんと準備してコンテストに参加して悔しい思いをして見事にハマりました。
もともとは軽い趣味のひとつというスタンスで取り組んでいたのに、
今では個人開発の時間が競プロにとられて困っています・・・
↑めっちゃイイネきてインフルエンサー気分で嬉しい
意識していること
本編です(いまさら)
-
成長速度を他人と比較しない
- twitterやってると学生さん多くてビックリしちゃう。吸収速度じゃ敵わないと思うのでのんびり構えてます笑
- 自分のtwitterです。フレッシュさは無いですがよかったらフォローしてください笑
- シンプルにとれる時間とかも人によって違うし成長速度は他人と比較しません
- twitterやってると学生さん多くてビックリしちゃう。吸収速度じゃ敵わないと思うのでのんびり構えてます笑
-
レーティングを気にしすぎない
- 色変記事書いてるやつが何言ってんだって感じですが、性格的に年内〇〇みたいな目標掲げるとそれが目的になって楽しめなくなりそうなので、できるだけ「レートは後からついてくるもの」と考えるようにはしてます。
- とはいえフツーに気にはなるので気にしすぎないように意識してます
-
毎日ちょっとずつ
- 1日過去問を1問解くのが気楽で向いてるみたいです。
- 逆にこれ以外は基本何もしません。初見のアルゴリズムは必要になり次第勉強します。
- なので、たまに負けイベントが発生します
- ダイキストラ法使う問題、ダイキストラ法知らない状態で挑んでも解けないです
- なので、「あ、無理だな」と思ったら潔く諦めて解説読みます
- twitter見るとモチベーション高い人多くて感心しますが、そのモチベに引っ張られずマイペースに。。
- あまり負荷かけすぎるとせっかくの趣味も楽しめなくなりそうなので、自分は自分と割り切ってます。
- 仕事で疲れた日は簡単なA問題を解きます笑
- 1日過去問を1問解くのが気楽で向いてるみたいです。
-
難易度はちょっとずつ上げる
- 実力をこえた難易度に挑むと、ACするのに新たな知識を複数学習しなきゃいけない場合が多く、心が折れます。
- なので、問題に挑戦するときも「解説をちょっと頑張れば理解できてACできそうな難易度」までにしてます。
最後に
なんだか、「〇〇しなきゃ」「今回で〇〇レートとれなきゃ才能ない」とかとか
結構根を詰めすぎてる人多くないかな〜って思ったりしてます。
競技プログラミングと聞くと仰々しいですが、無料ゲームみたいな感覚でやってます。
敵(問題)を色んなスキル(知ってるアルゴ)を駆使して倒して、
どんどんスキルのレベルとか使えるスキルが増えていって、倒せる敵が増える!楽しい!!
みたいな・・・?(説明下手)
趣味なんてこの世にたくさんあるので、気が向かなくなったらやめちゃえばいいですし、
レーティング高いから偉いとかそんなんでもないのでもうちょい気楽に取り組んでもいいんじゃないですかね?
プライベートな時間まで苦しいのはつらいぜ・・・
誰かの心がこれでちょっとでも軽くなればいいな〜なんて思いつつこの記事をしめます。
最後まで読んでいただきありがとうございました!!!