これからのプログラム学習（2019年）　

# １．コーディングだけでなく、有名なアプリやサービス（SaaS）のRPAやカスタマイズもできるように

## 結論

　結論を先に書くと、**１つのプログラム言語でコーディングができるだけでは不十分**。

　オンラインでも使えるクラウドのアプリを使えるようになり、それを連携するRPAアプリを使ったり、
APIなどを利用してカスタマイズできるようになることが求められそう。

　ただ、**コーディングが不要になるわけでなく**、コーディングの知識があるとよりツールを使いやすくなる。
　
## 例. Microsoft Office365

　分かりやすいのがMicrosoft（以下、MS）が提供しているOffice365。
　Office365はローカルアプリの利用も含まれるが、クラウドで利用できるExcelやWordはもとより、
これらMSのアプリだけでなく、外部のTwitter、Googleドライブ、DropBoxnなどを連携してRPAが実現できる。
それを実現するのがFlowというツールで、Office365を契約していれば利用できる。
　
　基本的には、Web上でボタンを推しながら、どのアプリに何をさせるかを設定し、
それをつないでいく。一部、変数や関数を使うところがあるが、すべてをコーディングするわけではない。
　GUIとCUIのハイブリッドという感じ。最近では、これを**「ノーコード、ローコード」**と表現している。

　日本のエンジニアには、MSアレルギーがある人が多いけど、毛嫌いせずに触ってみるとその便利さが
わかると思う。
　自分も以前は、MS製品は使わないようにしてたけど、新しいCEOに変わり、OSSへの親和的な姿勢(VSCode、WSL、Github買収など）をみてから、使うようになり、ここまで便利になっているとは思ってなかった。

## 例. Google G Suite / GAS

　もちろん、MSだけでなくGoogleにもG Suiteがあり、無料でもGoogleドライブやスプレッドシート、
Gmailを、GAS(Google Apps Script)を使えばMSのFlowのようなことができる。

　尤も、GASの場合は、コーディングをしていく。MSの製品でいえば、VBAやマクロに当たることを
オンライン上でできる。
　MSのExcelはまだ、オンライン上でマクロが動かない。ここは、Googleの方が進んでいるかも。

　その他、Slackを中心としてGithubやCircleCIと連携したり、いろいろなアプリ同士を連携して
新しい仕組みを作り出すことが徐々に広まっている。

## 既存のアプリ、サービスを利用し、それを拡張することでアイデアを安く・早く形に

　これからはこうした既存のアプリを使いつつ、さらに、それを連携させたり、カスタマイズすることも
プログラマの作業や仕事の一つになっていく。
　その方が、早くアイデアを形にできるし、安上がり。積極的につかって、それでもない部分を
コーディングしていく。

## 画像認識、音声認識などのAI要素をつかったものもクラウドのツールを利用する

　画像認識、音声認識などにしても、自前でプログラムを用意したりもできるが、やはり
GoogleのGCPやMSのAzureにあるComputer Visionなどの画像認識のライブラリを利用して、
利用した分だけ料金を払えば、作る手間も減るし、処理数もそれほど多くなければ安い。


# ２．結論に至った自分の経験とロジック


## 十数年前から開発の現場もツールが増えて自動化してきた

　1997年にJavaで初めてプログラムに触れ、2006年にPHPをつかったWebプログラムを作り始めた。
仕事でプログラムを初めてから13年は経っている。

　その頃から、現在まで、Webだけみてもかなり開発方法は変わっている。

　2006年当初は、Javaにはフレームワークというのがあったが、PHPやRubyでは、まだ、一般化するほどフレームワークというものがなく、みんな「オレオレ」フレームワークをつくり、ツール・ライブラリを自作していた。言い方をかえると「車輪」の開発をしていた。

　今では、RailsやLaravelというフレームワークがあり、かなりコーディングをするプログラムも楽になった。何より設計をしなくていいし、ライブラリはgemやcomposerで入れればすぐに使える。

　バージョン管理もCVSを使っているところもあったが、ディレクトリやファイルに日付をつけて
手動で管理しているところもあった。今では、それはgit、または、ところによってはsvnに置き換わった。
　
　その他、CircleCIやJenkinsなどのをはじめとするCI、デプロイツールが登場し、手動でやることがかなり少なくなってきた。

　このように、開発の現場でも手動ですることが減り、だんだん、誰かがつくった資産を利用し、自動化になっている。
　コーディングなどの手間がなくなるようにこれまでも流れてきた。

## AI、IoT、様々なニーズを迅速に実現することが求められる

　十数年前にはなかったようなバズワードが今はいくつかある。AI、IoT。要素的に、これまでのプログラムの
技術と変わらないところもあるが、やはり根本的に変わっているところもある。

　とにかく、もうWebも15年ぐらい経ち、最初のころにはなかったニーズもたくさんでてきた。
そして、今でも新しいニーズが生まれている。それはなくなるどころか、蓄積していく。

　それらに対して、プログラマがフルスクラッチですべて対応するのは不可能である。
でも、求められるものは多様。
　
　もう、他人がつくったツールを使わざるを得ない。コーディングでできることも限界がある。

# ３．コーディングを学習する意味

## サービス・ツール内、または、サービス間の処理を繋ぐためのコード

　便利になったとはいえツールもすべてのユーザーのニーズを満たすとは限らない。その場合は、部分的なコーディングをしないといけない。
　また、APIをつかってサービスを連携していくコーディングも必要になると思う。

　そして、いくらいろんなツールがあるとはいえ、まだまだ作られていない分野のツールもある。
　それはこれまで通りコーディングによってつくっていくことになる。けれど、いろんなツールを利用しながらになると思う。

 ここで使われるプログラム言語については、現状では、PythonやJavascriptが一般的。

## データ構造・ロジックのシンプルなトレーニング

　これからはSaaSをはじめツールを使い、それらを利用したRPA、カスタマイズが必要であると思う。
　けれど、これは**「コーディング不要、コーディング学習不要」**なのではない。

　自分がMSのFlowなどを触ってて思うのは、やはりコーディングで培った、データ設計や
ロジックの組み方があればこそ、ツールをつかった問題解決も思いつきやすいのだと思う。
　
　「プログラム」とは命令の組み合わせでロジックを作っていく。
　これまでは、コーディングを中心にしてきたが、これからはコードだけでなく、
GUIのツールであったり、すでにできあがったアプリやサービスをその命令する対象の一つにしていく。
　
　「プログラム」の扱うコマが大きくなった感じ。

　「プログラム」がなくなるわけではなく、それはあり続ける。そのとき、「コーディング」を
中心とするプログラム言語の学習は、純粋にデータ構造やデータ処理のロジックを学習するのに
効率的だと思う。
　
　なので、コーディングを覚えなくていいのではなく、コーディングをしながら、
「プログラム」の真髄を効率的に覚える。
　それにくわえてツールやアプリを絡めた大きな意味での「プログラム」を実現していく。

　それがこれからのプログラマに求められるスキルなのだと思う。