はじめに
日本語はプログラミングに向いていないと誤解される理由はいくつかあります。多くは自然言語の日本語や英語と形式化されて構造化された言語のプログラミング言語をやや混同して考察することを由来とします。また、実装する側の視点でしかプログラミング言語をみない場合は半角英字記号文字のコンピューター言語が至上で無二となります。
まず、自然言語の固有の文法や表現が複雑な場合、これをプログラミング言語に落とし込むのは難しいとする誤解があります。また、文字種が多い場合、たとえば漢字や仮名の使い分けが煩雑であり、プログラミングコード中での入力が面倒となるという風説があります。さらに、ドキュメントの言語とプログラミング言語の言語を混同して英語圏との情報共有が困難であり、技術者間のコミュニケーションにおいて制約を生じる可能性があるという誤解があります。あたかも、抽象的な概念の表現や文字コードの問題があるとして、日本語をプログラミングに用いることにはさまざまな課題があるとするオピニオンに反証を試みるのが本記事の主題です。
固有の文法や表現が複雑?
日本語がプログラミングに向いていないと言われる一つの理由に、その固有の文法や表現が複雑であることと言われることがあるようです。日本語には独特の敬語や謙譲語、尊敬語などがあり、これらを適切に使い分ける必要があります。たしかに、それはありますが、..
しかし、それはプログラミングの本質ではありません。プログラミング言語は機械的な処理のしやすさと人間が読み書きしたときに認知能力の限界を超えない程度の形式化との間でバランスをとったものです。たとえば、日本語プログラミング言語Mindはごく一部のひらがな以外を無視することで日本語独特の敬語や謙譲語のゆらぎを排除することに成功しています。逆にこの特性をつかってソースコードの遊びとして「お嬢様コーディング」のような冗長で多様な表現を行いながら、定義の一意性を担保しています。
日本語話者がプログラミングを学ぶ際には英語の理解が必須となるという風説も少なくないようです。しかし、多くのプログラミング言語は英語ではなく英字記号を使った形式言語ですので、日本語話者に必要な文字識別能力は義務教育の範囲内のローマ字となるだけで、英文法を認識しながらプログラミング言語のソースコードを解釈することはかなり稀です。
漢字や仮名の使い分けが煩雑?
プログラミングの際には正確な単語や記号の入力が求められますが、漢字や仮名の使い分けが間違ってしまうとエラーが発生しやすくなると思われている場合があるようです。
このあたりは日本語プログラミング言語の仕様にもよりますので、日本語がプログラミングにむいていないとする根拠としては決定的ではありません。さきに述べましたように、ひらがなはだいたんに無視する日本語プログラミング言語処理系も実在しており、ひらがな助詞の指定まで厳密さを要求するかどうかは日本語プログラミング言語設計者の設計によるものです。
漢字自体はある意味QRコードのようなもので横文字系のバーコードよりも正方形の中に情報が多く含まれており、半角英字で横に長くタイプする際のタイプミスと、英字にくらべれば横文字数の少ない漢字・日本字でタイプしたときのタイプミスとの発生具合はそれぞれの文字の識別能力や慣れによることも多く、文字種としての大差はないと考えられます。
また、文字数が絶対的に多い漢字ですが、日本語プログラミング言語のシステム予約語に使われている漢字の語彙は限定的で、すべての漢字が網羅的に使われているわけではありません。
英語圏との情報共有が困難?
プログラミングにおけるコミュニティやオンラインフォーラムも英語圏が主流です。これは誰もが否定しない事実です。日本語圏での情報収集や意見交換は限定されることが多く、情報の遅れや断絶が生じることもありますが、今日は機械翻訳の精度も向上し英語圏の情報もHTMLやマークダウンなどのテキスト情報であれば、母国語に翻訳して読むことができます。
将来的にはこんにちの海外での日本語人気の影響を受けて、海外発の日本語プログラミング言語プロジェクトの登場も完全に否定はできません。英語で記述されたドキュメントで開発された日本語プログラミング言語の登場を決定的に妨げる理由は存在しません。
日本発のプロジェクトであっても、リポジトリのドキュメントの言語を英語にすれば、海外からのコントリビュータの参入を妨げることにはなりません。
抽象的な概念の表現が難しい?
プログラミングでは、論理的な思考や抽象的な概念を正確に表現する能力が求められることに対して、日本語は主語や動詞、目的語などが厳密に決まっていないため抽象的な概念を正確に表現する際には語彙や構文が限られるため、プログラミングに向かいないと考えられる誤解もあるようです。
どのような自然言語にも文学や文芸が成立する以上、完全に機械的で一意に表現することしかできなくなったら、人間同士のコミュケーション用途としてはあじけないものになってしまうでしょう。日本語プログラミング言語という実装が実在する以上、一定の形式化や構造化を行えば十分に論理的で実装論理的で一意な手順やその抽象化まとめを表現することは実は可能です。
おわりに
いかがでしたでしょうか?みなさまのご認識に一石を投ぜられたなら幸いです。
まさにコンピュータとだけではなく、また、そのプログラミング言語に精通した者同士すなわち当該言語プログラマ同士だけではなく、さまざまなステークホルダーの人間に対してコミュニケーションし、あなたの実装のコンセプトを一意に伝達するには、構造化された母国語言語が人間脳にとって無理がないとわたしは考えております。