活動報告08(2021年6月)
プロジェクト薬箱「Python編(入門2)」
モノづくりでは、モノが出来上がっていく過程が見えるので、進捗状況を形で捉えることができる。一方、プログラミング等の学習においてその進捗状況は、テキストを読んだ分量で確認することになる。しかし分量と実力は比例する訳ではないので、実力が高まっているのか非常に不安になる。まさに、ミスチルの歌詞にある「孤独なレースが続いていく・・・」という状況だ。このような学習を、社会人が仕事の合間を見つけて進めるのは相当に困難だろう。ただし、学習する環境と時間の猶予を見つけることができれば話は別だ。まさに今DMM Akibaの厚意の下、その環境と時間が与えられている訳だが、本当に有難く思う。これがなければ早々とプロジェクトを諦めていた可能性が非常に高かった。
さて、京大の演習教材の続きだが、この教材の最大の山場である「三目並べを作ろう」が登場。CUI上の表示で各手番の〇×を交互に入力していくという簡易なゲームだが、プログラムはとても複雑に感じる。ルールを言語化してプログラム上の記述に落とし込み、ゲーム動作を操作・検査・表示の3つの局面に分け、勝敗パターンをすべて網羅して緻密にプログラムを組み上げていく。例題のコードは500行もあるため、テキスト通りに入力しているのに実にいろいろなエラーコードが出る。出たエラーコードを丸ごと検索ワードでとして調べ、修正していく。しかし、#を文頭につけて読み込まれないはずなのに、その行がエラーに関与している気がするのは何故だろう。
最終的になんとか完成し、演習の棋譜採取と勝敗確定後の棋譜再生もできて一安心。しかし、これをGUI上で表示したり、クラスで実装、コンピュータと対戦できるよう拡張するのは完全に能力オーバーなので、演習はあっさり放棄。しかし、ゲームプログラムの途方もない深淵を垣間見た気がする。
最後の項目では、高度な数値計算パッケージであるNumPyや Pandas でのデータの扱い方と、Matplotlib でのグラフ描画の基本を学ぶ。しかし、その準備でまた手間取る。グラフ出力では、日本語が豆腐文字となってしまうので、Matplotlibのバージョンアップを試みる。しかし、condaコマンドではいつまで待っても処理が終わらない。検索しても原因は不明。pipコマンドは使えないし困っていたが、なぜかAnaconda navigator経由ならアップデートできた。それでも日本語表示できなかったが、標準フォントを確認しヒラギノゴシックの指定することで、ようやく準備が整った。
NumPyではarray、PandasではDataFrameという固有のデータ形式について、演習を通じ学んだが、フーリエ近似の課題で高度な数値計算の威力を思い知った。行列が一気に計算されるのをprint()で表示したが圧巻の情報量だった。大量のデータ処理向きの意味を理解できたと思う。一方で、Matplotlibは、csvを経由することなく、pltメソッドで直接グラフにできるのが地味に便利だった。
ようやくにしてこの教材を終えることができたが、後半の難易度上昇がエグくて一気に学習ペースが鈍化する。心が折れそうな中、これを初学者が独学でやるのは難易度が高い。結局、理解できなかったところは依然そのままだし・・・。一方で授業での教材としてとらえた場合、素晴らしいものとなる。授業内での補足説明や学生同士で教え合う環境があったことを考慮すると、「考えさせる」という意味では唯一無二ではないだろうか。市販の参考書が「知識を与える」ことを主目的にしているのと対照的だ。与えられた演習課題も解答がないので必死に考えるしかないし、教材内にあるコードのミスも自力で見つけ出すしかない。また、このコードを省くとどうなるか、別のコードを追加してもうまくいくのか、といった試行錯誤を経て得られた、理解が深まったという達成感は格別だった。
という訳で2冊目:大津真 (2016)「基礎 Python」に突入。今更ながら第二版があるのに気が付かなった。3冊目を終えられれば、一旦Raspberry Piに戻れる見通しが立ってきた。
この記事が気に入ったらサポートをしてみませんか?