今日勉強したことを
つらつらと
logo

初心者におすすめのプログラミング言語は?【AtCoderを始めよう】

2020/05/19 19:05
AtCoderに向いてる言語は?

AtCoder などの競技プログラミングは、C++(シープラプラと呼ばれる事が多い)をおすすめされます。一体どうしてなのでしょうか?

# C++入門 AtCoder Programming Guide for beginners (APG4b)でも C++をおすすめされています。

そもそも C++とは+

世界で一番普及しているC 言語の拡張版です。C 言語はすごくコンピュータに優しい言語です。ほぼマシン語といっても過言ではないでしょう。コンピュータにやさしいので、しょぼい CPU でも動きます。実は炊飯器やエアコンといった家電にもショボいコンピュータが入っています。こういうショボいコンピュータ向けのソフトウェアには、ほぼ確実に C 言語で作られています。

ショボいものだけでなく、今あなたが使っている PC やスマホのソフトも高確率で C 言語が使われています。Windows も Linux も Android も C 言語でできています。OS はスピードが速くなければならないので、コンピュータの気持ちを人間が考えて作ります。それに向いているのが C 言語というわけです。

C 言語では「値を 1 増やす」ためだけの命令があり、プラスを 2 個ならべて「++」と書きます。C 言語を 1 つ拡張したような言語だから C++です。C++は C 言語に比べてスピードは遜色ないのですが多機能です。多機能なことはメリット・デメリット両方あります。知らないところで少しだけ多くメモリを使用してしまう場合があります。

競技プログラミングでの C++

競技プログラミングは前述したように、処理する速さも重要になります。C++は速度が速く、多機能だから好まれます。

また、競技プログラミングをしている人の多くが C++を使っていることもメリットの一つです。AtCoder の公式の解説記事や他の人のブログ、あと他の人の提出結果を読もうと思ったときにも C++を使っていると自然と読めます。

デメリット

C++で書いたコードは読みづらくなる傾向があると思います。暗黙的も多く、非常に自由度が高い書き方ができます。競技プログラミングはプログラムを書く速度も重要になりますが、C 言語や C++では短縮して書けるようにマクロという機能があります。マクロは上の方で省略記法を書いておくと、本文で省略記法が使えるようになります。マクロを使うとどうなるかというと・・コードが短くなって、書いた本人じゃないと読めないコードが出来上がります。略語が大好きで、なんでもかんでも省略して喋ってしまう人がいますが、あんなかんじです。チョベリバ。

他のおすすめ言語

ruby

通常であれば、初心者にはRuby(ルビー)をおすすめしています。Ruby のテーマはenjoy programming(プログラミングを楽しもう!)です。そのとおり、書いていたらなんだか楽しくなってくる言語です。

しかし Ruby には、遅いという弱点があります。C++と比較すると処理が 2 ~ 3 倍遅くなることが多いです。今のコンピュータは十分に速いので、3 倍遅くなって困ることは少ないです。例えば大規模な Web サイトを構築しても、Twitter クラスの大規模さにならないと困ることは少ないです。競技プログラミングは数少ない処理速度が遅いと困る遊びです。2 倍速度が違うと、出題者が意図したアルゴリズムでも時間オーバーで NG になる場合があります。

Python 3

C++の次に競技プログラミングで人気の言語です。競技プログラミング以外だと、世界で一番プログラマに人気の言語です。(C 言語は使われているが、書きづらいので人気はそうでもない)

Pythonの特徴は、なんといってもライブラリの豊富さです。特に人気なのがNumPyというライブラリで、数値計算に非常に強いです。特に競技プログラミングで扱うような、大量のデータを効率的に計算するような処理に向いています。NumPy を使いこなすと、数学に強ければプログラミングがさほど上達しなくても競技プログラミングで高得点を出せるようになります。

C++は競技プログラミングのほかで使うことはあまりありませんが、Python は様々なシーンで役立つのも魅力です。今話題の人工知能は Python がスタンダードですし、https://docs.djangoproject.com/ja/3.0/のような Web アプリケーションフレームワークもあります。また、競技プログラミング以外にもプログラミングのコンテストがあり、データ分析のコンテストもあります。データ分析では NumPy や表計算のようなデータを扱うデータフレームが有効で、Python はpandasというデータフレームで最も人気のライブラリを使えます。

特にこだわりがなければ C++がおすすめ

Python も十分高速で Numpy も便利なので、良いことは良いですが、プログラミングの醍醐味が少ないように感じます。Python を使いこなすのは、少しプログラミングの本質とズレた感覚があります。Python を使いこなしたさまを表すPythonicという言葉も用意されており、Python を使っている人たちからもちょっと別の感覚という自覚があるようです。

C++はすごく使いやすい言語というわけではないですが、すごくスタンダードなプログラミング言語らしい雰囲気です。C++の知識は他ではあまり役に立たないかもしれませんが、C 言語はマシン語に近く、コンピュータの学習にうってつけです。学習目的からすると、順序は逆になりますが C 言語を覚える前の準備として、C++は覚えておいて損はありません。


© 2021 simodake