放送大学 課題レポート

 再定年を前に、忍耐力やら持続力やらを確認したくて、pythonに取り組んでみた。
 数十年ぶりの言語学習だったが、驚きの連続でにわかには理解できないことも多く、体とともに頭も固くなっていることにも気付かされた。

 次の拙文は、長年にわたって自身の狭い分野に閉じこもり、外界の変化に目を向けることなく身体ともに鍛錬を怠ってきたことへの、反省と再起の一文である。


お題
プログラミング入門Python('24)
この授業を履修して、プログラミングの学習に取り組んだ結果、授業の履修前と比べて、自分がどのように変わったのか、特にプログラミングに関する影響について述べよ。
ページ数は、3ページ以上4ページ以下とする。
 ○ 個人的な話題に関係し、オリジナリティがあるものを高く評価する。
(一般的な内容ではない方がよい。)


#はじめに

 昨今の生成AIの興隆には目覚ましいものがあります。
 文系ながらPCとプログラムには浅からぬ因縁があった私は、昔取った杵柄とばかりにPythonの講義を受講しました。
 そして、見事に撃沈しました。

 オブジェクト指向言語という、for構文の中で変数を定義できたり、配列を自由に定義して順序を逆にしたりできる自由気ままな未知の言語を前に、手続き型や構造化プログラミングといった、トップダウンで明確な論理構造を構築することを信条とする構造主義者の私は手も足も出ませんでした。

#プログラム遍歴

 私は行政職として入職しました。最初の担当は裁決書の起草・調整や地方裁判所での傍聴でした。

 しかし、任用の日に指定された机の引き出しには、そろばんと電卓が収まっていました。そしてその足でポケットコンピューター(PB-100)を買いに走りました。
 3回計算して3回答えが合わない私には、検算機能のない電卓は無意味だったのです。
 3年後には離島で医療券を印刷するために、BASICからドットプリンターのI/OアドレスにPOKE命令で制御コードを直接書き込んでいました。
 NECのノートPCの起動用フロッピーディスク(FD)にATOKと表計算ソフト(Lotus 1-2-3)を無理やり詰め込み、公共事業費の年度間配賦や土坪計算の専用機を作ったこともあります。
 畑地かんがい事業の営農分析のために農業会議から配られたのはデータベースソフトの「」でした。
 汎用機で稼働するCOBOLの年に一度の修正は、なんとポケットコンピューター以下のラインエディターで行う必要がありました。
 そのプログラムの途中には「eikyuunioukyuu(永久に応急)」という、前任者からのなんとも言えないコメントがひっそりと書き込んでありました。
 結局COBOLは、触れる機会が少なすぎて、覚えられませんでした。
 汎用機の打ち出す決算統計の固定長データをPerlでCSVに変換しExcelに取り込んでエラーチェックのマクロを回したりもしました。
 北海道が決算統計のシステムをPascalで組んだと聞いて「センスがいいな」と思った私は、DelphiというPascalの後継言語を5万円も出して自腹で購入しましたが、結局箱から出すことはありませんでした。この頃、月の時間外勤務は100時間を軽く超えていました。

 そして2000年問題の年、市町村とのネットワークのシステムオペレーターを最後に、多忙を極めた現場から、ほぼ足を洗うことができました。
 しかし、Python 2.0が発表されたこの年は、構造化言語の衰退と私自身の老化の始まりの年だったのかもしれません。

#Pythonとの格闘

さて、私のPCとコンピューター言語の遍歴は前述のとおりであり、これまでの新たな言語の習得も、今回同様、未知の言語で既知のアルゴリズムをなぞるという形で行ってきました(と言うか、だいたいどの言語学習のプログラムも同様のようです)。

しかし、今回のPythonの履修では、私のこれまでの言語学習の枠では収まりきらない衝撃を受けました。


QUIZ1-1

次の選択肢のうち、正しいものを1つ選べ。
②人間が書いたプログラムを実行する仕組みを、言語処理系という。


 「人間が書いた」という部分に引っかかってしまいました。これが「ソースコードを実行する仕組み」という記述だったら、気にしなかったでしょう。
 猿が書こうがAIが書こうが、処理系で動作させればエラーを吐くなり何らかの処理を行うのですから。
 少なくとも1980年代には、「人間が書いた」という表現は一般的ではなかったと思います。
 そしてこれからの問題は、「AI」が書いたものを実行する仕組みをなんと呼ぶのか、ということになるのでしょうね。

 「AI」には、人間の意思を代行する、という意味を持たせることはできそうなので、猿とは別となるのかもしれません。
 それとも、このような議論はすでにとっくに解決されているのでしょうか?


QUIZ7-2

ユークリッドの互除法を利用して、2つの数の最大公約数を求めた。2つの数の値の変化として、誤っているものを1つ選べ。
① (9, 145), (9, 1), (0, 1)
② (10, 144), (10, 4), (2, 4), (2, 0)
③ (11, 143), (11, 0)
④ (11, 144), (11, 12), (1, 0)

正解は④です。正しくは「(11, 144), (11, 1), (0, 1) 」となります。


 この問題は今でも理解ができていません。
 正解が④だとすると、①の(0, 1)も②の(2, 0)も正しいことになります。
 そうすると、右と左のどちらが剰余で、どちらが最大公約数なのかが不確定で、どちらでも良いことになります。

 どちらでも良いような結果を出すコードは書けないことはないでしょうが、このように書かなければならない必然性や合理性が未だに理解できないのです。


QUIZ8-1

このプログラムについて、次の選択肢のうち、誤っているものを1つ選べ。
②7行目の g を定義している行を削除すると、放物運動ではなく直線運動を示すプログラムになる。
④このグラフのキャプションは parabolic motion である。

正解は②です。7行目の g を削除すると、プログラムは動作しなくなります。

QUIZ8-2

次のプログラムは、授業で取り上げたドント法のシミュレーションのプログラムである。
このプログラムを取り上げた授業で学んだことについて、正しいものを1つ選べ。
②forを用いた繰り返しをして計算している。

正解は①です。


 この2つはセットです。
 QUIZ8-1は、gを定義している行を消すと、new_vy = vy - g * dt が vyと等しくなるため、等速度運動、つまり直線運動となります。
 なお、プログラム自体は、gが定義されていないというエラーになります。
 また、Pythonのグラフ作成モジュールに「キャプション」というオプションはなく、parabolic motionはタイトルです。

 QUIZ8-2では、forは配列への値の格納に繰り返し使われていますが、肝心のドント法による当選者の計算部分には用いられていません。
 この2つの問題を、法文解釈の分野でいう文理解釈のレベルで見るならば、「7行目の g を定義している行を削除すると、放物運動ではなく直線運動を示すプログラムになる」という記述は正しいと言えます。

 プログラム自体はバグで動きませんが、動くかどうかは問題とされていないため、考慮する必要はありません。もし「直線運動のグラフが描かれるプログラムになる」といった記述だったら、誤りと断定できるでしょう。
 また、「forを用いた繰り返しをして計算している」という記述も正しいです。
 この「計算」はプログラムの主要な目的である当選者の計算ではありませんが、CPUが行う演算ではあります。そして、「forを用いた繰り返しをして計算している。」という記述は、計算の目的を明示しておらず、もちろん当選者云々には言及していません。

 従って、文理解釈のレベルでは、この2つの選択肢を間違いと断じる根拠はないのです。

 さて、法文解釈の分野では、文理解釈で結論が出なければ、論理解釈、目的論的解釈と、だんだん話をエスカレートさせていくことになります。
 目的論的解釈まで行けば、QUIZ8-2の方は、プログラムの目的は当選者を計算することであり、その部分にはforは用いられていない、と主張できるでしょう。
 しかし、QUIZ8-1の方は、プログラムが動作するかどうかが正答の理由であり、設問の段階でプログラムが動作するかどうかなど聞かれていないことを踏まえると、にわかには理解し難いと言わざるを得ません。

#思考の変容と柔軟化(無知の知)

 さて、このような稀有なアハ体験となったPython講座を終えて感じた思考の変容と柔軟化について、結論を述べます。

  • プログラム(とその動作)と、プログラムの解説は、一見同じようで、実は同じではありません。
  • プログラムはCPUのために書かれますが、その解説は人間(未来の自分や顧客などの利害関係者)のために書かれます。プログラムは、コンパイルや実行の過程でエラーを出して警告してくれることが多いのに対し、その解説は日本語であるためなかなかエラーを出して警告してくれることはありません(プログラム的に正しいかは別として、意味は通じてしまうためです)。
  • だからこそ、私以外の皆さんは、それぞれの立場で意味が通じているのでしょう。
    (一部では「玉虫色」という表現をすることがあります。霞ケ関文学です。)

 ともあれ構造主義者の私は、もはや現場に戻ることはありませんが、「わかった」と簡単に思ってしまうことの危険性を、再び思い出すことができました。無知の知は、永遠の真実です。

#学習を終えて(気付きと展開、感想)

このPythonの学習で得られた気付きは、次の3点です。

  • 私は大人の発達障害であることに気がつきました。Geminiを相手に、コードの意味や記述者の意図、言語仕様の思想、配列の入れ替えに関する行と列へのデータ格納の哲学といった、Pythonでなくても良いものの、これまで知らなかった議論を堪能できました。某国某首相のような粘着質の論理展開をする私のようなタイプにとって、Geminiは格好のお友達です。
  • プログラム開発とは、要件定義が命であるということを思い出しました。
  • 要件定義は、外国人と話している前提で取り組まないと必ず失敗する、ということを思い出しました。おそらく私が説明の文言に沿ってコードを書いたとしても、異なる手順で結果を出すコードに仕上がったでしょう。

生成AIの可能性などに関し、今後の学習(手遊び)の展開を、次のように考えています。

  • 日本語はどこまで論理的な使用に耐えられるのか
  • 生成AIは、「日本語はどこまで論理的な使用に耐えられるのか」という実験にどの程度耐えられるか

pythonに対する感想

  • 変数を実行時に宣言できたり、配列を自在に変更できたりするPythonの言語仕様は大変使いやすい一方で、同時にデバッグやリバースエンジニアリングは厄介でしょう小さなアプリを趣味で作るにはもってこいですね。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です