いまこそシニア（エンジニア）が日本語プログラミングすべき５つの理由

# はじめに

この記事は一般シニア向けに書いた　[日本語プログラミング言語Mind40年 - いまこそシニアが日本語プログラミングすべき５つの理由](https://sites.google.com/view/yourlifewithmind)　というサイトの記事をシニアのソフトウェアエンジニア向けに書き換えたものです。

Qiitaのメインのユーザー（投稿者・閲覧者）の方は主に実装を行っている職業的な現役プログラマの方が多いのでピンとこないかもしれませんが、この記事は昔プログラミングをしていたけれど今は実装現場を離れ主に管理者として仕事しているエンジニアの方へのメッセージです。

# 1 日本語プログラミング言語：昔プログラマだったあなたの知らない世界

日本語プログラミング言語は普通の日本語に似ていますが、実は定義した言葉以外は使えない厳密なコンピュータ言語です。

コンピュータ言語は本来、コンピュータにやらせたいことをコンピュータにわかるように伝える言葉ですが、人間の方も意味がわからなければコンピュータがなにをやりだすのかわからないことになってしまいます。そこで考えられたのが、COBOL、FORTRAN、C言語といった高級言語でした。

これらの言語は語彙の一部を英語から採用したアポステリオリ言語[^1]でした。その後、自然言語の語彙に寄らない完全な人口言語のアプリオリ言語[^2]も登場し、実装用のプログラミング言語は百花繚乱の時代に入っています。

現在シニア世代にあるあなたが経験した言語はCOBOLやVisualBASICといった英語由来のアポステリオリ言語であったかもしれません。

日本語プログラミング言語は日本語由来のアポステリオリ言語です。メインフレームやホストコンピュータ上で動作する日本語由来のアポステリオリ言語は存在しないため、業務システム開発の現場ではその存在はあまり認知されておらず、その状態は今日も続いています。

そのため業界内での認知度はやや低いものの、アルゴリズム発案時の言語イメージでコードが記述しやすいため、業務エキスパートなどの非エンジニア、ソフトウェアが専門ではないエンジニア（ハードウェア・ネットワークなど）の間で脈々と使われ続けています。

ソフトウェアが専門ではあるもののいまはプログラミングしないシニアなエンジニアのあなたにとって日本語プログラミング言語とは、ソフトウェアの設計書を書く感覚でプログラミングができるツールとご認識していただいてよいでしょう。



# 2 プログラミングはあなたの思考の産物：プログラミング思考力

プログラミングはあなたの思考の産物です。プログラミング思考はロジカルシンキングの一部であり、問題解決能力の一部です。業務システムのようなアプリケーションプログラムは、データを一定のアルゴリズムで加工してストレージから出し入れすることが主な問題解決の対象となります。

昔のあなたはだれかが発案したアルゴリズムをソースコード化することからキャリアスタートして、だんだん要件に応じたアルゴリズムを発案して誰かにソースコードを書かせる立場となり、いまは要件を取りまとめるだけであったり日程や採算を管理することが仕事のメインとなっているかもしれません。

そのような超忙しいあなたにとって、再度獲得しなければならない能力、それは問題解決能力のコアとなるプログラミング思考力です。

現時点でもソフトウェアの設計書を日本語で書いているのであれば、あるいは部下が書いた設計書をチェックするようｎ立場であるのであるならば、それは日本語プログラミング言語により早急に醸成することが可能です。


# 3 部下または協力会社の担当者の書くコードにコミットする能力を確保する

あなたが若かったころのプログラミング言語のソースコードでも、それなりに記号要素は存在し、英語由来のアポステリオリ言語であったとしても英語ではないし、プログラミング言語独自のシンタックスを覚えていないと、だんだん読み書きができなくなっていくのはある意味自然なことです。

ある程度日常的にその作業をしなくなれば、ひとは細かいことは忘れていくものと言えます。

そして、今日のレイヤードアーキテクチャからなるシステムでは、レイヤーに応じて使われているプログラミング言語も異なる場合が多く、ソースコードを直接書くわけではないエンジニア層がソースコードを管理するのは至難の時代となったと考えられます。

プログラマ層は厳密なプログラミング言語で読み書きしていますが、彼らを管理する立場のエンジニア層は彼らが使うプログラミング言語に精通しているわけではありません。何割かの範囲は「プログラマさんにお任せ」という実態が生じていると推察されます。

プログラミング言語も厳密で一意にマシン語に変換はされますが、基本的に等価なアルゴリズムをさまざまな書き味で書けてしまうという側面もあり、似たような機能なのに別の担当者が書いたためまったく異なる書き味のソースコードが現出する状況は非常に起こりやすいと言えます。

英語由来のアポステリオリ言語に慣れている、またはそれしか知らない、アプリオリ言語を好むといったプログラマ層は嫌がりますが、あなたは厳密な日本語プログラミング言語であなたの考えるアルゴリズムのコードを具現化して、英語由来のアポステリオリ言語に書き起こすプログラマとアルゴリズムを共有できる可能性があります。

日本語プログラミング言語の学習コストは低いので、英語由来のアポステリオリ言語に書き起こすプログラマ側にとってはまったく能力的に問題はなく、直感的に毛嫌いするプログラマ側も仕様コントローラ側との共通ユビキタス言語の主旨を理解すれば習得に協力してもらえる可能性はあります。

**大枠のアルゴリズム**　日本語プログラミング言語で共有して大枠はずさない
**細かいアルゴリズム**　現状の各種プログラミング言語でターゲット層で実働させる

# 4 あなたのキャリアパスに貢献する：プログラミング思考力≒問題解決能力

現場の規模も大きくなってくると、個々の開発プロジェクトの現場にはコミットできなくなっていくとは思いますが、いくつもあるプロジェクトの中でもこれは重要、たとえば社運を左右するような重要案件で、重要な中核ロジックをあなたがコントロール下におくことができるならば、あなたのキャリアパスにとってよい影響をもたらす可能性があります。

# 5 認知能力の低下予防　脳の前頭葉は使わなければ萎縮します。

年齢を重ねると、脳は「前頭葉」から萎縮しはじめることがわかっています。ですから、前頭葉を鍛えることが脳の老化を防ぐことになるのですが、前頭葉は意欲などをつかさどる部位で、挑戦的な活動をするときなどに使われます。

もしも、あなたがプログラミングをすることをやめてしまった方であるならば、それは経験したことに再挑戦することを意味します。

非常に複雑な動きをするプログラムも慣れてくればつくれるようになりますが、この作業の目的はそこにあるのではなく問題解決能力を鍛え続けることを意味します。 

# おわりに
この記事は、単に日本語でプログラムを書くことを推奨するのではなく、シニアエンジニアがプログラミング思考を維持し、現場での役割を強化し、脳を活性化させるための一つの手段として日本語プログラミング言語を提案しています。

一般のプログラミング言語を再習得することを妨げるものではありませんが、一般にシニアなエンジニアは多忙な激務をこなしていますので、学習コストが低く本質的な能力獲得に有効なものとしてお勧めしております。

シニアエンジニアのロジカルシンキングにまつわるコア・コンピタンス形成について訴求していますが、本記事での用語の定義は　[ロジカルシンキング（MECE）とプログラミング的思考力（またはCT）とアルゴリズム的思考力の階層構造まとめ](https://qiita.com/mylifewithviolin/items/395bab8caa2c9cfde6a4) をご確認いただけると幸いです。

また、「アポステリオリ言語」「アプリオリ言語」の本記事での用語について、以下の脚注にも記載はいたしており、本文中の記述の際には簡単な装飾を加えて注釈を読まなくても意味が通じるように配慮しておりますが、重要ながらQiitaでの記述実績が少ないことを鑑みて[「アポステリオリ言語」と「アプリオリ言語」 みんなの推しプログラミング言語はどっちだ！？
](https://qiita.com/mylifewithviolin/items/941d3c9694cebaa915f0)という解説記事を追加しました。合わせてこちらをご確認いただけると重ねて幸いです。

[^1]: アポステリオリ (a posteriori)　 「経験に基づく」という意味の哲学用語で人工言語のカテゴライズにも使われる。アポステリオリ言語とは既存の自然言語をベースにして設計された言語をさす。　
[^2]: アプリオリ (a priori)　「経験に先立つ」という意味から、アプリオリ言語とは既存の自然言語に依存せず、完全に独自の構造や語彙を持つ言語をさす。