水色記事を書いてから約2ヶ月、やっと青色になることができました。
Contents
やったこと
過去問
AtCoder Problemsを見ながら、まだACしていない過去問を解きました!以上!
6問体制の新ABCについてはD,E問題を、旧ABCについてはD問題を中心に練習を行いました。
俗に言うD埋め、E埋めですね。
これによって、まだまだビギナーではあるもののアルゴリズムの基本的な考え方が少しわかってきた気がします。
教科書を読むだけではなく、実際にコーディングしながら覚えられる機会がこうして得られたのは本当に素晴らしいことです。
ライブラリ整理
modint、combinationやセグメント木のライブラリ整理は前々から行っていましたが、グラフ系の問題についてもライブラリ作成しました。
昔のD問題をやってるとこのあたりはライブラリ化したくなりますよね(毎回書くの面倒なので)
- ダイクストラ法・ベルマンフォード法・ワーシャルフロイド法
- 最大流
- トポロジカルソート
まあ、本番で使えたことはまだないですが…そろそろ役に立つと思います。多分。
足りてないな〜って思うのは文字列関係のアルゴリズムのライブラリでしょうか。
ローリングハッシュとか作らないとですね…
所感
よかったこと
やり始めてから一番実益を得たこととしては、コーディング試験に強くなった点でしょうか。
過去記事にも書いた通りコーディング試験に落ちてAtCoderを始めたという経緯がありますが、最近別の企業を受けた際にまたコーディング試験がありました。
前回はアルゴリズムに関する基本問題すら解けませんでしたが、今回は全完することができました。
「あ、この問題AtCoderで見たことある!」
となったので、AtCoderは就活界における進○ゼミと言っても過言ではないのでしょうか。いいえ、過言です。
やってなかったらまたその時点で不採用でしたので、過去の失敗を活かして勉強してて良かったと心底思いました。
まぁ今度は数学がボロボロだったので、そっちの勉強が待ってるのですが()
プログラマーは競技プログラミングはやるべきなのか
これについては個人の捉え方ですのであくまで一意見として。
もともと中学生の頃からプログラミングをしている私は、「実装力」についてはある方だとイキって自負していました。(実装力って何?)
ですので、過去の私からすると、「競技プログラミングで求められるはあくまでアルゴリズムへの知識と数学的素養に過ぎず、実際のアプリ開発で役に立つことは殆どない。これだけで『プログラミング』コンテストという、プログラミングの力を定量的に測れるツールだと言われるのはちょっと…」という扱いに過ぎませんでした。
実際にちゃんと始めてみても、やはり競プロの内容が(私の務めているような製造業の製品開発の範囲では)実務で役に立つような場面は少ないと思います。
※最低では緑色になるまでは勉強したほうがいいです。そこまでは基礎的なプログラミング実装能力です。
ただ、論理的思考力を鍛えるトレーニングやプログラミングを始める切っ掛けとしては素晴らしいものであり、勉強することで出来ることの幅は確実に広がります。
私の趣味のロボット開発でも経路探索などはアルゴリズムの領域ですし、今後はこのあたりも勉強していきたくなりました。(マイクロマウスやりますかね…)
あと、製造業でも研究チックなところであれば役に立つかもしれません。
何が言いたいって、実務で役に立つかどうかは知らないけど、結局楽しかったらやればいいってだけです。
競プロ以前にプログラミング自体がイヤイヤやるものではないですし、何よりも楽しみながらやれることが大切だと思います!
業務でイヤイヤやってる人は知りません。嫌なら転職すればいいと思います。
今後
次は黄色コーダー目指して全力か…というと、ちょっと怪しいです。
(長期的目標としてはYesですが)
というのも、私にとってプログラミングは何かを達成するための手段であって、それ自体を目的としてモチベーションを維持することは難しそうだからです。
※プログラミング・アルゴリズムそのものが趣味であることを否定しているわけではありません。
今後はロボット関係のアルゴリズムを勉強し、そこでより基礎知識が必要となれば、再び競プロの勉強に専念しようと思います。
あと数学。大学の数学やり直します…
勿論、アルゴリズムの勉強を全くしないわけではないですし、今後も精進は続けていこうと思います。
今後とも宜しくお願いします。
あっ、転職活動中です。
青コーダー欲しい方よろしくおねがいします。
ロボットと電子工作とプログラミング!
女の子は甘いもので出来てる?