駆け出しエンジニアこそ競プロをやれ
競プロとは
競技プログラミングのことで、命題に対するコード実装の実装速度や実行速度、メモリ効率なんかを競い合う大会です。
開催サイトとしてはAtCoderが有名です。
駆け出しこそやれ
いやいや大会って出来る人が出るやつやん
って思ってるそこのあなた。違うんですよ。
私は別に上位で競い合えと言っているわけではなくて、競技プログラミングをやれと言っているだけです。
初学者のやりがちな誤りは
いきなりGUIアプリを作ろうとする
だと思います。
やれWebサイトだったり、スマホアプリだったり、ブラウザゲームだったり。
初学者はいきなりモノを作ろうとする傾向があります。
モノを作るのはとても難易度が高いことです。
そもそもプログラムというのは何かを入力したら何かが出力されるものであり、
モノはその集合体です。
集合体、つまり上記のようなモノを作るためには複数のプログラムを作成し、それらを組み合わせていかなければならないわけです。そりゃ難しいですよね。
Step by Step
最近話題のChatGPTにこのキーワードを与えると難しい命題にも答えてくれるようになるそうです。
我々人間も同じで、効率よく学ぶためには正しく段階を踏んでいく必要があります。
まずは1つの関数を完成させることがスタートラインだと考えます。
そのために競技プログラミングはとても有意義な体験を与えてくれます。
先に紹介したAtCoderでは入力が与えられ、その入力をなんやかんやして期待する出力を作れという問題が出題されています。
つまり、関数を1つ作れということです。
もちろん関数1つの難易度は天から地まであるので、難易度が高いものにいきなり挑戦する必要はありません。
難易度が低いものもあるのでそれらをひたすら解いて、関数を作成するという作業に慣れてください。
そうすると業務上のタスクも関数の集合体であることに気づけるようになると思います。
成功例
去年、プログラミングのプの字も知らないようなエンジニアに対し、とにかくAtCoderをやれという課題を提示して、そのコードのレビューと解説だけを壁打ちし続けた結果、半年後に業務で活躍できるエンジニアにまで成長しました。
もちろんその方の努力の凄まじさもひとつの要因ではありますが、手法も間違っていなかったんだと思います。
競プロで得られない経験
競技プログラミングでは入力と出力が決められている関係上、要件からどんな入力があり得るのかを想像する力やどんな出力をすべきかの是非についての経験を得ることができません。
業務ではもちろん、入力と出力についてもどうあるべきかを考える必要があります。いわゆる設計フェーズです。
これらを任せてもらうためにはコードを書けるという前段が不可欠です。そこを鍛えるのに競技プログラミングは非常に役立ちますので、ぜひトライ。
競技プログラミングは怖くない
Discussion