今日から君も言語クラスタ

言語クラスタって?

初めまして、樅山柚子と申します。中学三年生です。趣味はプログラミングです。
言語クラスタを知っていますか?プログラミングをする動機は人によって様々だと思います。サービスを開発したい。人の役に立つものを作りたい。新しい言語を作りたい。競技プログラミングをしたい…etc。
言語クラスタはプログラミングをする動機の一つに、「とにかく言語を習得し、楽しみを見出す」ことがある人たちです。(言語クラスタの定義は人それぞれで、主観に過ぎません。)
言語クラスタが習得する言語はプログラミングに限ったものではなく、自然言語、中国語やロシア語、マイナーなものならルーマニア語や、人工言語ではありますがエスペラントなどの習得に楽しみを見出している人います。
今回は、プログラミング言語クラスタに絞ってお話をしたいと思います。

注意

最初のプログラミング学習に言語クラスタ的学習は向いていません。まず最初の一言語はしっかり学びましょう。
その最初に学んだ言語は、今後プログラムを書いていく上で大切になることが多いです(学習時間的に一番詳しくなる可能性が高いからです)。
また、ある程度のコーディング力がないままたくさんの言語を学んでも、サービス開発やアルゴリズム力などはつかないと思います。そして、一つ基盤となる言語がないと、言語クラスタ的な学習は途中で面白くなくなる可能性が高いです。

例えば(私)

プログラミング言語クラスタは、とにかく様々な言語を習得します。それは、実用的なのか?サービス開発に用いるのか?という視点ではなく、単純に習得できる言語が増えると世界が広がるから、といった理由や、言語ごとの構文の差分が面白い、といった理由まで、様々です。
私は、C,C++,C#,Java,Kotlin,PHP,JavaScript,HTML,CSS,Scss,Haskell,Ruby,Python,Swift,Processing,CoffeeScript,VBA の、17言語で遊んでいます。もちろんこれらを完全に理解しているわけではなく、チュートリアル終わるくらいまでなら書けますよ、といった初心者レベルのものから、この言語でサービス作ってますよ、という中級者レベルまでのものが混在していますが…
とにかく、基礎的な構文をザーッと覚えて、何ができるのか、どんなことに活かせるのかだけ知って、一旦学習を終了しています。作りたいものができたら土台の上に積み重ねていけばいいのです。
今年は残り7個の積み言語があります。普通に一年間で7個言語を習得しろ!と言われるとなかなかにハードルが高く、「完全理解」を自然にイメージしちゃいがちですが、まずは基礎構文だけ覚えて、その言語の特色を掴みます。その時点で、1カウントしてしまいましょう。気軽に言語を積み重ねていくのです。

で、言語クラスタの何がメリットなの?

色々あるので絞ります。

言語を習得すればするほど、新しい言語の習得が楽になる

例えば、私が最初にプログラミングを始めたのは中学一年生の時で、Life is Tech!キャンプでJavaを学びました。そこから派生して、UnityをやるためにC#、iOSをやるためにSwift、と派生していったのですが、JavaとC#はかなり構文が似ています。RubyとPythonは少し構文が似ています。JavaScriptをやれば、AltJSのTypeScript、CoffeeScript、PureScript(これは少し考えものですが)の習得も容易になります。
だんだん言語を習得するごとに、大まかな言語ごとのイメージがつかめてきます。例えば、大きく三つに分けるなら「オブジェクト指向」「関数型」「手続き型」でしょうか。オブジェクト指向の色が強いJavaを先に学習したのであれば、Rubyも構文こそ違えど考え方は似ています。
様々な言語の特色をかいつまんで学んでいくと、次の言語の習得も楽になり、制御構文などは飛ばして、各言語ごとの特色に注目して学習し、基礎を終えることができます。これは、学習すればするほど新言語の学習は楽になります。もしあなたが新しいプロジェクトで言語が必要になっても、言語クラスタ的学習を続けていれば、すぐにその言語に馴染むことができるでしょう。

なんでもできる

これは本当に推したいのですが、自分が作りたいと思ったプロジェクトに対して、すぐに開発が始められます。多くの言語の基礎をかいつまんで学習しておくことで、フレームワークの学習や、中級以上の学習から始めることができ、さらに複雑なプログラムを別の言語の視点から考え、実装に持っていくこともできるので、開発がよりスムーズになります。Webアプリを開発して、Android、iOSに移植して、UWPを開発して…のような普通では驚くような芸当が可能になります。やってます。やりましょう。
様々なプロジェクト、OSSにも参加しやすくなります。

自己肯定感が得られる

私に限った話ではなく、自己肯定感がとても低い方、いると思います。Twitterを見ていれば、自分より年下や同級生で凄まじい技術を持つ人と自分を比べてしまい、嫌悪感を感じることもしばしばあります。かなりこれは精神的に響きます。
しかし、そうはいっても私は17言語かけるし?といったささやかなアドバンテージになります。自分を認めることは非常に大切ですが、言語クラスタになれば自己肯定感は増えます。

でも、言語クラスタになるの、難しいんじゃないの?

いいえ。
難しくありません。まず月曜日に今週はこの言語を勉強しよう!と決めましょう。そして、基礎から勉強します。最初のうちは制御構文など、丁寧に学習したほうがいいでしょう。学習リソースなどもたくさんインターネットにありますし、不安ならば技術本を買いましょう。
そして一週間言語学習を続け、コードをGithubに上げます。これは、芝によってモチベーションを保てるようにする意味も、アウトプットとしての意味もあります。
一週間のうちには、ある程度一日一時間勉強したとしても、制御構文〜オブジェクト指向ならばクラスについて、位までの学習はできると思います。(できなければ、2週間目に突入しても大丈夫です)
そしてある程度まで学習を進めたら、深掘りしないでその言語の学習をやめ、新しい言語を探しましょう。
それを数ヶ月続ければ、あなたも立派な言語クラスタです。7~8言語、基礎だけでもかけるようになっているのではないでしょうか?

最後に

言語をたくさん覚えること自体に楽しさを見出しているので、多くの方に賛同し得る考えではありませんが、もし「学ぶこと」自体が好きな方は時間があるときにチャレンジしてみてください。
p.s.
プログラミング言語一覧
大学生が終わるまでにここに載っている言語の基礎学習を全て終える予定です。すでに完了者がいらっしゃいましたら、お話を聞かせてください。