よくネットのフォーラムで、「最初に学ぶべきプログラミング言語は何か?」という話題が投稿され、その度に議論が起きています。しかしその逆に「初心者が最初に学ぶべき"ではない"言語」は一体何か少し考えてみました。ここでは、今まで一度もプログラミング言語に接したことが無い、初めてプログラミングを学ぶ人を初心者として、そういった人たちに「お勧めするべきでない言語」は何かを考えたいと思います。
C言語は絶対NG
「C言語」おすすめする人が多いですが、これは、全くお勧めできません。
推薦者は割とすぐ、メモリ管理が学べると主張するのですが、初心者がCでメモリ管理したい事などまずありえませんし、現代のPCで厳密にメモリーを管理する必要もありません。(← この記事で一番言いたいこと言いました。)メモリ管理をはじめとしたOSの機能やハード制御などは、そもそもある程度コンピューターの仕組みと実行モデルを知った上での課題です。初心者がいきなり積極的なメモリ管理をしたいなどという欲求自体が存在しないと思います。これらで課題を"効率的"に解決するのには必要ですが、まずは課題そのものを解く事が大切です。
また、相手が小学生の「プログラミング教育」にもC言語を使えとか主張もありますが、これは特にあり得ないと思います。
基本的に、C言語を使用すると、入出力は基本黒い画面に文字のみで視覚的に成果を一切感じにくく、プログラミング学習の鬼門「ポインター操作」と「メモリ管理」がついてきます。従って(やろうと思えば勿論可能ですが)Webサービスやゲーム制作、3DCGのようなサービスや表現の実現から(有名な割に)最も遠い言語です。
基本的に人間の直観に反するハードウェア操作的な視点で言語が作られているので人間の都合を考慮せず、黒い画面に白い文字でHelloWorkdから直後にメモリ管理ポインター云々という全ての過程で躓く要素を持っています。
また言語自体の歴史が大変長いので「ネット上に新旧情報が散乱」していて、ネット黎明期の不親切な説明や古い情報が大量にあり学習の妨げになります。
C言語自体は決して悪い言語では無いですが、初心者が初めて取り組む言語として選ぶのは不適切と言えます。
C++推しの隠された悪意
C++推しは悪意があるんじゃないかと疑っています。初心者にはC++はC言語以上にお勧めできません。推薦者は本気で言ってるでしょうか…?
確かに、C++は適切に使用すれば強力で良い言語です。ただ、前述のC言語の悪いところほぼ全てを引き継いでいて、更に「C++固有の複雑かつ大量の仕様」が存在し習得難易度は大変高いです。部分的に学べばいいという論もありますが、初心者がそれを分類することは不可能ですし、存在する以上目に留まるため部分的という概念自体も困難です。
また、Cと同じく大変な歴史があり、新旧の規格が複数存在することから、使用者によりかなり異なった記述ができるため混乱のもとです。ネットでの情報収集も、Cと同じく新旧情報が入り乱れています。C言語よりも格段に難しいので初心者が最初に選ぶ言語として全く不適切と言えます。
というか、C++は人気が最近まで下降気味だったことから、日本語圏で新しい情報発信がやや不活発な事と、ネットで古い情報をつかまされて、新規学習者にも関わらず古い言語仕様を覚えてしまい、最初からレガシー化しているなど悲惨な状態になりかねません。
特筆すべきは、C/C++とも、出てくるエラーメッセージが極めて不親切です。1か所の誤りで複数個所からエラーは出力されたりするので、エラー内容がコンピューターの解釈として正しくても、人間からしたらメッセージが全く意味不明な事のほうが多く、その状態から正しい状態に訂正するのにある程度の知識が必要なこともお勧めしない理由の一つです。初心者が書く構文を教育的に指摘する視点が全く欠如しています。教える側も「エラーが出ましたー」って言われて出力見てもデバッグが相当大変だと思うんですが…
今ほどコンピューターのCPUやメモリ、主記憶が貧弱だった頃にPCの都合で策定されたような非人間的な言語のクセがあり、それが一層学習を困難にさせる原因の一つです。
その他使用人数が少ない言語はNG
当然人が少ない言語はダメです。Googleでプログラミング言語名入れて明らかに検索件数が少ないものはオススメされても無視しましょう。
例えば、関数型言語(LISP、Clojure、F#など)はダメです。人が居ないとネットに情報が少ない、少し応用的に使うとライブラリが無い、わからないといった事が起こりやすくなるります。今の所、課題を解決するよりアカデミックな用途主体なものは初心者の学習とは程遠いです。
同様に日本語でプログラミングできる「なでしこ」とかもヤバい匂いがします。
翻って、人口最多のJavaはどうかというと、修得用意で情報豊富なので、今のところまだお勧めできますが、Oracleが支配権を得たため、緩やかに衰退していく事を考えると、Javaを選択しても覚えたらすぐ違う言語を選ぶ可能性があります。
最後に、つまり何がおすすめなのか?
おすすめは正直、目的ごとに違います。
これは、プログラミング言語の得意な分野(というかライブラリの発達状況)が言語ごとに違う事で偏りが存在し、同じ目的を達成しようとしても難易度に差が出るためです。それぞれが、プラットフォームのサポート状況や、ツールの状況、情報量、コミュニティなどの要因で変わります。
なので、1つの言語で全部カバーは現実的には難しいです。したがって、学習目的を定めて言語を選ぶ必要があります。
例えば、義務教育のカリキュラムとして小学生に普遍的に教えるならビジュアルプログラミング系の言語でしょうか?Webサイト作りたいならサーバーサイドはPHP、画面側はHTML/CSS/JS, TS、ゲーム作りたいならUnityでC#、業務の補助ならPythonのような選択になると思います。受託で食っていきたいならやはりJavaが良いです。ただ、まぁ、具体的にナニというのはネットの議論にお任せします。
目的さえ決まれば割と簡単ですが、適切に言語を選ばないと業務補助でC言語、ゲーム制作でPHPとか、WebサイトでC++などなど、まぁ…不可能ではないですが、大変な苦労が発生するので目的に応じた手段(道具)を適切に選ぶ事が大切だと思います。