プログラミング能力が必要な4つの理由
こんにちは。trackチームの新田です。 前回の記事では、「プログラミング不要説の4つの背景」についてお話しました。
結論としては、前回お話したような不要説が囁かれながらも、プログラミングというものは私たちが生きている間、全く必要なくなるということはない、と考えます。
今回の記事では、このような背景にある中で、実際にプログラミング能力が必要な理由について、4つの項目や事例とともに考察をしたいと思います。
世界中には莫大なプログラム(コード)が溢れている
IT社会で生きる私たちの世界では、沢山のプログラム(ソース・コード)が存在しています。
例を一つ上げると、皆さんが日頃使っているGoogleは 10億個のファイル、20億行のコードで構成されていると言われています。
Google Is 2 Billion Lines of Code—And It’s All in One Place
Googleを例に上げましたが、普段我々が利用しているほぼすべてのWebサービス、スマートフォンアプリ等、様々なサービスはほぼプログラムファイルでできています。
これらがもし仮に全てこの世から無くなるということは考えにくいでしょう。
また、「進化」するソフトウェア環境において、同じ機能を持ったものを新しい環境に対応させるためには、常にプログラムを書いていかなければなりません。
大規模になればなるほど、単純なフレームワークやライブラリでは代替できません。
新しいサービスを簡単に作る上では、便利なツールを使えばできるようになるかもしれませんが、現存のサービスを進化させていく上では、プログラムを書く、ということが全て自動化されることはまず、すぐには無いのではないでしょうか。
「モノ」や「ハードウェア」のプログラマラブル化
マイクロコンピュータによるIoTプログラミング
IoTとは、という話は今回は割愛いたしますが、マイコン(マイクロコンピュータ)という言葉を聞いたことがある方もいるのではないでしょうか。
例えば
Raspberry PI(ラズベリーパイ)
Arduino(アルディーノ)
といったものがその一種です。 これらはとても小さなチップのようなハードウェアなのですが、中にはしっかりとしたコンピュータが詰め込まれています。
このコンピュータを「モノ」と接続することで、「モノ」そのものをコンピュータ化することができるのです。
そしてコンピュータが搭載された「モノ」をインターネットに接続させることでIoT(Internet Of Things)が実現されています。
これらのIoTで活用されているコンピュータを制御するにはWebアプリケーションを実装するのと同じようなサーバスクリプト言語と言われるようなプログラミング言語を用います。
プログラムでマイコンを動かすことで、「モノ」を通じて取得したデータをサーバに送ったり、モーターと接続して実際のものを動かしたりすることができます。
即ち、プログラミングが必要とされる領域が「モノ」まで拡大されているため、これらを制御するプログラムを書ける能力は引き続き必要になるのではないかと考えられます。
集積回路のプログラミング FPGA
FPGAという言葉は馴染みのない人のほうが多いのではないかと思います。 Wikipediaを引用すると、
FPGA(英: field-programmable gate array)は、製造後に購入者や設計者が構成を設定できる集積回路であり、広義にはPLD(プログラマブルロジックデバイス)の一種である。現場でプログラム可能なゲートアレイであることから、このように呼ばれている。
と書いてあります。少々難しいですね。
先ほど紹介した「マイコン」も「FPGA 」も中身はハードウェアです。 しかし、マイコンは前述したようにソフトウェアで処理するのに対して FPGA はハードウェアで処理する、という違いがあります。
詳細はさておき、FPGAとマイコンの大きな違いは「演算の高速化」です。
マイコンのソフトウェアの能力では、大量のデータをさばいてリアルタイムに処理することは難しいとされています。
しかしながら、FPGAでは、ハードウェアそのものをカスタマイズできるので、1つのFPGAで数百のマイクロプロセッサを組み込むことができます。
これにより大量データをさばいてリアルタイムに処理でき、省電力設計も可能という特性があるため、IoTエッジデバイスやディープラーニングの処理を行うサーバなどに活用されています。
実際に、マイクロソフトの「Bing」がこのFPGAを活用したことが話題になりました。 MicrosoftはFPGAでDeep Learningを加速
このようにIoT時代において、モノのソフトウェア化によるプログラマラブル化やハードウェアそのもののプログラマラブル化が後を絶たない状況にあるので、プログラミング能力が求められ続けています。
クラウドコンピューティング時代におけるインフラのコード化
Infrastructure as code(インフラストラクチャ アズ コード)
例えば 「Infrastructure as code(インフラストラクチャ アズ コード)」という概念はご存知でしょうか。
この言葉はわからずとも、この業界で人事をしていれば
Vagrant(ベイグラント)
Chef(シェフ)
Docker(ドッカー)
という単語は聞いたことがあるかもしれません。
これらのサービスは様々なWebサービスが動く環境(インフラ)の「設定」をプログラムにして、それぞれのPCで一から毎回インフラを構築するのではなく、プログラムを実行するだけで、仮想的に求める環境を自動で構築してしまおう、というようなものです。
一般的なインフラ構築の場合、環境構築手順を作成してインストールやセットアップを行います。
しかし、開発人数が増えたり、管理するサーバが増えてくると、人間が手作業で行うのは限界がありますし、ミスも起こりえます。
そこで、インフラ構築するときは手順書をもとに構築するのではなく、「コードに書かれたとおりの内容を自動で設定する」しくみを導入すれば、だれがそのプログラムを実行しても「同じ状態」のインフラ環境が自動で構築できるのです。
クラウドコンピューティング時代においては、「仮想空間」上で、様々なコンピュータを動かします。 今まで、インフラエンジニアやネットワークエンジニア、と言われていた人たちも、クラウド環境
OSやミドルウェアの設定
サーバの構成・構築
といったものをプログラム化しておこなうようになってきているのです。
フレームワーク・AI代替できない領域の存在
簡単なWebアプリケーションやスマートフォンアプリであれば、パワーポイントでスライドをつくるように、誰でも簡単に作ることができる様になるでしょう。
また、前回の記事で紹介したように、AIがバグを見つけてプログラムをするという世界になってきました。
一般的にAIが得意領域とするのは、
正確性を要求されるもの
単純作業・マニュアル化しやすいもの
システム化することで計算、算出できるもの
と言われています。 これまでの膨大な過去の経験・データから問題を発見し、解決する能力です。
しかし、新しいサービスや人間社会における課題を、テクノロジーを使って解決するためには、新しい技術に対する知見や経験だけではなく、現実世界に浸透させるためのUXを考えられなければなりません。
更に、それらをソフトウェアをとして構築するために、「設計」や「要件」として落とし込む「アーキテクト」領域が必要になります。
これらは、以前の記事「入社後に飛躍的成長を遂げる未経験エンジニアとそうでないエンジニアの違いは「スキルアップのためのスキル」を持っているか否か」でもご紹介したメタスキルの一つ「コンセプチュアルスキル(概念化能力)」です。
これは最もAIが苦手としている領域だと言われています。
もし仮に、現実世界の人間の生活モデルを学習し、人々に最適なUXのサービスをAIがゼロから作り出せてしまったらと考えると、逆にちょっと怖くなりますね。
結論: プログラミング能力は求められ続けるでしょう
標準化や利便化は進んでいくのでITの敷居は下がる
積み木を組み上げるように、ゲーム感覚や直感的なUIでプログラミングができるようになる世の中は迫ってきています。
また、ちょっとしたプログラムを書くだけで、パワフルなアプリケーションを実現することも、APIを活用して様々なデータを扱うこともできるようになるでしょう。
「ものづくり」の敷居はどんどん下がっていっています。
技術の高度化にプログラミングは必須
敷居が下がっている一方で、今回ご紹介させていただいたように、技術の高度化は進んでいます。
IoT化やクラウド化が進む中、あらゆる場面において、プログラミング化が進んでいる、ということも事実です。
アキレスと亀のパラドックスのような話ですが、技術をどんどん進歩させて、世の中が便利になり、テクノロジーを使いこなす敷居が下がると同時に、進歩した技術に対応する人材も必要となっていっているのではないかと思います。
まさに高度化(コード化)する社会においてプログラミング能力は必要とされる、ということですね。
素晴らしい締の一言が決まった所で、今回のご紹介は以上とさせていただきます。