プログラムもまたアート、創作物の1つなのだ!SNS映えしないが
やはりPythonでGUIアプリを作るならPySimpleGUIで行くことに決定した日記。Pythonと言えばなぜかWebサーバとの連携の話ばかり出てくるが別にそこに興味はないんだ。エンジニアを目指すつもりもないし。素人がWebのAPIを使って一体何をしようというのだ?たかが知れている。それよりもゲームを遊んでいた方が遥かに楽しいだろう。
なので素人がPythonで遊んでみたときに、自分専用のデスクトップアプリや自動化ツールを作るにあたって、どうしても必要になるもの、それがGUIだ。ウィンドウとかボタンとか。いつまでもコンソールで遊んでいられない。それがどんなに高度なことであったとしても「だからそれ、何の役に立つの?」これに答えられないのだ。コマンドプロンプトやPyCharmのコンソールに文字列が表示されたからって、何なのさ?なのである。
(約 3,900文字の記事です。)
PySimpleGUIでたいていのGUIは作れると確信した
とりあえず公式PySimpleGUIドキュメントをほぼ読み終えた。
読み飛ばしたところと言えば、
Elementの実装のための詳細な解説(必要になって理解しながら読むものだからパス
サンプルソースコード300選(ソースコードを読書しても無意味)
WxPythonとREMI関連のポート情報(使うつもりがないので)
他は一通り読み終えた。そしてPySimpleGUIの可能性を感じ取ったので、Pythonのアプリ開発でGUIは全部PySimpleGUIで実装することにした。
GUIって実は結構複雑だったんだね
ドキュメントを読み終えて思ったことは、GUIは実は想像以上に色々と内部で面倒な事を地味にこなしていたのだ、という点。なのでPythonに限らずほとんどのプログラミング言語は最初しばらくの学習ではprint()で地味~にコンソール出力の繰り返し学習になる。
今は令和、令和だよ?3歳児が生まれたときらタブレットを触って育つ時代だ。その時代にコンソール、CUIからプログラミングを学ばせられたら、そりゃ興味も失せるわw と思う。何が楽しいねん!って。
だがGUIに手を出すと途端に色んなハードルが上がる。GUIを操るというテーマだけでも1つの学術分野になるしなっているし、それ故にPythonでもGUIライブラリが7つ以上も乱立しているわけで。
そんな悩みを先人が見事に解決してくれていた、その名もPySimpleGUIだった。なのでもう「車輪の再発明」はしなくていいのだ。PySimpleGUIに乗っかって突き進めばいい。PythonでGUI実装で悩むのはもはや時間の無駄だ。
PySimpleGUIの思想に共感した😍
PySimpleGUIのドキュメントの最初のほうに書いてある「楽しむこと」これにとても共感した。この瞬間にもう99ドル払おうと思ったくらいだ。「そうそう、これこれ、Python学習者がGUIを思い浮かべたとき、まさに言いたいことが全部書いてあった」のだ。それだけPySimpleGUIの開発者はよく分かっている。
なので冒頭から既にPySimpleGUIを採用しようと9割方決まっていたが、念のため主要な部分をざっと全部目を通した。実装のためのelementの詳細以外はざっと読んだ。うん、やはりPySimpleGUIはいい。間違いないと感じた。
プログラムもまた、芸術、アート、創作物の1つなのだ!
何でもかんでもオブジェクト指向でなくてもいい。PySimpleGUIのドキュメントにも書かれたいたのだが、何でもかんでもOOPにする必要はないってこと。小さなプログラムなら関数型でも正常に動く。それがPythonらしかろうがなかろうが、プログラムは仕様通りに動けばそれが答えなのだ。そしてプログラムは創作物なので答えが1通りに決まらない。何通りも答えがある。そして仕様通りに動くならすべてが正解。
プログラムもまた、芸術、アート、創作物の1つなのだ!だから表現方法は1つじゃない。数学じゃないんだ。A = B、この1行しかないわけじゃないし、この1行だけが正解でもない。A = C, C = Bでも正解だ。
もちろん、非効率な理由や指摘もあっていいし、改善したっていい。とにかく一度正常に動くまで仕上げることが重要。それができたら自分のスキルに合わせて「リファクタリング」すればいいだけのことだ。
「リファクタリング」という概念の重要性
プログラミングでは「メンテのためのメンテナンス」というマトリョーシカのようなことが起こりえる。リファクタリングなんてまさにそれで、ユーザーからすれば「何にも結果が変わらないなら、何も変化してないのと同じじゃないの?」と思われるかも知れないが、実は結構違う。プログラミングもアートなのだから、完成物がすべてだが、そこに至るまでのプロセスを改善することはプロとしてとても重要なことだ。
お絵描きでも3DCGでも、結果を量産しようとすればその過程を「いつか、どこかで振り返って工程を改善する」必要がある。後ろを振り返らずにがむしゃらに前に進む期間もあってはいいが、いつの日か立ち止まって一度自分の工程や手法を見直す時期が必要だ。そうしないとじり貧になる。無駄な苦労をこなしているだけのワークフローになっていることに気が付かないといつまで経っても「自分はこんなに苦労しているのに結果が出ない。なんでみんなは簡単に結果を出せるの?」という壁にぶつかることになる。
プログラミングは「言語化能力」を高める
プログラミングの世界ではこの行為に「リファクタリング」と銘打ってその手法や効率化のためにIDEが自動化されるなどの工夫が続いている。だがプログラミング以外でこの「リファクタリング」の重要性をあまり声高に聞いたことがない。強いて言えばPDCAくらいか?
言葉がなければそこに存在を感じ得ないし、概念を意識できない。その点で言えばプログラミングはこれまで「何となく理解していた抽象的なもの、何か」についてきちんとした理解を強要される。これがプログラミングの辛いところであり、適性がある人とない人がキッパリ別れる。適性があっても、概念の理解中はとてもストレスを感じる。だが理解できてしまえばすっきり。
だからこそプログラミングの経験値によって使う単語のレベルが変わる。中上級者ならばたった一つのキーワードで分かり合えるため、よりレベルの高い議論ができる。だが初心者だだとそのキーワードについて説明が必要になるため、会話がかみ合わない。上級者がイラつくわけだ。まぁ分かる。
「分かったつもり」が使えないからこそ鍛えられる
概念を何となく理解したつもりではダメだ。まったくコーディングができない。IDEによる入力支援があったとしても、何も書けない。プログラミングは言語化能力を要求されるし、何となくな理解ではエラーが解消されない。非常にスパルタな世界だ。これを「分かりやすい、0/1ハッキリ分かれていてスッキリ」と感じる人は適性がある。「言語化できない」なんて甘ったれた言い訳は通じない。できるか、できないか。エラーがないか、エラーがあるか。それだけ。シンプルだからこそ、ごまかせないのがプログラミングの世界。私には割とそれがスッキリしていて心地いいと感じる。謎の条件分岐がない、曖昧さもない、是々非々もないw あとよろしく!もないwww
プログラミングは地味なアート。SNS映えしないけど実用性ばっちりの趣味。
という分けで、プログラミングも立派な創作活動であり、アートなのだ。ただしSNS映えしないし、その評価も読者のプログラミングレベルによってまったく異なる。初心者に分かりやすければ中上級者からは「くどい」ように見えるし、上級者に分かりやすければ初心者からは「わけが分からない」と見える。
残念ながらプログラミングでは「誰が見ても等しく分かりやすい」という表現がかなり難しいアートなのだ。だから人を選ぶ。そしてそれを楽しいと感じられる人もまた数少ない。
ただしnoteでは相変わらずレスポンス希薄、というかほぼゼロ😭なのでこれまた難しいところだが、私にとってnoteはストレス発散の活字置き場なので、そこそこまったり適当に書いていきますわ~。
今回の創作活動は約1時間30分(累積 約3,847時間)
(1,099回目のnote更新)