見出し画像

プログラミング言語の習得を「外国語の習得」と同レベルに考えている人たちが主に挫折している、そうではない、もっと低レベルで、プログラミング言語の正体は「方言」でしかない|小さきアプリ屋の悩み

プログラマの在籍していない他会社の役員から、プログラミング学習について相談された。理由は、社員にプログラミング学習を実施し、簡単なプログラムくらいは自社開発したいから、とのことだった。

「Javascript」を覚えさせれば、問題ないか?

と聞かれたのだが、これは典型的な、プログラミングを知らない人たちの質問だ。この会社から、いくつか案件を請け負っているのだが、殆どの案件が、

・サーバサイド(PHP)
・クライアントサイド
 ・Angular(Typescript)
 ・Android(Java)
 ・iOS(Swift)

という構成になっている。

うちの会社は小さいので、必然的に、一人で全ての開発を行うことも日常茶飯事なのだが、

一度に4言語も並行開発して、エンジニアって大変ですね……?

と言われるが、これもまた、典型的な、プログラミングを知らない人たちの質問だ。極々標準的なスキルを備えたプログラマなら、一度に4言語を扱うこと自体は、全く、大変ではないからだ。

プログラミング学習に挫折する人たちの特徴は、「言語の学習」に拘り過ぎている。以下は、よく耳にする、そのままでは死ぬまで絶対にプログラミングを習得できない人の発言だ。

「Javaの習得、難しい、だから別の言語にする」

「Swiftの習得、難しい、もっと簡単そうな言語にする」

「Javascriptの習得、難しい、流行ってる皆ができてる言語にする」

「Pythonの習得、難しい、何か初心者に最適な言語、教えてくれない?」

はい、残念、この人には死んでも無理である。

「言語の学習」を目的とすると、プログラムは途端に全く理解できなくなる。それは、選択した言語の問題ではないからだ。

プログラミング言語の違いは、日本語と英語と中国語とフランス語の違いとは、全く違う。日本語と英語と中国語とフランス語を同時に学習することは、極めて難しいだろう。

しかし、PHPとJavaとSwiftとTypescriptを同時に学習することは、難しいことではないし、それらは学習するという程のものですらない。

プログラミング学習に挫折する人たちは、「外国語を学ぶ感覚」で学習してしまっている。だから、身構えるし、勉強の方法が、「外国語を勉強する方法」になってしまっている。

プログラミング言語の正体は、「方言」だ。

例えば、東京弁の人が、大阪弁の人と話をして、意思疎通ができないことはないだろう。たまに、「方言」が混ざっていて、理解できない言葉もあるが、その場でその理解できない「方言」の意味を知って、それで簡単に解決できる。

津軽弁の人と話をして、理解できない「方言」が多いな、とは思っても、外国人と話をする程ではないだろう。分からなかった言葉はその場で知ればいい。すぐに同じ日本人として意思疎通ができるようになる。

プログラミング言語の学習とは、まさに、そういうことだ。幸い、日本では英語の義務教育があるので、英単語や簡単な英文は読めるはずだ。プログラミング言語は、殆どが英語だ。英単語の意味から、おおよそ、何が書かれているのかが推測できる。JavaとPHPの違いは、イギリス英語とアメリカ英語の違いくらいの、極めて些細な程度のことなのだ。そしてプログラミング言語とは、英単語の羅列でしかない。

つまり、学習すべきは、「言語」ではないということだ。

では、何を学ぶのが正しいのか、

それは、プログラムの「完成の仕方」だ。

私は本当に驚いているのだが、プログラミング「言語」の学習サイトやサービスはあっても、プログラムの「完成の仕方」を提供しているところが殆どない。

数学が嫌いで、苦手だった人はいないだろうか?

それは何故か、至極単純だ。その覚えた数学を、何に使うのか知らないし、教えてくれないからだ。その数学をどのようにして使っていくと、最終的に、何が完成するのか、教わらないので、何も想像できないからだ。

プログラミング「言語」の学習とは、まさにその悪しき状態だ。「言語」を習得しても、その習得した「言語」によって、どのような道筋で、プログラムが「完成」するのか、さっぱり理解できない。だから「言語」は全く頭に入ってこないし、いつまでもプログラムが何なのかすら、分からないままだ。

これは私が、業界1ヶ月目に気がついたことで、今、標準的なプログラマとして活躍している人たちもまた、同じく、すぐに気がついたはずだ。「言語」を覚えようとしても何も頭に入って来ない、プログラムを完成させて、アプリを誰かに使ってもらうことを目的にすると、途端にプログラムが完成できるようになる。そして、後から、「言語」の意味が分かってくる。

そう、「言語」は、後から理解できるもので、プログラムの完成を体験するのが何よりも先だ。

もしかしたらこれは、日本のクソ以下の英語教育が、とんでもない弊害を招いているのかもしれない。あれだけ英語の授業を受けて、どれだけが英語を話すことができているのか?

英語は話すことが何よりも先で、文法などは後から理解できるものだし、後から知ればいい。

今、多くの彷徨うプログラミング学習遭難者たちは、考え方を即刻、変えなければいけない。

開発現場の多くでは、エンジニアは、言語の意味をそれほど理解していない。理解していなくても、プログラムが完成できるからだ。プログラムが完成できて、サービスを世に提供できれば、それが全てだからだ。

日本はまた、英語教育の不毛な時間浪費を、プログラミング学習にも忠実に再現していて、思わず笑ってしまった。学習能力が高いのか低いのか。

食費入力のみ家計簿アプリ「食費簿」、自慰管理アプリ「アイナーノ」、どちらも御陰様で好調です。より良いアプリ開発に役立てます。