オはオタクのオ 第0035回 プログラミングの素
オはオタクのオ 第0035回 プログラミングの素 文字数制限もあれば、惚けの進行もある今日この頃、プログラミングに関して少し具体的な話をして、この手の話を完結としようかなと ・・・ ま、本業の方の常連さんは営業の際に詳細説明が必要なら聞いてちょということでネット上の無料レクチャーとは差別化します(1円も払ってなのに、何かとめんどくさい人も世の中にはいるし・・・笑)。 それはそれとして、前回、”陰陽(2)→八卦(8)”という話をしたのですが、”なぜ(2)の3乗の(8)になるのか?(4)はどうしたのか?”といった質問がありましたので、プログラミングとは関係ないじゃんとは思ったものの解説しておくと、陰と陽に分けた後、陰を陰の陽と陰の陰に、陽を陽の陰と陽の陽に分けて考える過程があり、この段階で(4)になっているわけですが、陰陽の思想を図形化したものが”太極図”と呼ばれるもので、中国拳法の太極拳という名称もこのあたりから来ているのですが、太極拳(たいきょくけん)、形意拳(けいぎけん)、八卦掌(はっけしょう)の3つの門派は、内家拳という大枠で括って語られることがあるのですが、どちらかといえば道教(仙術系)の思想を取り込んでいる門派になります。 太極拳と八卦掌は、ずばりそのまま門派の名称で分かりますが、形意拳の場合は、ある意味で基本でボクシングだとジャブ、ストレート、フック、アッパーカットといった区分に該当する五行拳と、ボクシングのコンビネーションブローの発想などに似てなくもない(架空を含む)動物の動きをモチーフにした十二形の体系に分かれ、応用編的に十二の動物を二つ、例えば虎形の動きと馬形の動き、虎形の動きと蛇形の動きといった具合に、掛け合わせることで変化を多様化させる(2つだけの組み合わせだけで単純計算で(12×11=)132パターンの新しい形が追加されて、基本の12と併せて144形に拡張されるといった技術体系になっています ・・・ これまでに一般にもオープンになっている範囲で説明すればですが(笑)。 まあ、形意拳の場合、ほとんど蹴り技が無いことでも知られているので、ボクシングと技術体系を比較したくなるのですが、日本の武術で言えば基本の12の形ということになる十二形意は、それぞれに関連付けられている動物の名称もさることながら、11でも13でもなく12の区分で制定したところに意味というか工夫があるなあと思ったことがあります。 五行拳の五行というのは中国系の占いなどでも採用されてることがありますが、五行理論として体系化されていて、五行をこの世を構成する基本を5つの要素(木、火、土、金、水)とし、その要素の相性のような関係性を、五行相生(ごぎょうそうしょう)、五行相克(ごぎょうそうこく)といった考え方で説明というか体系化しているのですが、まあ、この手の話をしているとそれだけで日が暮れてしまいますので、話を元に戻します(笑)。 そんなこんなで、2→4→8 に関する補足説明は終わったことにして、フローチャート(呪文の流れ図)を念頭にプログラミングを解説していくと、まず大前提として、1.そもそも何をやるつもりなのか?が、明確になっている必要がありまして、それは、料理を作る場合、最初に何を作るか?を決めてから料理に取り掛かるのと同じようなことで、ここがいい加減だと、湯豆腐を作るつもりで始めたのに出来上がったのは麻婆豆腐だったという漫画のような結末になりかねません ・・・ いえ、本当に。 抽象的な話をしてもしかたがないので、1’.「重さの単位である匁(め:匁目、もんめ)をグラムに換算する」プログラムを作る。とします。 ぼちぼち、実際に匁に慣れ親しんだ世代が還暦を越え定年を迎えている頃合いですから、お題として適当でしょう(旧正月、旧暦、太陰暦、数え年、などなども昭和の40年代中頃までは意外と身近でしたが暦が絡むとややこしいくなりますしねえ?)。2.扱う要素を考える。 世界を構築する要素は何か?と分析するわけですが、匁→g(グラム)と変換するとすれば、要素1”匁”、要素2”グラム(g)”となり、要素3として”両者の換算比率”くらいは最低限の要素としてかかわってくることがわかります。 とりあえず、匁を”m”、グラムを”g”、換算比率を”ちぇんじ”から”c”と仮称すると決めてしまい、m、g、c を”変数(条件によって変化する数値)”として予約しますと、 m × c = gといった数式(?)が成立し、これがプログラムの計算部分の肝(きも)になりますし、”m”の数値が具体的に決まれば、C は最初に定数(文字通り値が定まっている数)で固定しておけば新たに入力する必要が無く、g も m×c という計算の結果ですから入力する必要が無いことが分かります。とすれば、キーボードなどから具体的な”m”の数値が入力(いんぷっと)されて、その数値をコンピュータ側(というかプログラム)が受け取れば自動的に作業が進んで画面上に”g”の数値が出力(あうとぷっと)されれば初期の目標はとりあえず達成されたことになります。フローチャート的には、「mの数値は入力はまだか?入力されたか?を判断」→「m × c を計算」→「計算結果のgを出力」→「次の換算を行うか?終わるか?を判断」といった程度のカキコでもかまいません。 もっとも、より具体的に考えていくと、プログラムの主流(メインストリーム)は、基本的にプログラムとして記述された処理工程を逐次処理していきますから、「変数 m,c,g の初期値を定義」「mの数値がキーボードから入力されたら次の工程へ、それまでは待機」「mの数値が入力されたら変数 c と掛け算をして、その計算結果を g として出力」「gの数値が出力されたら、冒頭に戻って再度繰り返すか、終わりにするかを判断」といった辺りで、”あれ?冒頭に戻るか、プログラムを次の終わりにする方向に進めるかを判断するために、最低でもあと一つくらい変数が必要なんじゃね?”と気が付くわけです。 そうなると、m、c、g の3文字は既に予約済みで初期値も定義してありますから、残りの文字、例えば”もう一度”だから”アゲインということで a”とかいった程度のノリで判定用の変数を追加して、「変数 m,c,g の初期値を定義」は「変数 m,c,g,a の初期値を定義」と変更し、「もし、キーボードから変数”a"の値として数字の"9"が入力されれば冒頭に戻り、それ以外なら終了する」といった記述を加えれば、とりあえず完成とします。 後は、プログラミング言語に翻訳していけばいいだけのことですが、比較的わかりやすいベーシック言語風に主要部分を書くと、百匁が375グラムですから、c=3.75 となるので、01(行目) m=0,c=3.75,g=0,a=002 INPUT "m"03 IF m>=0 THEN g=c×(実際には*)m ELSE GOTO 01(行目)04 PRINT SCREENg05 INPUT "a"06 IF a=9 THEN GOTO 01 ELSE GOTO 0707 ALL CLEAR08 ENDとかいったことになるのですが、使うプログラミング言語や、同じプログラミング言語でもバージョンによってプログラム中の命令(コマンド)文や記述の仕方などが違ってきますし、上記の例もそれこそ、見やすさ優先でベーシック風に取り敢えず書いただけという質の悪いものですが、雰囲気は伝わったかなと。 ちなみに、06行の IF a=9 云々というのは、05行で変数a の値としてキーボードから入力されたデータが 9 ならば01行目に戻って再度の処理、それ以外だと07行目に進むと理解されたい ・・・ 実際のプログラムだと、a="a" とかもう少し見づらく混乱しやすくすることもできることが多い(笑)。 ベーシック言語がベーシックと呼ばれる所以が、簡単な英語と数学の変数の概念が分かっていれば(なんとなくであっても)プログラムの内容が分かるところにあると(私は)思っているのですが、マイクロソフト社のオフィスのエクセルやワードなどに実装されているVBA(ビジュアルベーシック)もベーシック言語の一種だったりします。 いずれにしても、ここまでの話が理解できていれば、逆方向の”グラムを匁に換算する”プログラムを1から書くことも、既にあるプログラムを改変してでっちあげることもできます。 もっと手を入れて、表示というか画面表示の位置設定や配色なども定義して使いやすくしたり、一つの画面で「匁→グラム」と「グラム→匁」の選択をさせたり、「グラム→ポンド」の変換を追加したり、結果を画面表示ではなくプリンターに出力させたりする程度の改変は比較的簡単にできますし、計算結果を事前に登録している特定の相手にメール添付などで自動送付することもできます ・・・・・・ できますが、実際の仕事で使うプログラムの場合は、それがプログラムできることと、そのプログラムをすることで時間や経費が節約できることがイコールになるとは限らないこともままあります(笑)。 その辺り、自分の仕事の作業効率を上げることが、(簡単な)プログラミング技術を持っていれば可能になるものの、職種にもよりますが、実用レベルの水準でいつまでプログラミング技術を維持できるか?そのための学習時間や費用はどのくらいになるか?とか、それによってどのくらい収入増が見込めるか?といった費用対効果の側面から考える必要もあるんじゃなかろうか? 前にも何度か書いたことがありますが、プログラミング技術の優劣などよりも、既存のアプリケーションを使いこなして情報を作成したり情報を発信したり情報を収集したりする能力の優劣の方が大多数の中級・下級の民にとっては収入の増減に直結する時代に既になっていて、今後、高度で専門的なプログラミングは主にプログラミング作業に特化したAIの仕事になり、一握りの人間のプログラミングの専門家はプログラムの仕様書を作成して専門のAIに発注したり、完成したプログラムの使い勝手や作動確認をする程度の、AIのプログラミング作業の下請け作業が主になっていくのではあるまいか? もちろん、過渡期にはAIが人のプログラミングの補助をする時期もあるでしょうが、コンピュータ関連のシンギラリティの予測などから考えて、遅くとも2040年頃には、私が今の時点で書いていることが”オタクな爺の妄想”だったのかどうかの結論が出ていると思いますが、その頃まで私が生きているかどうかを含めて、今の時点では神様だけが御存知の近未来の話ではありますな。 比較的、最後の方まで残るのはゲーム分野かなあ?とも思うのですが、それこそ、プログラミングの技術より、今までになかった新しいナニカを考え付いたり、面白い漫画や小説などをかくような才能とか、見たことも無いような映像表現を思いついて形にするような才能の方が求められるのではないか? そうした才能が個人の個性に由来すると考えるとき、文部科学省がこれまでにやらかしてきた”ゆとり教育”に象徴される”個性を育てる教育云々”の成果というか結果を見ている限りにおいて、ここまで見事に個性を均一化し規格化して刷り込んでしまった公教育ってある意味ですげえなあと、暗記主体で個性を伸ばす教育を受けていない受験戦争世代の一員としては素直に思います。 最後に、念のために書いておくと、匁からグラムに(尺貫法からメートル法へ)切り替わったのは昭和34年(1959)1月1日のことなので、これを書いている時点の上皇(平成天皇)が御成婚された年の話になります。