(第12回)「プログラミングやりたくない!」〜下から目線のコーディング武者修行〜
前回までGeorge BooleのTrue/Falseの話。そもそも数学ニガテなのになぜそこまで⁈
なぜならプログラミングで使う数学は、「数的論理Logics」「集合Set Theory」「数列Sequence」の3つだから!
そして自分にとって一番の「不都合な真実」とは、
よりによって、数学の中で、自分が一番ニガテな3分野じゃないか‼︎
ということでした(ジゴク)。
HTMLとCSSを一通り眺めた後、JavaScriptに進んで直感。
マズイ、数学はまだしも、その中で「一番やりたくない」ものが揃いも揃ってプログラミングに必須だ
進めば進むほどその直感が「確信」に変わっていったので、これは何とかしなくては……
今回のnoteはそんな話です。「ニガテな数学3分野がどうしてプログラミングに必須なの?」という話。
[1. なんでプログラミングに数的論理Logicsが必要なの?]
「もしAがBならば、CはDである」という例のアレ。できれば避けて通りたかったLogics。
得意な人もいるそうですが、自分はその真反対。数学の中でも一番取りつく島がなかった分野。
後年、小島寛之さんの新書を読んだら、「Logicsで言われる”論理”と、日常生活で言われる”論理”は違うもの」の由。
ところがLogicsでは、ニンゲンの言葉も使用するので、それが日常的な論理と混同する大きな理由なんだとか。
ニンゲンは混乱しがちなLogicsも、コンピュータの運用には必須だという。じゃ、それはなんでなの?というと、「電子回路」にヒントがあるそう。
どんな複雑な機械も「スイッチ」の集まり。スイッチのON/OFFを操作するためにLogicsが必須
らしいです。
電子回路はCircuitというように、ぐるっと円形Circleになっているもの。で、その流れをスイッチでコントロール。
エレベーターを考えるとわかりやすいですが、乗る前に押すボタンは「上」か「下」。あれもスイッチだそう。
なので「上スイッチ」を押すと、そっちに電流が流れて、その次の処理に移ると。上スイッチがONなら、エレベーターがその信号受け取って、「エレベーターが下がるスイッチ」がONにーー
で、大事なのは、回路は「1経路」しかないから、「上と下のスイッチ両方押し」とかはイカンそう。というより出来ないんだとか。
もちろん、タワマンのエレベーターなんか何機あるんだってくらい複数が同時並行で動いてますが、あれも基本はスイッチのON/OFFだけで分岐させてやってる由。
機械はニンゲンと違ってスイッチで「やること」をコントロールしてあげないといけないそうなので、結果、そのコントロールを数学的に行うためにLogicsが必要だと。
[2. なんでプログラミングに集合論Set Theoryが必要なの?]
スイッチのON/OFFが機械の操作に必要、だからTrue/Falseで考えるLogicsが必要。
それは分かったけど、じゃあSet Theoryはなんなの?と。
自分のショボい数学的理解で言うと、True/Falseを効率的に運用するためには、Setで管理するのがいいみたいです。
さいきん統計学Statisticsのベンキョーを始めましたが、その中で”Binominal”という用語が。
なんのことはない、コインの裏表(Heads or Tails)みたいに、表Headが出たら裏Tailはない、みたいに、二律背反の関係。
おや、そうするとこれ、Booleさんの言ってた0/1 Binaryそのものじゃない?なんて。
Booleさんに教わったこととして、とにかくLogicsで扱う集団には「漏れがあっちゃいけない」ということなので、この「漏れがない」ということとBinominalという考え方は親和性があるみたい。
これも自分の現在の推測でしかないですが、Logicsは「コンピュータの操作」に必要で、Set Theoryは「データベースの管理」に必要なんじゃないかなーと。
Logicsはマシン向きの考え方で、Set Theoryはユーザー向きの考え方なんじゃないかな、と。
Set Theoryについてはまだ本式に学習してないので、これについてもなんかわかったら追記します。現状、
LogicsとSet Theoryは互いに補い合う関係
とだけ理解してます。
[3. なんでプログラミングに数列Sequenceが必要なの?]
最後はちょっと系統の違うものが。これまではTrue/FalseとかBinominalなんていう、キルケゴールさんばりに「あれかこれか」な内容でした。
でも3つ目の数列Sequenceは「数字がならんでる」ものなので、これとコンピュータがどう関係してるの?と。
プログラミングで目にするSequenceと言えば、これはどう考えても配列Array。
JavaScriptをやった時にこのArrayに出くわし、マズイ、これはSequenceをやらなくてはいけないと冷や汗をかいた思い出が。
あと語学人(*自称)的に言うと、まずこの「配列Array」という言葉に引っかかる。
データがずらっと並んでるなら”List”でよくない? なんで”Array”なの?
これも仕方がないのでOxford English Dictionary大先生(全20巻)にお尋ねすると、
すぐに使える状態で待機させておくもの
という含みがArrayには込められているそうです。
たしかに、Arrayからデータを取ってきたり追加したりと、「すぐに使える」ものとして考えなくてはいけない。だからListじゃなくてArrayなのね、と。
で、このArray、横にズラーっとデータが並んでるわけですが、これ、まんまコンピュータの都合だそう。
コンピュータは
「メモリーMain Memory」に保存された命令Programsを「CPU Central Processing Unit」が順番に実行する
仕組み。で、このMain Memoryがタワマンの階数よろしく、ズラーッと縦並びに。
で、この縦並びに「アドレスAddress」という番地が割り振られてて、それがまんまSequenceだ、と。
Main Memoryが「ズラーッと一直線に並んだもの」な以上、データを用意しておくArrayも「ズラーッと一直線に並んだもの」にする必要があるそうな。
要は機械Hardwareの都合に合わせてプログラミング言語も出来てるので、その都合にピタッとくるのがSequence
こうした「機械の都合」は変えようがないので、色々なプログラミング言語があるものの、根本のところは共通してるのはそうした理由があるようです。
機械自体がそんな風に設計されてるのでは、プログラミング言語の方もそれに合わせて書くしかないというのは理にかなってる。
しかしよりにもよって、必要な分野がみんな自分の不得意分野だという。なんで自分が今までプログラミングやらなかったか、その理由が分かった気がしました(^∇^)
この記事が気に入ったらサポートをしてみませんか?