見出し画像

Tkinter学習中だが達成感がまったく感じられない理由(GUI学習の罠)

ここ数日ほどPythonのGUIツールであるTkinterを学習している。ある瞬間から「まったく、全然楽しくない」と感じ始めた。まるで糸がプツンと切れたかのように、突然に楽しくなくなった。何ナンダコレは?と思って振り返ってみていくつか分かったこと。

そしてそれはおそらくPythonに限らず、ほとんどのGUI学習について当てはまると思う。多分。

(約 2,600文字の記事です。)



GUIは構成要素のつながりがバラバラ

ウィンドウという大枠の中に、ボタンだとかチェックボックスだとかスライダとかいう「ウィジェット」を配置する。それをクリックしたりドラッグしたりして、リアルタイムで「何かが変化」したり、OKボタンを押してそれらを使って連続処理させる「何かを発動」させたり。ここまでは一般的な理解で間違いない。

だがGUIを学習していくと、これらのつながりがバラバラだということに気が付く。例えば、ボタンの作り方を知ったところで、チェックボックスの作り方とは無関係。もちろん幾つかのパラメータは両者で共通な場合もあるが、それはウィジェット全体で共通というわけではなくて、局所的にぽつぽつと「このパラメータはあれとこれとそれのウィジェットにはあるが、それ以外にはない」という、点でバラバラなパラメータの存在

これらの問題は次の通り。

1つのウィジェットを学んでも別のウィジェットでは「ゼロスタート」に知識リセットさせられる=無限ゼロスタート

ウィジェットの知識が点でバラバラで、使い回せる知識がほぼない。そうなるとチュートリアルを進めると、章が変わるごとに初心者にリセットされる。何だったんだこれまでの学習は!?となる。

実際には蓄積されているので、あとである瞬間に突然輝き出すはず、そう信じるしかない。

こういう感じで、実は初期から中期にかけてはGUIの学習は「1歩進んで1歩下がる」の繰り返しで、いつまでも成長できていない自分を見せつけられる(錯覚する)。これが辛い。

今まで何十時間の時間とエネルギーを使っても、「今やれることは何もない」という自分を見せつけられ続けるのだ。普通の学習では細かい階段があって「ここまではやれる」「これ以上は無理」ということが実感しやすい。これは学習曲線がほぼ右肩上がりのケースだ。

ところがGUI学習では一般的に「学習曲線が急峻(きゅうしゅん)」と言われる。2次関数みたいに、しばらく低空飛行で、あるときから爆発的に成長する、ということを意味している。


GUIは全パーツに対する理解が揃ってからようやくスタート地点に立てるから

なのでGUI学習では、1つ2つのウィジェットについて理解を完璧にしたところで、まだなんにもできない。チェックボックスだとかスライダ、コンボボックス、レイアウト、チェックON時とOFF時で処理を異ならせるというような「イベント制御」などなど、それらを一通り全部自由にいじれるようになって、ようやくGUIの設計に入れる。

このスタート地点に立った瞬間が、急激な爆発の瞬間であり、イメージ止まりだったことをたくさん実現可能になる。学習曲線が急だとはこういうこと。

なので全てのウィジェットについて、あるいは「自分にとって、自分が使いたいウィジェット全て」について理解できてある程度遊べるようになるまでは、「何一つできない」ままだ。まるでハイハイ中の赤ちゃんのようだ。

何十時間学習を進めても「何一つできない」を体験し続けることになる。だから辛い。


作戦:「最低限必要なウィジェット」に限って知識を付ける

要するにスタート地点に立たないと、永遠に無力の自分を見せつけられるマゾ地獄なのだ。ならば早く脱出することを考えるしかない。

色々考えた結果、要するに今の自分にとって最低限必要な知識のみ仕入れて、早く実装に入れるだけの知識「に絞って」学習する作戦に変更した。例えばエクセルのようなテーブルや、ワードのような下にスクロール可能なテキスト入力エリアは今のところ必要ない。逆にチェックボックスやラジオボタン、コンボボックスはすぐにでも使いたい。またイベント制御もできるとやりたいことが増える。

他にもボタンのレイアウトに関する知識が必要。これがないとChatGPTの回答を編集できないし、TkinterでいくつかあるGUIデザインツールを使ってPythonコードを生成してもその後のメンテや拡張が絶望的になる。

そうやってとにかく「今必要な知識だけ」に絞ってチュートリアルを進めることにした。そうしないと辛すぎる。

Tkinterマニアになることが目的じゃない。コーディングはChatGPTにやらせられるならその方がいいのだ。修正か改造を自力でできるだけのTkinterに関する知識が手に入ればそれでいい。ソースコードはモデリングと違って「フルスクラッチ」に意味はないと思う。AI支援や入力補完を使って仕上げても、100%手打ちでも、動作が同一であればどっちでも構わない。

であれば100%手打ちできるほどTkinterのパラメータやオプションに精通するマニアになるための時間とエネルギーよりも、「今実現させたいGUIをChatGPTと共にこねくり回して自力で修正して仕上げるまでの時間とエネルギー」を使いたい。つまりは学習そのものだけに多大なエネルギーを使っている場合じゃないってことね。じっくりも本当はいいが、余裕がないなら最低限で打ち切って前に進む必要がある。

ここで重要になるのは「判断力」だと思う。何が必要で何が不要か?今必要なのかあとでいいのか?そういう判断。


GUIは手段であって目的じゃない。

GUIは手段でしかない。成し遂げたい結果をボタンやマウス、キーボード操作で快適に命令するためのインターフェースでしかない。見た目が古めかしいとかスタイリッシュとか、全然目的と関わらない。なのでそんなのは後回し。むしろバグが少ないほうが重要。

とにかく何でも1個完成させる必要がある。今回はそれは達成している。次は「自分の手でそのコードを100%理解した上で改良すること」だ。ここに着手したい。

柔軟体操やリハビリのような辛さがある。早く脱出したい。


今回の創作活動は約1時間(累積 約3,881時間)
(1,129回目のnote更新)




読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊