プログラミングの練習をしている人はたくさんいると思います。
そして自分の実力が上がってきた時に、「自分のレベルは今どの程度なんだろう?」と気になると思います。
そこでこの記事では、プログラミングの問題を解いて自分のレベルを測れるWebサイトを3つ紹介します。
- Paiza
- AIZU ONLINE JUDGE
- AtCoder
それぞれ見ていきましょう。
Paiza
Paizaはプログラミングの練習問題がたくさん用意されているWebサイトで、次のような特徴があります。
レベルごとに多くの問題が用意されているので、自分のレベルにあった問題を解きながら段階を踏んで練習を積むことができます。
問題はD、C、B、A、Sの5つのレベルに分けて用意されています。回答ごとに採点され、スコアが表示されます。簡単に述べると、D問題は基本の演算、S問題は複雑なアルゴリズムの実装というイメージです。
レベルによって解答できる時間も変わり、最短で20分、最長で2時間の解答時間が与えられています。この時間を過ぎても回答できますが、遅れた時間の分だけ、スコアを減点されるシステムになっています。つまり問題を正確に速く解く能力が試されています。
Paizaではユーザが解いてきた問題を元に、ランクが付けられます。
このランクは基本的には問題のランクと同じようにつけられていて、例えば A問題をある程度こなすと、ユーザーのランクもAになります。
Paizaには新卒・中途それぞれの求人サービスが用意されています。
企業がユーザーのランクをみてオファーを出すのですが、もちろんランクが高い方がより多くのオファーを獲得できます。企業の中にはSランクのユーザーだけを欲しているもあります。レベルをあげて就活を有利に進めましょう!
ちなみに僕自身このサービスを利用したのですが、オファーを受けたとき、自宅と会社が遠い場合であればSkypeで面接を実施してくれたり、交通費を支給してもらえたりします。頻繁な移動で足が出やすい就活において、これは大きかったです。
就活生のみなさんは是非試して見てください。
AIZU ONLINE JUDGE
AIZU ONLINE JUDGE (AOJ)もプログラミングの練習問題がたくさん用意されているWebサイトで、次のような特徴があります。
- 競技プログラミング向けの問題が用意されている
- 技術ごとに体系的に問題が用意されている
- 他人の回答を見られる
問題は最も簡単な “Hello World!” の表示から始まり、条件分岐、ループ、クラス定義など、技術単位で問題が用意されているため、体系的な能力を身に付けたい人にはAOJが向いています。
例えばこれは最初の1問でHello World!を出力する問題です。
また、C++, C, Javaで問題を解く予定の人には朗報です。AOJは基本的には上の画像のような形で書かれている問題をひたすら解いていくのですが、いくつかの問題にはこのように、Noteが存在します。
これを見てみると、各問に対応した基本文法の解説ページに飛べます。プログラミングを始めたばかりのときは基本文法が体に染み付いていないので、テンプレートを検索してコピペすることが多いと思いますが、わざわざ自分で検索しなくてもその場で必要な解説を貰えるのはありがたいですね。
例えば第一問のC++での解説はこんな感じです。関数の基本である引数や戻り値の説明をしてくれています。
また、人のコードを見て学ぶこともできます。
例えば、こんな感じ。
自分で正解できても、上級者のコードを見てみると自分のものより格段に高効率だったり高速だったりするので、読むと得るものが多いです。
プログラミング力を向上したい人は是非試してみてください。
AtCoder
AtCoderは競技プログラミングの大会を開催しているWebサイトであり、特徴は次の通りです。
- リアルタイムで世界中の人たちと競う大会に参加できる
- 他人の回答を見られる
- 最近は就活に繋がる可能性がある
AtCoerは週に1回程度競技プログラミングの大会を開催していて、その度に世界中のエンジニアたちが凌ぎを削っています。
基本的には100分で4問を解く AtCoder Beginner Contest (ABC) と120分で6問解くAtCoder Grand Contest (AGC) の2種類があります。腕に自信のある方以外はABCから始めると良いでしょう。
大会では毎回順位が決まります。問題ごとに点数が決まっていて、より高得点を出した人が上位になり、同得点ならより速く正解した人が上位になります。
コンテストの問題は、与えられる入力に対して適切な出力を与えるコードを書いて、そのコードを提出させるというものです。Web上で判定され、結果もすぐ見られます。問題は算数・数学の発想力を問う問題が多く、そういうのが好きな人には楽しいはずです。
大会は開始と同時に全てのエンジニアが一斉に問題を解き始めます。大会中は誰が開始何分時点でどの問題を正解したかがリアルタイムで見られます。上級者たちがどんな速度で解いていくのかが見えるので、彼らの能力の高さをリアルに実感できます。この経験は今後の自分のエンジニアとしての目標を考える際に、良い判断材料となると思います。
大会終了後は他人のコードを見られたり、公式の解説が公開されたり、YouTubeで解説のライブ配信が行われたりします。
大会の結果によってユーザにはレートが割り当てられますが、このレートは簡単に言えばエンジニアとしての戦闘力です。AtCoderは日本で主催されている競技プログラミングの場としてはは最も大きく有名です。特にフリーランスエンジニアで個人の能力を示したい人には、AtCoderのレートを示すことも手段として有効だと思います。
まとめ
この記事で紹介したものはプログラミング学習方法のほんの一部にすぎませんし、目的も特に「問題を解くためのプログラミング」としているものばかりです。
ものづくりのためのプログラミングをされる方には他に適した学習手段があると思います。
自分にあった学習方法をぜひ見つけてください。