注意事項
この記事には以下の要素が含まれます。苦手な方はご注意くださいね。
- Pythonへの熱いdisり
- C言語なんてなかった
- JDK問題について深く知らないので怖がっている
- いわゆる関数型言語に言及しないスタイル(
F#
とかScala
とか?)
はじめに
という記事が出ているのですが、C++erとしては遺憾の意を示さざるを得ません。そのうえでこれからプログラミングを始める人におすすめする言語を紹介します。え、C++?初心者にはおすすめできません。
初心者におすすめする言語が満たすべき要件
- 人口がそこそこいる
- Windowsでも容易に開発環境が構築できる
- 動作結果が目で見てわかる
- コンパイルしなくていい
- 言語規格が少なくとも5年以内に更新されている
- 言語規格が後方互換性を備えていること
- 日本語資料が豊富にあること
- 非力なPCでも開発できる
人口がそこそこいる
プログラミング言語を作っている人もたくさんいるので無限にプログラミング言語は存在し得るわけですが、さすがにある程度ユーザー数がいない言語を薦めるわけにはいきません。
Windowsでも容易に開発環境が構築できる
例えばPythonはなぜかWindowsだと動かないという事態によく遭遇します(私だけ・・・?)。初心者にエラー文を読んで原因を切り分けさせるのは無理です。
他の言語でもWindowsで完璧に動くぜ!って言うのは以外と少ないです。Rubyはだいぶ頑張っていると思いますがそれでも特に音声やグラフィックが絡むとcannot load such file
と言われがちです(なぜかmsys2 mingw64 rubyでruby2dが使えない、チャットで問い合わせ中)。
動作結果が目で見てわかる
初心者はコンソールなんてまともに扱えませんし、"Hello world!"っていう文字を見せられても感動できません。
なんか図形が動くとかそういう視覚に容易に訴えられるのが望ましいです。
C++はGUIを作るのが極めて難しいのでこういうのは無理です(2D graphics標準化は頓挫したしな)。
言語標準ライブラリに2D描画ライブラリがあるか、十分メンテされてユーザーが居る2Dライブラリがあることが望ましいですね。
コンパイルしなくていい
コンパイルはなれている人でもやっぱり面倒だと思います。もちろんいろいろ自動化することは出来ますが、自動化を組むのが今度は面倒です。
ちなみに面倒くさがれない人は多分プログラミングにあまり向いていません。
言語規格が少なくとも5年以内に更新されている
プログラミング言語も切磋琢磨し日々様々な改善がなされているべきです。ある程度保守的なC++ですら3年おきに更新しているんですから5年経っても更新されない言語は死んでます。え?C言語?2017年末にC11と全く同じ内容をリネームして出してたけどあれはないでしょ。
言語規格が後方互換性を備えていること
初心者が頑張ってググって出てきた情報どおりに書いて動かそうとしたら動かないとなるとモチベーションが吹き飛びます。初心者じゃなくても心が折れます。セキュリティ上の懸念などからdeprecatedになる機能が出るのは仕方ないとしても、Pythonみたいに巨大なbreaking changeを噛ましてくる言語はおすすめできません。
日本語資料が豊富にあること
ただでさえわからないプログラミング言語を学ぶのに、自分の母国語じゃない資料で勉強するとか脳みそがパンクしてしまいます。
非力なPCでも開発できる
プログラミングするのに15万超えるようなPC買えと言われても多くの人は困ってしまいます。Unityとかは結構メモリー持っていくのでつらそうです。一般に出回っているPCはメモリーが4GBのものが多いです。
おすすめしたい言語
これらを満たす言語を残念ながら私の狭い知識では一つしか上げることが出来ませんでした。
JavaScript
ブラウザ上で動くのがやっぱり大きいです。Canvas APIを叩くことで図形が描画できます。実行環境をブラウザにすることで、ChromeかFirefoxを入れてもらえば(運が良ければすでに入っている)ほぼセットアップが終わります。
そのままのJavaScriptを使ったブロックくずしゲーム - ゲーム開発 | MDN
というStep-by-StepでCanvas APIを使う資料がなんとMDNにありますし実に良いです。
言語の人口も計算不能なレベルで大きく、開発も盛んです。
おすすめしたかった言語
Ruby
Ruby自体はかなりいい言語で、日本語資料も開発者が日本人ですからたくさんあります。グラフィックではRuby2dが結構良さそうなライブラリなんですよね、動けば。うごけー。
おすすめできない言語の例
C++
C++erが言うんだから間違いない(確信)。Visual Studioはコンソールアプリケーションを作る分には手順を簡単にしてくれますが、外部ライブラリを使うには不向きです。外部ライブラリをまともに使うにはCMakeという別の言語の助けが必要になります。ものすごく難しいってわけではないですが、他の言語より難しいのは確かです。
C++自体もC++17以降を使う分には極端に難しいということはないと思うのですが(C++er基準)、何分古い情報が多いのとまともな入門書がないのが辛い気がします。
グラフィックライブラリ自体はopennframeworksとかDXライブラリとかがあります。
C#
Unityはゲーム業界でもっとも使われているライブラリです。これはC#で書くことが出来ますが、Unityで使えるC#のバージョンがものすごく古いという問題がありました。ようやく新しいC#への追従の動きが一昨年くらいからあるわけですが果たしてC#の進化に追いつけるのか・・・?
C#自体はC#7.0とかC#8.0で書く分には悪くないと思いますが古い情報に出くわしやすい印象です。
Java
広く使われている言語で進化を続けています。が!Oracle JDK vs OpenJDK問題を経て(Oracle) JDK8で止まる勢とOpenJDKに移る勢で分裂している気がします。おなじくJVMで動く言語Scala
のドキュメントにはJDK8をいれろって書いてあります。C++erとしては言語そのものよりJVMレベルのゴタゴタが気になってしまいます。
ちなみにOpenJDKは自分でPATH通さないといけない問題はchocolatey使えやって思ってます。
2Dグラフィックは言語標準ライブラリにある気がします。