初心者に「非」おすすめなプログラミング言語

よくネットのフォーラムで、「最初に学ぶべきプログラミング言語は何か?」という話題が投稿され、その度に大変な宗教戦争が起きています。しかしその逆に「初心者が最初に学ぶべき"ではない"言語」は一体何か少し考えてみました。

ここでは、今まで一度もプログラミング言語に接したことが無く初めて学ぶ人を初心者としています。

C言語は絶対NG

「最初に学ぶべき言語」という話題なった時に必ず出てくる「C言語おじさん」がおすすめする「C言語」ですが、全くお勧めできません。

すぐメモリ管理が学べると言い出すのですが、初心者がCでメモリ管理したいことなどまずありえませんし、現代のPCでメモリ管理する必要もありません。(← この記事で一番言いたいこと言いました。)メモリ管理をはじめとしたOSの機能、ハード制御などは、そもそもある程度コンピューターの仕組みと実行モデルを知った上での課題です。初心者がいきなり積極的なメモリ管理をしたいなどという欲求自体が存在しないと思います。

また、相手が小学生の「プログラミング教育」にもC言語を使えとか主張もありますが、これは特にあり得ないと思います。

基本的に、C言語を使用すると、入出力は基本黒い画面に文字のみで視覚的に成果を一切感じにくく、プログラミング学習の鬼門「ポインター操作」と「メモリ管理」がついてきます。従って(やろうと思えば勿論可能ですが)Webサービスやゲーム制作、3DCGのようなサービスや表現の実現から(有名な割に)最も遠い言語です。

基本的に人間の直観に反するハードウェア操作的な視点で言語が作られているので人間の都合を考慮せず、黒い画面に白い文字でHelloWorkdから直後にメモリ管理を云々のため全ての過程で躓く要素を持っています。

また言語自体の歴史が大変長いので「ネット上に新旧情報が散乱」していて、ネット黎明期の不親切な説明や古い情報が大量にあり学習の妨げになります。

C言語自体は決して悪い言語では無いですが、初心者が初めて取り組む言語として選ぶのは不適切と言えます。

C++推しの隠された悪意

C++推しは悪意があるんじゃないかと疑っています。初心者にC++を推薦するのは本当にやめていただきたい。

推薦人は本気で言ってるでしょうか…?

確かに、C++は強力で良い言語です。ただ、前述のC言語の悪いところほぼ全てを引き継いでいて、更に「C++固有の複雑かつ膨大な仕様」が存在し習得難易度は大変高いです。

Cと同じく大変な歴史があり、新旧の規格が複数存在することから、かなり違うように書けますし、ネットでの情報収集も、Cと同じく新旧情報が入り乱れています。C言語よりも格段に難しいので初心者が最初に選ぶ言語として全く不適切と言えます。

というか、C++は人気が最近まで下降気味だったことから、日本語圏で新しい情報発信がやや不活発な事と、ネットで古い情報をつかまされて、新規学習者にも関わらず古い言語仕様を覚えてしまい、最初からレガシー化しているなど悲惨な状態になりかねません。

というか両言語とも、出てくるエラーメッセージが極めて不親切かつ、1か所の誤りで複数個所からエラーは出力されたりするので、エラー内容がコンピューターの解釈として正しくても、人間からしたら全く意味不明な事のほうが多く、その状態から正しい状態に訂正するのにある程度の知識が必要なこともお勧めしない理由の一つです。初心者が書く構文を教育的に指摘する視点が全く欠如しています。

今ほどコンピューターのCPUやメモリ、主記憶が貧弱だったころに考案されたクセのようなものも学習を困難にさせ得る原因の一つです。

その他使用人数が少ない言語はNG

当然人が少ない言語はダメです。Googleでプログラミング言語名入れて明らかに検索件数が少ないものはオススメされても無視しましょう。

例えば、関数型言語(LISP、Clojure、F#など)はダメです。人が居ないというか概念を教えられる人居ないのでは…?今の所、課題を解決するよりアカデミックな用途主体で初心者の実用とは程遠いです。

同様に日本語でプログラミングできる「なでしこ」とかもヤバい匂いがしますね。

翻って、人口最多のJavaはどうかというと、修得用意で情報豊富なので、今のところまだお勧めできますが、Oracleが支配権を得たため、緩やかに衰退していく事を考えると、Javaを選択しても覚えたらすぐ違う言語を選ぶ可能性があります。

つまり何がおすすめか?

おすすめは正直、目的ごとに違います。

これは、プログラミング言語の得意な分野(というかライブラリの発達状況)が言語ごとに違う事で偏りが存在し、同じ目的を達成しようとしても難易度に差が出るためです。それぞれが、プラットフォームのサポート状況や、ツールの状況、情報量、コミュニティなどの要因で変わります。

なので、1つの言語で全部カバーは現実的には難しいです。したがって、学習目的を定めて言語を選ぶ必要があります。

例えば、義務教育のカリキュラムとして小学生に普遍的に教えるならビジュアルプログラミング系の言語でしょうか?Webサイト作りたいならサーバーサイドはPHP、画面側はHTML/CSS/JS, TS、ゲーム作りたいならUnityでC#、業務の補助ならPythonのような選択になると思います。受託で食っていきたいならやはりJavaが良いです。ただ、まぁ、具体的にナニというのはネットの議論にお任せします。

目的さえ決まれば割と簡単ですが、適切に言語を選ばないと業務補助でC言語、ゲーム制作でPHPとか、WebサイトでC++などなど、まぁ…不可能ではないですが、大変な苦労が発生するので目的に応じた手段(道具)を適切に選ぶ事が大切だと思います。