2023/12/1
初めて学んだプログラムは、FORTRANだった。
出会った時代を横軸にマシンや言語を縦軸に年表にした。
振り返る
<コンピューター以前>まだプログラムが何であるかも知らない時代。
ラジオ、時計、カメラ、テレビを分解
学研の「科学」と「初歩のラジオ」と出会う
鉱石ラジオや実験用試験管にワクワク
日置のテスターを買う
ムーグシンセサイザーの製作記事を見つける
<初めての電子工作>
光電子セルを使ったシューティングゲーム
ビリビリ感電するびっくりおもちゃ
ICアンプ
<コンピュータとの邂逅>
大学に入りコンピューターのことを学べる
と思ったら1年生は基礎教養ばかり
ソフトウエアとハードウエアの違いもわからない
早く触りたかった、知りたかった
初めて学んだプログラムは、FORTRAN
めんどくさい文法
プログラムをパンチカードにパンチしてカードリーダーで読み込ませる
結果が出るまでしばらく待つ
シンタックスエラーで止まるプログラム
少しも面白くない
プログラマブル関数電卓を手に入れた
プログラムを書いてすぐ実行できた
エラーになってもすぐに直して確認ができる
面白い
条件判断とgotoを繰り返し
ポーカーやハノイの塔をプログラムして遊ぶ
gotoプログラムの悪癖に気がつかない
<AppleIIとの出会い>
雑誌に紹介されたAppleIIはおしゃれでかっこよく
これこそがコンピューターだと感じた
悪戦苦闘の末についに手に入れたAppleIIJPlus
素晴らしい二つのプログラムと出会う
一つはピンボールコンストラクションセット
リアルでスムーズでカラフル
素晴らしいのは盤面をデザインすることができた
卒論のテーマは「CP/Mで作成するデータベース」
CP/Mはマイクロプロセサー用の初のOSだった
OSに組み込まれたビルトインコマンド
起動時に追加するトランジェントコマンド
ピンボールコンストラクションセットを知ったことで
トランジェントコマンドも動的に追加削除できると大口を叩き笑われた
時代が移りそんなことは当たり前になっていく
もう一つはウルティマ
コンピュータのロールプレイングゲーム
当時ダンジョン&ドラゴンとウルティマが双璧をなしていた
栗本薫の「グイン・サーガ」を読みはじめた頃でもあった
グラフィカルな冒険ゲームは時を忘れ
コンピューターの可能性は無限だと感じ
その後「放浪社」のマスコットになる「もしかもしか」は
ウルティマで冒険をするときのキャラクターとして誕生した
以来40年Appleが好き
<仕事としてのプログラミング>
就職試験でジャンプコードを聞かれたが答えられなかった
それでも開発に配属された
CP/MマシンでZ80アセンブラのプログラム
Cのプログラム作法を学び
MS-DOSに移行してCによるプログラム
UNIXに移行してシステム管理者となる
気がつくと病気になり退社
しばらく放浪して会社を起こす
パワーポイントでプレゼンを制作
HTMLでホームページを制作
FLASHで動的なホームページを制作
データベースを用いたシステムをVBで開発
データベースを用いたシステムをCで開発
データベースを用いたシステムをJAVAで開発
SEになる
ローランド、ホンダ、ヤマハ、スズキ、あるいは個人事業者のシステム設計・Web設計・プログラム・システム管理を行った。
プログラムとは何だろう
「実現したいことを整理して、場合わけして、順序よく並べて実行させる筋道を作ること。」だとする。初めから全てを見通してあらゆる結果を想定できると良いが、実際はトライアンドエラーの繰り返し。途中で仕様が変わりぐだぐだになる。
プログラムは境界条件を判断して分岐するかたまりだ。例えばブロック崩しのプログラムを書いたとしよう。壁に当たったことを座標で判断するなら、値が同じになった時ぶつかったことにすればいい。ところが点ならば同じでいいが、大きさがあれば、中心と壁の座標が一緒になった時では、大きさの分だけ壁にめり込んでしまう。移動速度を早くするために座標を2倍3倍で進めると場合によっては壁を通り越してしまう。事前に向きを変えようとすると、壁に当たる前に反射させてしまうかもしれない。「>」「<」「=」「≠」などの記号で比較して結果が「真」の時分岐させるとして、細かいことを言うと「<」の時なのか「≦」の時なのか。とか比較対象を固定値で記述すると条件を変えた時に全て書き直さなければならないとか。「1」から始めるのか「0」から始めるのかなど。こうしたことは初歩的なことでプログラム全体からすれば瑣末なことだが、プログラマーは案外つまらないことで悩む。そこが面白いのでもあるが。
2023年「全国銀行データ通信システム」で発生した大規模システム障害は初歩的なミスで起きていた。システムを32ビットから64ビット環境に移行する段階で、C言語のデータ型サイズの違いから、テーブルを生成するサイズが増えたことにあわせて確保するメモリー領域を変更しなければならなかったが、忘れていたらしい。この結果確保していないメモリー領域に書き込んだデータが他のアプリケーションによって上書きされたのである。わけのわからない想定外の動きをしたことだろう。
どのプログラムも条件判断と分岐で出来上がっている点は同じだ。言語が違っても似た構文になる、ただプログラム言語によって文法が異なりデータの型が異なる。有限のメモリで処理をするために扱うデータサイズを規定するのがデータ型の目的だがこれが厄介でもある。オーバーフローやサイズの異なるデータの扱いをプログラマーは意識しなければならない。全銀ネットの障害はまさにこの初歩中の初歩が原因だった。たとえそれが初歩的なミスでも甚大な被害をもたらす。当事者の焦りと苦しみを思うと居た堪れない。
この問題はプログラムの本質ではないかもしれない。これからはこういったことはAIに任せれば良いのである。そんなことを言い始めたら人間は実現したいことを伝えれば「整理して、場合わけして、順序よく並べて実行させる筋道を作ること」はAIに任せればいいことになる。AIなら全てを見通してあらゆる結果を想定できるかもしれない。仕様変更にも文句を言わずにすぐに対処してくれるだろう。今は過渡期なのだ。
かつてのプログラマーは職人的だった。メモリーに余裕がない中いかに短いコードで効率よくプログラムするか。型の違いをうまく利用するものもいた。しかしそうした職人的コードはともすれば読みづらくわかりにくい。プログラムを資源として再利用する時代がやってくると他人が読んでもわかりやすいプログラミングが要求される様になる。わかりやすいというのは入力に対する出力が明快だということでもある。そうやってうまく作られたプログラムは部品として組み込まれ再利用される。
最初に出会ったパンチカードを打って読み込ませ結果を確認してというプログラム環境はまどろっこしく面白くなかった。パソコンが登場して、プログラムを書いてすぐに試して修正することができる様になり面白くなった。思いついたことをすぐに実現できるのはとても面白い。最近は自分でコードを書かなくても、膨大なパーツやサンプルを利用してちょこちょこっと組み合わせればいい。それでもプログラムした気分は味わえる。結局プログラマーは必要がなくなるのだ。 仕事としてのプログラムはAIに任せればいい。人は必ずミスを犯し些細なことで重大な問題を起こす。AIもミスを起こすかもしれない、AIによる危険性も考える必要がある、しかし32ビットから64ビットへシステムを移行させる様なシステム変更では人に任せるよりも確実にこなしてくれる。そして僕たちには純粋に楽しむプログラムが残る。
Comentarios