有能なフリ

有能ではないが、有能かのように振る舞う

プログラミングとはを人に知ってもらうために

はじめに

またまたエントリを書きます。ここ数年、エンジニア以外で関わった人たちに一回は語ってしまうテーマとして、このエントリを書きます。

きっかけ

冒頭でも述べたとおり、エンジニア以外の人と関わると必ず一回は「プログラミングとは」という話題に触れます。自己紹介した時にも、「へぇ〜プログラミングやってるんだ」の流れであったり、僕がエンジニアであることを知っている人がプログラミング教育の義務化の話題について振ってきた時にも、この話題は発生します。

あくまで僕が思っていることな上、プログラミングという「上には上がいる」世界でプログラミングを語るのはとても恐れ多いことですが、言葉にして自分の中で整理してみます。

実際人に説明するときは、飽きないように端折りながら説明しています(それでも長い)。

そもそもコンピュータの話から

発明のきっかけは軍事目的だったような。映画「イミテーション・ゲーム」でその開発物語が描かれています。PrimeVideoで見れるので、みていない人は是非見てみてください。2回くらい見るとほぼ全ての面白さを回収できると思います。

www.amazon.co.jp

作戦本部から潜水艦などに送られる通信は、傍受は可能であっても暗号化されていて人には理解できませんでした(エニグマ暗号)。この暗号を読み解くために開発されたものが、今のコンピュータの元祖となっています(だった気がする)。

そしてプログラミングの元祖へ

実際に扱ったことがあるわけではなく、知識としてあるだけですが、「長い紙にパンチで穴を空けた」プログラムというものの存在を話します。

ja.wikipedia.org

「穴の位置と組み合わせによって処理する」みたいな説明をしています。この話は割と「へぇ〜」というような反応をもらえる気がします。

コンピュータの進化とプログラムの進化

ブール代数が発明された頃でも、まだ0/1の管理は機械式でした。それが今ではトランジスタの電圧によって管理され、扱えるビット長も長くなっています。これを「扱える情報量が増えて」という簡単な表現で説明し、それに合わせてプログラムはもっと扱いやすく、もっといろんなことができるように進化してきたということを話します。 それまではコンソールアプリケーションだったプログラムも、Webやゲーム、GUIの需要からビジュアルやデザインの分野まで風呂敷が広がっています。

今必要とされているもの

そして、プログラミング教育が義務化される中何が求められているかというと、「論理的思考」です。 僕は、これらのことを踏まえてプログラミングのことを「積み木遊び」で表現します。

積み木には色々な形があって、その組み合わせによって様々な形のオブジェクトを作り出すことができます。 果たして目的を持って積み木を積んでいたかは覚えていませんが、例えば「お城が作りたい」という目的を持ったとします。手段は、積み木の組み合わせによって実現できます。同じ形を作るにも、色々な積み木の組み合わせがあるので、それを試しながら目的に到達しようとします。

この思考過程自体がプログラミングと同等と言っていいと僕は考えます。基本的に世は「目的」を突きつけてきます。「切符を自動で処理したい」、「ハガキに書いてある住所を文字に起こしたい」等々抽象的な目的が突きつけられます。そこでエンジニアやプログラマに求められるのは、「与えられた目的を、具体的かつ現実的な手段に分解し、構築すること」です。仕事では目的すら求められたりしますが。

ここで出した「具体的かつ現実的な手段」をいかにたくさん知っているか、いい組み合わせを知っているかが、今の人類に求められていることです。いかにたくさん知っているかは、色々な形の積み木を持っていることに等しく、色々なものが作れるということに等しいのです。プログラミングに限らず、色々な業界におけるエリートはこの情報量が圧倒的です。

しかしプログラミングは、この「目的を手段に分解する」という「論理的思考」を育むのに適した手段であるため、義務化されているのだと僕は考えています。

おわりに

タイトル通りの記事が書けているかはわかりませんが、ひとまずこれで締めくくりたいと思います。

ではまた