「プログラミング」って、難しそうなイメージはありませんか。
もちろん、分野や方向性によっては一筋縄ではいきません。
一方で、クイズ感覚で学べる「競技プログラミング」というものがあります。
書籍やネットなどで、じっくり勉強することが苦手な方におすすめです。
競技プログラミングの概要
すごく簡単に言えば、出された課題を解くプログラムを作成し回答するものです。
それぞれの問題も、難易度から傾向までバリエーションがあります。
- 人力では回答できない、膨大な計算を機械にさせる問題
- ひたすら繰り返し処理(ループ処理)で解決できる問題
- 発想の転換で、人力でも解決できる問題
- 数学的な知識を要する問題
- 0~100までとんちを効かせる問題
まとめると、知識と頭をフル活用して早く正確に回答を目指すということです。
[実は]実際に仕事に直接役立つことは珍しい
私自身は、学生自体に少し競技プログラミングをやっていました。
※紹介しておいてなんですが、成績は優秀でなかったです。
当時から、仕事に役立つ/役立たない理論はありました。
これに関して言うと、様々な意見があるのは承知しています。
個人的な意見を書くと「無駄にはならない」程度だと考えています。
求められることは、”とにかく”早く正確に問題を解くこと
「早く正確に解く」、これだけが正義といっても過言ではありません。
つまり、殴り書きメモのようなコードでも動けばOKです。
仕事では、プログラムを複数人で開発します。
競技で求められるコードと、仕事で求められるコードは全く違うということは覚えておきましょう。
※もちろん、バグありはどちらもダメです。
動くのが前提にはなります。
脳トレ型プログラミングで、応用力を身につけよう!
数学の知識を求められることは多いものの、公式を知っていれば解けるというものではありません。
難しい問題では、必ず一工夫や二工夫を必要とします。
仕事でも、必ず課題は出てくるでしょう。
発想を変えて乗り越える経験は、仕事でも役に立ちます。
また、早く正確にコードが書けるようになれば、効率も向上するでしょう。
「仕事に役立つ」を一番の目的にすれば遠回りと言わざるを得ない…
研究職や画像、AI系のライブラリ開発などの一部には直接生きるかもしれません。
ただ、アプリ開発やシステム開発者などへの恩恵は大きくないと考えています。
アプリを作りたいならアプリの書籍などを買って勉強するのが最も近道です。
システムの開発をしたいなら、言語を軽く触った後フレームワークを学習しましょう。
ある意味「量より質」を求められる、研究職寄りの分野で役立つ経験だと思います。
一番を目指すには学力が必要
プログラミング上位者は、高学歴が多いです。
難易度が上がると数学を使うので、仕方ない面があります。
もし一番を狙うなら、数学科や独学で深く学ぶ必要がでるかもしれません。
本気で取り組みたいなら、大学や学部も意識しましょう。
ビジネスの課題は「技術力」<「人的課題」
そもそもビジネスで直面する課題は、案外プログラムが原因ではありません。
「簡単でしょ?」と難題が振りかけられること。
担当が変わったら180°変わった、なんてこともあります。
プログラミング能力よりも、要件定義や設計段階、あるいは人的な課題が多いです。
競技プログラミングは、頭の体操をしながら能力を養う、程度のものと考えてください。
実は就職に有利?
ここ何年かは、採用に競技プログラミングを活用する企業も出てきています。
そこに人材を見出す企業には、就職面でも役立ちそうです。
ただ、決まった会社・分野がある場合は関連技術を学びましょう。
どうしても抽象的な問題解決になるので、学力重視の場合以外は最適解でないと思います。
※結局面接官が得点とするか、にかかっているのでその懸念もあります。
競技プログラミングは目的が決まっていない方にこそおすすめ
上記の内容では批判色が強いかもしれませんが、「楽しみながら学ぶ」という手段において有用だと考えています。
こちらについても異論はあると思いますが、プログラミングを学びたいがどこから手を付けていいか分からないといった方におすすめしたいです。
プログラミングの言語を学ぶ書籍やサイトは多数出ていますが、「この後どうするの?」となることがあります。
あくまで言語はプログラムを記述する手段であって目的ではないので、サービスや製品などの形で成果物が必要になります。
具体的な目標が決まっていない中で、楽しみながら勉強を続けていくには良い教材ではないでしょうか。
競技プログラミングで鍛えるのは「コーディング力」
競技プログラミングでは、同じような問題でも解くたびに理解が深まり段々と洗練されていくはずです。
無駄がなくすっきりしたコードは、バグを生みにくく修正しやすいコードになりやすいです。
ガシガシ問題を解いて、コーディング能力を鍛えてみましょう。
ちなみに競技プログラミングでコードを圧縮するための「テクニック」(中括弧の省略や一行に全部書くなど)がありますが、仕事でやると他人が読めなくなります。それは競技中だけにしておいてください。
競技プログラミングの始め方
step
1エディタまたは統合開発環境(IDE)を用意する
競技プログラミングを始める前に、開発環境の準備が必要です。
回答を提出する前に、サンプルのデータできちんと回答ができるかを確かめます(デバッグ)。
特定のキーワードを強調したり、エラーか所を指摘したりとかなり便利なので、必ず入れておきましょう。
用意するものは、エディタでもIDEでも構いません。
エディタはEdit(編集)が目的で機能が控えめで、IDEは開発をする「環境」ごと提供するものなので最初から完結をしています。
最近のエディタは性能が高くデバッグも可能で、個人的にはエディタの方がおすすめです。
IDEに比べ軽量で起動や動作も早いのですが、最初から全部載せのIDEよりも事前の設定が必要になりがちです。
扱うプログラミング言語の特性もあるので、学びたい言語を選んでから決めてしまっても良いと思います。
OS、言語を問わず及第点を取れそうなものは、「Visual Studio Code」ですね。
仕事でも現在進行形で使っている優秀なエディタです。
step
2サービスに登録する
後述する競技プログラミングのサービスに登録します。
ゲストでもできるものがありますが、お試し後はログインして使った方が早いです。
step
3簡単な問題を解いてみる
開発環境とアカウントを用意したら、後は問題を解いて提出するだけです。
HelloWorld的なテスト用の問題があると思うので、まずはそれをやってみましょう。
問題の流れが理解出来たら、後は好きな問題を選んでガシガシ解いていくだけです。
step
X問題に詰まったら
学校のテストではないので、解答があれば見てしまうのもありです。
また数学的な知識や、色々なアルゴリズムの知識が求められます。
問題を解きながら、知識を養っていきましょう。
競技プログラミングサービスの例
レビューできるほど色々なサービスを利用してはいませんが、いくつか主流なものをご紹介します。
下記の内のどれかを選んでおけば無難だと考えています。
導入のハードルが上がるため海外サービスは紹介していません。
- AtCoder
言わずと知れた競技プログラミングのサービスです。
日本の競技プログラミングサービスと言ったらこれです。
コンテストが豊富で競い合うのが好きな方にお勧めです。 - AIZU ONLINE JUDGE
古参の競技プログラミングサービスです。
カテゴリ毎に問題が選べるので、とっつきやすいと思います。
この記事で推奨している楽しみながらという目的であれば、一番使いやすいと思います。 - paiza
就職サービスに力を入れているサービスです。
企業からの推薦も得られるため、就職を同時に叶えたい場合におすすめです。
ただし前述している通り、就職に対して競技プログラミング自体が遠回りであるため手段と目的が合っているかは確認しておきましょう。
まとめ: 競技プログラミングは楽しみながら勉強できることに尽きる
万人には薦められませんが、入門の一つとしてはアリだと思います。
例えば、目的が決まっていないが、プログラミングは勉強したいという方です。
ちなみに、この記事を書いたきっかけは、久しぶりにやりたいと思ったからです。
今となっては仕事にはつながらないため、趣味の範疇を超えません。
やってみると意外と面白いので、既にプログラマーの方も興味が出たらやってほしいと思っています。
まあプログラマーが取り組むメリットは、、、ちょっと思いつかないです。
メリットばかりに目を向けず、息抜きに一度いかがでしょうか。