プログラミングの難しさ

プログラミングは簡単であり誰でもできる、といわれます。また、プログラミングは難しいとも言われます。どっちが正しいのか?というと、どちらも正しいと思います。何故かと言うとプログラムという言葉が指す範囲があまりにも広すぎるからです。


世の中にはいろいろな物があります。
本、食べ物、動物、自動車、自動車工場、建物、飛行機、テレビ、冷蔵庫、ダイヤモンド、火星。
また、世の中には、いろいろな事があります。
医療、経営、金融、科学、接客、法律、組織、プログラムなど。


プログラムを作ることは、概念を作ることです。アーキテクトという言葉は建築家の例えからきていると思いますが、ソフトウェアにおいては、建築という概念を含む世の中に存在するありとあらゆる物事全ての概念が対象です。


対象となる概念が簡単な構造であるとき、プログラミングは簡単です。簡易的な足し算だけを行うプログラミングというのは誰でも簡単にできると思います。しかし、概念の「難しさ」に伴って、プログラミングは難しくなります。高度な整合性、依存性や、トレードオフが必要なプログラミングは非常に難しくなります。また、別の難しさも考えられます。概念間の関係性という難しさです。ソフトウェアが対象とする概念は非常に広いため、何らかの抽象化、構造化をするときに、概念の概念も考える必要があるからです。


このようにソフトウェアというのは全ての物事を扱うことのできる本質的なものですが、一括りに簡単であるとの誤解から軽視されるとすると非常に危険であると思います。現在はビジネスを部分的に置き換えるだけですが、将来的には人間でさえもその範囲に入るとおもいます。そのときにはどうなっているかというと、それを重要視して強化した組織/国に力がシフトすると言うことです。