情報工学と格闘する
公開

何していいかわからない初学者はAtCoderをやるのも手

こんにちは。 早速ですがプログラミング初学者はAtCoderをやるべきではないか、というテーマで記事を書いていきます。

プログラミング初学者は何やっていいかわからない

やっとこさの思いで環境構築するもいきなり表示される真っ暗な画面、何していいか記事を調べるが、専門用語まみれで意味不明..

そういう経験あると思います。というか僕もそうでした。

当然何書いていいかわけわからんので、本屋に行って適当に入門の技術書買って写経する。 で、動くけどなんで動くか理解はしてない。

分厚い本開くのもめんどくさいし、最初はGUIというよりコンソールにひたすら出力する作業。徐々に熱量もなくなっていき..

これも僕でした。

そもそも超初学者あるあるかもしれませんが、画面に何か表示するのがすごいと思いがちなんですよね。

ガワになんかアニメーションが出たり、ボタン押したら画面が切り替わったり。

だからコンソールになんか出力して「これなんか役に立つの?」って成りがち。

でも実は自前でプログラム組んで何かを出力するってすごいことなんですよね。 いつもは裏側で行われているから地味ですが。

プログラムを要求する業界は色々ありますが、確実に血肉になります。

で、本をよくわからないまま写経したりするくらいなら、やることが明確ですぐに結果がわかるAtCoderをやるべしって話です。

AtCoderとはなにか

AtCoderは日本最大級の競技プログラミングプラットフォームです。日本に留まらず海外のユーザも多数参戦しています。

そもそも競技プログラミングってなんぞやって話ですが、ざっくりいうと与えられた共通の課題に対してタイムアタックしたり実行時間の短さで競ったりする感じです。

もちろんAtCoder以外の競技プログラミングプラットフォームは多数ありますので、AtCoderにこだわる必要はあんまりないですが.. ユーザ数や大会数なら段違いですね。

大会(コンテスト)はほぼ毎週開かれており、それ以外にも過去問にチャレンジすることも可能です。

初学者がAtCoderをやるべき理由

初学者がやるべき理由なのはさっきもちょろっと触れましたが、主に3点。

  1. 基礎体力になる
  2. 周りと競ったりレートシステムもあるので、熱量維持ができる
  3. やるべき課題が明確ですぐにコードの合否が出る

1つずつ解説します。

1. 基礎体力になる

先ほども触れた通り、既存コードの写経は頭に残らないのでは?と考えています。

もちろん負荷を下げてコードを書けるってのは大きなメリットですが、果たしてコードを写した後にそれを理解しようと努められるだろうか..

俺は無理でしたね。とにかくサボり魔なので、面倒臭い。

やはりどれだけ時間がかかろうが、汚いコードだろうが自分で書き出したものの方が圧倒的に学習効率は高いと思います。

AtCoderでは制御構文など基本的なコードを駆使して戦うことになります。言語も好きなものを選択できます。

もちろん実行時間や効率も重要ですが、 そんなの気にせずTLE(制限時間オーバー)にならない限りどんどん書いていけばいいと思ってます。

おそらくある程度の段階で実行時間やアルゴリズムを工夫しなければならないタイミングが来ると思います。 そしたらその段階で必要に応じて学んでいけばよいでしょう。それらも確実に血肉になります。

2. 周りと競ったりレートシステムもあるので、熱量維持ができる

プログラミング学習において熱量維持は重要です。

初学者がなぜプログラミングを学び始めたかといえば、 「なんとなくかっこいいから」「専攻がそうだから」「その職種につきたいから」 という理由が多数だと思います。僕もそうでした。

実際に、具体的に「XXを開発したい!」と強い気持ちを持っている人ってなかなかいないと思います。 というかそういう人は熱量先行で勝手に学習が進むので何ら苦労はないでしょう。

前者の例でプログラミングを学習しようとして、教本や授業で出された課題を開発しようとするも、別に作りたいものってわけじゃないし..

で、段々手が遠のいていく。あるあるだと思います。

AtCoderは常にコンテンスト内の自分の順位がわかります。また、参加者も基本数千人いるので、「この前と比べて順位があがった」「A問題だけではなく、B問題も解けた」 と確実に自分の成長が可視化できます。

レート戦に参加すれば自分のレートグラフも表示されますからね。やはり他者との比較・戦いは熱量につながります。

模試や学校の定期テストでも順位がありましたよね。まさにあれと同じ感覚です。

3. やるべき課題が明確ですぐにコードの合否が出る

僕的にはこの理由が最も大きいです。AtCoderは過去問含めてさまざまな難度の問題が用意されています。

当然初学者だと解ける問題は限られるので、初学者用の問題セットに挑戦すると良いでしょう。

で、内容としては「XXを出力しろ」。色々問題設定はありますが極めてシンプルです。

自分なりにコードを書いて、サンプルの入力で確認し、いけたと思ったら提出..

ここが肝ですが、提出したらすぐに判定結果が現れます。で、AC(合格)以外なら修正して再度提出です。

で、何度もやり直した結果AC(合格)が現れます。その時の達成感といえば何者にも変えられません..

ACさえ出てしまえばもう終了です。もちろんもっと最適なアルゴリズムは絶対あるんでしょうが、まあ実際に別問題で困った時に見直しすればいいです。(ちゃんとやる人は偉い)

というように一連の流れが極めてシンプルなんですよ。

**実際の個人開発って答えもなく、終わりもないんですよね。**やり続ければどんどん良くなるんでしょうが、どこで合格ラインなのかは自分で判断するものなんで初学者は中々難しい。

AtCoderなら合格ならAC,ダメならWA・TLEなどと、やることや結果確認が非常にシンプルです。

まとめ

僕の失敗談も交えて書いてみました。

今はセコセコAtCoderに精を出して頑張っています。やっぱ楽しいんですよね。

暇な時でも適当に問題ページ開いて「これ1問だけ解くか」ってなります。

すぐ始められるし、結果もすぐわかりますからね。なんなら環境もブラウザ上で全て完結してしまいます。

この手軽さ・目的の明確さこそAtCoderもとい競プロの魅力ではないかと思います。

もちろんAtCoderではなく各々開発したいものが見つかったらそっちに注力すればいいと思います。その間の繋ぎにもなりますし、別に並行してやってもいいですからね。

特に文法や記法がわからないで手が止まってしまう初学者も多いと思うので、AtCoderは手を動かしてコードを書く場としてはうってつけなんですよね。

また、初学者こそAIコーディングに手を出してしまいがちですが、デメリットも大きいと思っています。今後はその辺りについても触れた記事も出そうと思っています。

ではこの辺で