最近話題の ノンコーディング について考えてみた

#はじめに
「〇〇レス」という言葉には魅力的な響きがあります。例）サーバーレス、コーディングレス
同じく「ノン〇〇」という言葉にも同じくらい魅力的な響きがあります。

今回は**「ノンコーディング」**について考えてみたいと思います。

#ノンコーディング＝非技術者でも作れる？
最近 [RPA (Robotic Process Automation)](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3) が話題です。

RPA とは AI を使って、いわゆるルーティン作業を自動化して、楽をしてしまおうという思想、概念です。上記のリンクは Wikipedia のものですが、詳細はだいたい書いてあります。その中にも「コード不要」とあります。RPA を実現するために RPA ツールと呼ばれるソフトウェアで、作業フローをドラッグ＆ドロップで作成していき、実行するとその通りの処理が動くというもので、その手順にソースコードを書く作業は不要です。

なので、**日本では**ノンコーディングと言われることがあります。**「日本では」**と書いたのは、英語だと通じないからです。冒頭で書いたように -less の方がその意味に近く、実際 codingless という言葉は存在します。

他にも古くからある EAI ツールや Microsoft Flow, Azure Logic Apps もノンコーディングツールと呼ばれるますし、実際のところソースコードを書くコーディングは必要ありません。ただ**「ノンコーディングであれば、非技術者でも処理が作れる？」**と言われるとこれは No と言わざるを得ません。

なぜならここでいう「処理」とはプログラムのことだからです。

この話、つまり「ノンコーディングツールを使えば、非技術者でもプログラムが作れるか？」という件について考えるには、コーディングとプログラミングをしっかりと分けておく必要があります。
（実はこれを分ければ説明できるなと気付いたことがこの記事を書いているきっかけでもあります）

#プログラミング＝コーディング？
どう考えればわかりやすいのかなー？と考えたところ、「～する人」で考えるのが伝わりやすいと思いました。

それぞれを英単語にすると、

**プログラミング：Programming
コーディング：Coding**
であることはいいですよね？

原形は

**Program
Code**

になります。

これらを「～する人」という er の形にすると

**Programmer：プログラミングをする人、プログラムを組む人**
**Coder：ソースコードを書く人**

になります。「プログラムを組む人」と「ソースコードを書く人」が異なる、と言われて意味が分かる人は、以下は不要かもしれません。

ここでまず **Program** について掘り下げてみましょう。つまり「プログラムとは何か？」です。
IT の世界ではなく、日常生活において、**「プログラム」**という言葉、何に使いますか？
辞書を引いてみると

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/deb532be-ba34-848c-1a5a-b962a8319815.png)
（[英辞郎](https://eow.alc.co.jp/search?q=program) より引用）

どうやらプログラムにはもともと**「予定、計画」**などの意味があるようですね。確かに運動会のしおりにある競技の順序、コンサートのセットリストなども**「プログラム」**と呼びます。

単語で考えると **pro-gram** で分けることができ、

**pro** は**「前以て、事前に」**、
**gram** は**「記号、または記号化されたもの」**を意味するので、

**program** で**前以て記号化されたもの**と考えることができます。

つまりプログラムとは、**前以て何かを計画すること**を意味し、転じて、コンピュータの世界では**一連の処理（命令）**を表すことになったわけです。コンピュータに仕事をさせるには、事前に一連のコマンドと呼ばれる命令を用意しておかなければならないからですね。

一方、**Code** はもっと単純です。記号、暗号という意味ですね。コンピュータにわかる言葉で書くという意味ではコンピュータ言語を使って、処理命令（プログラム）を書くことはまさに**暗号**ですよね。

**Programming：事前に計画すること**
**Coding：暗号化をすること、暗号を書くこと**

従って次のように表現できます。
**「コーディングによってプログラムを作る」**

#コーディングができてもプログラミングはできない!?
ここまでくれば、何となくわかる方もいらっしゃると思いますが、**プログラミング** と **コーディング** は同じような言葉でも異なるものです。分けて考える方が幸せです。
特に今の日本では(笑)

極論で分かりやすく言うと、これを読んでいる人は日本語は特に不自由なく読めるし、書けますよね？
でも小説や小論文を書いてくださいと言われると、すぐには難しい、無理だと思われる方もいるでしょう。

これが **コーディング** ができても **プログラミング** ができるわけではないという意味です。

#現在のツールがカバーするのはコーディングである
RPA ツールや EAI ツールなど、2018年8月現在のノンコーディングツールがカバーするのは**コーディング**です。プログラミングではありません。従って、ノンコーディングツールでも、プログラミングは必要だということです。**プログラミング＝ひとつのゴールに向かって、前以て、計画すること**ですので、ビジネスの現場ではビジネスフローを考えることができる人間でなければ、無理です。

1. 既存の業務フローを整理して図示できる
2. 新たな事業を業務フローに落として図示できる

これらのどちらかができなれければ、本当の意味でのビジネスでの **プログラミング** はできません。

#ひとりの人間でなくともよい
ここまでネガティブに書いてきましたが、実はそんなにネガティブである必要はありません。

現在の日本では、企業はピラミッド型の組織で権限も上から下のトップダウンでしょう。ということは、上記でいう **業務フロー（ビジネスフロー、ビジネスプロセス）** を構築する **プログラミング** ができる人は、係長さん、課長さん、部長さん、事業部長さんといった何らかの役職者です。それをメンバーの方が聞いて、理解をして、コーディングすればいいのです。つまり、組織の現状に合った分業をすれば、できます。言い方を変えると、**業務フローが構築できない人は役職者として相応しくない** と言えます。近い将来、この時代はすぐに来ます。

#まとめ ～ 2020年度までに ～
ご存知の通り、2020年度から全国の小学校でプログラミング教育が始まります。プログラミング教育もこういった観点に立つと、何を伝えて理解させる必要があるのか、非常にクリアになると思います。あと1年半。それまでにこういったことをお子さんに伝えられるように準備をする必要があるのではないでしょうか？

#注意
ここに書いたことは私が思うことです。これを人に押し付ける気もないですし、逆に反対されても、私がそう思うだけです。悪しからず。