見出し画像

日本語を母国語にする人はプログラミングを勉強するのが大変なんじゃないか

結論:日本語を母国語にする人じゃなくても大変なんじゃないか。

はじめに

日本のソフトウェア産業は遅れているという話がある。広く認識されている言説としては、ハードウェアによる成功体験が抜けていないとか、労働法に関連して内部に技術者を保有するリスクを回避するために開発組織/機能を外部化したことが影響しているなど色々あるかと思います。

本稿においては、そういった歴史的な観点は別にして日本語を母国語にする人がプログラミングを学習するのがそもそも大変なんじゃないか、というのを考えてみるものです。

そもそも自然言語との違い

まず、自然言語と異なり、プログラミングでは、正確性と完全性を求められます。基本的には機械に命令を与えるというのがプログラミングであり、そこには構文上の間違いは許されず、スペルミスなどの人間からすると軽微なものも許容されません。また、コンテキストによって意味が変わるようなことはありません。

書いた通りにしか動かない。何事にも因果がある。バグを発見して、まるで探偵のような気分で原因を究明していったとき、自分が犯人であるという事実に行き着くこともあるのです。

最終的には機械によって処理されるという性質上、自然言語に比べて複雑性/曖昧性は低いように思います。

日本語の面白み

日本語はかなり学習が難しい部類の言語だとされているらしいです。
https://www.emojapan.com/wte/legend4/
(ただ、これは米国務省機関である外務職員局が英語を母語とする者が習得するのにかかる期間を元に各言語の習得難易度をまとめているものであることは留意しておく必要があります。)

何点か面白い事例をあげてみます。

象は鼻が長い
言語学では有名な文です。これを英訳する際、主語の扱いが非常に難しい。「象は」も主語、「鼻が」も主語。こういった二重に主語があるような文章(二重主語問題)をプログラムでは扱うことができません。「象は鼻が長い動物である」といった文章に変換して表現する必要があります。

うなぎ文
こちらも言語学では有名です。ご飯屋さんで、何を食べるかを尋ねられたときに、「ボクはウナギだ」と言っても、人間がウナギだったりするはずがないから誤解は生じません。しかし、文法からすると、ボクは主語、ウナギは述語で、ボクがウナギであると言っていることになる。面白いですよね!詳しく知りたくなった人は題述構造などを調べてみてください。
こちらも「僕はうなぎを選びます」のように言い換える必要があります。同様に、父はお盆です、などの言葉もうなぎ文ですね。

単数か複数か
「古池や蛙飛び込む水の音」も蛙が単数なのか複数なのかというのが曖昧で英文でそのまま記述ができないようです。普段対象が単数か複数かを区別しないのは、データモデリングする時などに癖付いてないと困る気がしています。userテーブルじゃなくてusersテーブルでしょみたいな。

時制が曖昧
「あの人、昨日休みだったけど何か知っている?」
「彼、昨日は病院に行っているよ」
などですね。
「行っている」だけだと現在にも捉えられるところを文脈から過去であると分かるような構造です。こういう特性から日本語は過去時制が弱い言語とされています。

「私はプログラミングをする」
これも習慣なのか未来なのか曖昧ですね。

音で判断できない
漢字がないと意味が伝わらないこともあります。同音異義語が多いのです。日本国立国語研究所の「同音語の研究」では 7803 組あるとのこと。言葉遊びには適しているとも言えますが、プログラムに漢字は使えないです。

日本語ムツカシイ

ともかく少なくとも日本語でプログラムを書くというのは到底難しそうというのは伝わったでしょうか。
また、日本語の要求をプログラムに落とすときには先程のような言語特性を排除しながら、正確性と完全性を担保しないといけないので結構苦労しそうな気がします。
日本のソフトウェア産業は日本語の特殊性によって発展が難しい!とまでは勿論言えないですけれども、面白い思考実験にはなったかなと。

ただ、日本語特殊論は言語学的にはやや否定的な見方らしく、言語は多様なので日本語だけが特別に複雑ということではないということです。
https://www.newsweekjapan.jp/stories/culture/2021/03/post-95900_2.php

あくまで感覚の話ですが、プログラムを書いているときは日本語を書くときとは異なる言語感覚でいる気がしています。当然と言えば当然なのですが、英語を扱うことのできる人もちょっと違う感覚でいるんだろうか?

まぁ、英語を扱うことのできる人がプログラミングを学んだ際、単語の意味は分かるはずなので、そういう意味ではとっつきやすいんだろうなとかとは思います。

書いて覚える、的なことがあるようにある程度身体的な学習も伴っているじゃないでしょうかね。運動神経がよくなるとかってやつも訓練によって神経回路が最短でアクセスできるようになる的なことみたいですし、機械に近い思考をする訓練を手を交えながらやっているというのがプログラミングという行為なんじゃないでしょうか。

じゃあどうすればいいのか

プログラミングをちゃんと別の言語として学習するという考え方が必要なのではないかと考えています。なので、結構時間がかかるよ、と。また、そのためには背景にあるコンピューターサイエンスなども学ぶ必要が当然出てくると思ってます。プログラミング言語ごとの違いって俯瞰してみれば大きな差異ではない気もしているので、学び始めるときにはなんとなく好きな言語や周りに教えてくれる人がいる言語から選んでいくのでいいんじゃないでしょうか。

そんな感じです!

この記事が気に入ったらサポートをしてみませんか?