第1回 プログラミングは總てに通じる扉で有る。

此の頁の本文は、下のボタンを押す事に依り、文字の大きさを變える事が出來ます。

 

私が、現在、担當して居るVB講座も、終盤に差し懸かり、講義内容は、アルゴリズムに突入しました。此の講座で、私が企圖して居るのは、『眼から鱗』と謂う事で、日常、何氣無く看過して居る事や行動して居る事を、何の様な思考經路を經て其處に至るのかを、逐次的に再評価する事に依り、物事の根源的な再認識と最適化を思惟する習慣を身に附けると謂う事です。

能く『當たり前の事』とか『皆が然う仕て居る』とか謂う言葉を耳に仕ますが、此等は、自分自身で思考する事を放棄し、何等疑念を抱かずに大勢の赴く儘に行動する事を意味して居ます。亦、『斯うすれば、斯う成る』と謂う短絡的な話を聽く事も有りますが、其等には、初頭や途中に重大な条件分岐が欠落して居る事が多く見受けられます。

上記は、孰れも、餘程單純な物で無い限り、プログラムと仕て真面に機能する事は無いでせう。『此處は、世間一般に從い、處理せよ』等と記述しても、勿論、數多く有るプログラミング言語の中でも、斯う仕た曖昧な記述で正しく動作する言語等、有る筈も無く、コンピュータの困惑を示すエラーメッセージが空しく返り來る許りです。亦、『斯うすれば、斯う成る』と謂うのも、殆どの場合、『斯う仕た結果、斯う成れば斯うするが、然う成らなければ斯うする』と謂う様に、突き詰めて行かなければ、何處かで、矢張り、エラーメッセージと對面する羽目に陷ります。

プログラミングとは、目的を遂行する爲に、所有ゆる事象を想定し、其れに對處し、解決する事です。此れは、勿論、事プログラミングに限らず、總ての道に通じる事ですが、プログラミングの場合、相手が機械丈に、曖昧や妥協は許して下れません。人間相手の場合、過去や將來を考慮して、所謂『玉虫色の決着』を附ける事も有りますが、コンピュータには、其れが有りません。僅か1文字の入力ミスでも、遠慮會釈無く、鋭く指摘されて仕舞います。

此れは、變に遠慮されて、間違いを指摘して下れない人間相手よりも、自己形成の爲に、役に立つ事も有ります。人間相手なら見逃して貰える様な些細な間違いでも、コンピュータは、機械で有るが故に『機械的に』處理する爲、間違いは間違いで有り、少しの甘えも許して下れません。其れ故に、所有ゆる状況を想定し、其の總てに對して、自ら解決法を見附け出すと謂う姿勢を、知らず知らずの内に、プログラミングは培養して下れます。

亦、プログラミングは、色々な物に興味を抱かせて下れます。講義中、プログラムの解説の關係で『三角關數』や『微分積分』と謂う言葉が出て來る事が有ります。其の時の受講生達の反應は、一様に『然んな事を遣らなければ成らないのか』と謂う表情を呈し、中には、露骨に顏を顰める受講生も居ます。プログラミング講座の一翼を担う可く聽講に來て居た若い講師迄もが『微分積分から逃れる爲に文系に進んだのに、此處で掴まるとは』と嘆いて居ました。

其れ程『三角關數』や『微分積分』は、嫌われ者で、其等を學んだ者達の心に傷跡を殘して居ます。此等を面白い等と謂おう物なら、忽ちに仕て『變人』扱いされて仕舞います。斯く謂う私も、學生時代、此等を學んだ時には、『何故、此の様な事を遣らなければ成らないのか』疑念を抱き、授業に身も入らず、結局、解らず仕舞いで、眞逆、其の私が、此等を教壇で説明する様に成るとは、想いも寄りませんでした。私も、若し、プログラミングと出逢わなければ、解らず仕舞いで、一生を終えた事でせう。

勿論、プログラミングに『三角關數』や『微分積分』が不可欠と謂う譯では有りません。作成するプログラムの分野に依り、此等を全く必要と仕無いプログラムも數多く有ります。併し、例えば、アナログ時計の作成を企画した場合、三角關數は、不可欠の物と成ります。コンピュータでは、直線を描画する場合、一定の位置より一定の方向に一定の距離丈の直線を描画すると謂うベクトルの手法を用いず、2點を結ぶ直線を描画すると謂う手法を用いて居ます。

其の爲、時針や分針や秒針を描画する際に、針先と根本の2點の位置を指定する事に成りますが、判明して居るのは、移動する事の無い根本の位置と、伸縮する事の無い各針の長さと、現在時刻に應じた各針の爲す角度丈です。此等から針先の位置を求める譯ですが、方眼用紙と分度噐を用いて計測するのは、面倒な劃には正確さに欠け、實用的では有りません。併し、三角關數を用いると、簡潔なコードで、簡單に實現する事が出來ます。

此處で、アナログ時計の作成を企画した者は、三角關數を覺えるのが厭で企画を諦めるか、三角關數を覺えて企画を實現するか、孰れかを選択する事に成ります。簡單に諦め切れる企画で有れば、話は別ですが、何うしても成し遂げ度い企画で有れば、矢張り、三角關數を覺える事に成ります。處が、『孰れ役に立つかも知れない知識』を學習するのでは無く、『直ぐに役に立つ知識』を學習する譯で有り、自ずと意慾も異なります。

要は、『初めに目的有りき』です。使用目的と使用方法が明確に成れば、其れが興味の有る分野に關する事で有れば、何事も面白い物です。亦、何か得体の知れない物としか認識して居なかった物を實際に使用して、想い通りの物を創作した場合、面白くも成ります。此れが『解る』と謂う事です。此れは、私自身が、實体驗から得た實感です。毛嫌い仕て居た物が好きに成る、此れも冒頭で記した『眼から鱗』の一環です。

猶、上記は、既に『三角關數』や『微分積分』を學んで嫌惡感而巳が殘存して居る人達を對象と仕た話ですが、然う仕た先入觀念の無い者、例えば、小學生等の場合は、話の進め方次第で、此等を、『何かを行う爲の道具』と仕て、簡單に受け容れて下れます。即ち、彼等には、『三角關數』は、長さを計測する爲に定規を用いますが、定規で測り切れない場合は、分劃して計測した合計を求めるのに『加算(足し算)』を使用すると謂うのと全く同質の事なのです。

彼等が現時點で使用する事の出來る唯一の方法で有る方眼紙と分度噐を用いての計測に不滿を感じた時、『三角關數』は、便利な道具と仕て容易に受け容れられます。只sinとかcosと記述する丈で、今迄、面倒な事が簡單に成り、不可能と思われた事が可能に成る譯なので、當然と謂えば當然の事です。彼等は、其等をプログラムに組み込み、時計の針が、思い通りに動き始めた時、『三角關數』を、身近な存在と感じる様に成ります。然して、早くも、新しく手に入れた便利な道具を利用して、更に何か出來ないか考え始めます。

私は今、小學生にプログラミングを通じて、物事を創造し解決する能力を通常化する試みを進めて居ます。現時點では、未だ、殆ど私的な試驗段階に過ぎませんが、上記は、實際に小學生にプログラミングの手解きを仕て居て感じた事で有り、『小學生にもプログラミングは出來る』では無く、『小學生からプログラミングを始めなければ成らない』との感を益々深めて居ます。

コンピュータの出現と普及に依り、明らかに世の中は、變わりました。最早コンピュータの無い時代に逆戻り出來ない今、當然、物事の學習方法も変わら非る得ません。即ち、從來の記憶型の學習方法から、思考型の學習方法に転換する必要が有ります。次回は、此の事に附いて語り度いと思います。