自分に必要なのはPythonじゃなくてC# だった話
本格的に取り組むプログラミング言語をC# に絞ろうかと思っている日記。自分のニーズと各言語の特性を考慮した結果、PythonよりもC# が必要だったという結論です。
(約 3,500文字の記事です。)
C# 学習のモチベーションを探してみた
まず学習中のObject-Oriented Programming (OOP) だが、これは長丁場になる。半年スパンで考えるべきだろう。間違っても1~2週間でケリがつくわけがない。なのでOOP学習は日課としてコツコツ学ぶ作戦に変更。難解すぎるが、強力な武器の匂いがする。避けないで迎え撃とうと思う。だが長丁場なので何の成果もすぐには出てこない。
そこでもっとシンプルにC# でGUIベースのアプリ作りの教材をスタートさせた。ある程度進んだらコースの紹介をしたいが今は割愛。
GUIデザインが楽
UIデザイナーが純正でVisual Studioに付いているので、まぁあっさり作れる。GUIはGUIでデザインするのが一番直感的。(ただしコードレベルでスッキリ美しいかどうかは謎。まだそのレベルにない。)確かVisual Basic?もこんな感じでUIデザインできたような気がするが、よく分からん。とにかく必要なアイテムを左からフォームにD&Dして、プロパティで詳細を指定をすれば実装できる。
これこれ、こういうのでいいんだよ!
以前にPython+Tkinterで苦しんだが、やはりGUIはGUIで作るのが楽だろう。
WindowsのみでMacバイナリを作れる
しかもこれは.NET 8で作っているのでクロスプラットフォームだ。Mac, Linuxでも使えるGUIだとか。まぁその予定はないですが、Mac対応についてはZbrushプラグイン開発で応用性があるのは嬉しい。(軽く調べたが.NET 8、つまりは非Frameworkの.NETであればGitHubのサービスを使ってWindowsのみでもMacで動くバイナリを生成させられるらしい。)
対してPythonの場合はMacで動くバイナリを作るためにはMac環境が必要。私はMacを持っていないし購入予定もないのでPythonで作る場合は必然的にWindows専用アプリになってしまう。クロスプラットフォーム対応でもMacバイナリを作れないという矛盾。対して.NETならばWindowsのみの環境でMac版が作れる(ただしデバッグができないw)もう全面的に.NETを信じるしかない。Windowsで正常動作だからMacも正常動作なはず、と割り切る。Zscriptの動作が実際そうして運用しているしw
RPAもできるっぽい
私はAutoHotkeyを使ってWindowsアプリの自動化をさせている。RPAと呼ぶらしい。だがAutoHotkeyはプログラミング言語なので、また別の言語として学ぶ必要がある(あった)。過去に既にいくつか自分専用のツールをAutoHotkeyで作成済みだが、残念なことにAutoHotkeyはOOPができない。言語の特徴としてOOPの条件を満たせないのだ。詳細はこちら。
以前に調べ物をしていて見つけた金言として「やりにくいなと思ったらプログラミング言語の選定を見直せ」という台詞があった。まさに今、それ。AutoHotkeyでOOPは茨道でしかない。OOP非対応言語を使ってOOPを目指すのはマゾだろう。というわけでAutoHotkeyではモジュラープログラミングが限界。
C# でAutoHotkeyの代わりにRPAをやる
そしてさらに調べてみると、あまり数は多くないがC# でRPAを実践している情報がちらほらある。ちらほら、ということはあまり万人向けではないってことね。マイクロソフトのUIAutomationという仕組みを使えばC# でもWindowsアプリの自動実行ができるそうだ。ただしC# やWindowsアプリへの深い理解が必要なので敷居が高い=実践情報が少ない、という理屈ね。高価でも使いやすいRPAツールの情報が多いことから、C# でRPAは「あまり」一般的ではない。
だがマイクロソフト謹製のWindowsとVisual StudioとC# 、RPAができないはずがない。ここに勝機を見出した。
C# でOOP学習中の段階でC# への深い理解はハードルにならない。Windowsアプリへの習熟のために今まさにGUIアプリの教材で学習中。なのでここも問題ない。そしてC# でRPAをやるモチベーションがある。ならば何の問題もないじゃないか!
今後の予定(だったらいいなw 的な)
とりあえずOOP学習とGUIアプリ作成を実践しつつ、それらが終わったら、あるいは平行して自分専用RPAアプリの開発もしたい。例えば、
C# での他者WindowsアプリのRPAを体当たりテスト
このときにはプロシージャルな、モジュラーコードで進める
運用する
将来的にOOPの知識が増えたら、モジュラーコードをリファクタリングしてOOPに書き換える
つまり自前ツールのリファクタリングでOOP実験をする
ゾラン先生の教材でモジュラーコードからOOP変換のリファクタリングができることは理解している。なのでスパゲティになっていないモジュラーコードの準備と運用は、OOPとは無関係だ。モジュラーコード+GUIでRPAだったり自分専用ツールを運用できればまずは問題ない。
それにOOPへの書き換えは将来のお楽しみ、ということにすれば、OOP学習のモチベーションも保たれる😍
【結論】C# に絞ってプログラミング学習する
3ヶ月前はPythonで学習を開始したが、今日、PythonをやめてC# に集中することにした。PythonはBlenderアドオン開発で使える可能性が残るものの、今の未来予想図にはまだ登場しない。
そして細かい記法についてはChatGPTに任せてもいいな、という実感がある。実際にZscript+Pythonで1つのZbrushプラグインを作ってみての感想。動作仕様や擬似コード(pseudocode)を書いてChatGPTにPythonで清書させればそれでいい。
言語ごとの細かい記法はChatGPTに任せる。それよりも擬似コードを自分で書けることのほうが重要。あとはChatGPTに整合させる。
なので必要性の点からも、今の自分にPythonは向かない。Pythonの強みは完成されたたくさんのライブラリ?パッケージ?をポン付けで使える点。数学的な演算やAI学習用のそれが豊富だとか。でも今の自分には価値が分からない。なのでそういう点でも、Pythonの価値を引き出せない。
むしろC# が自分に合っている点としては、
Windowsアプリを作りたい、GUIで。
WindowsアプリのRPAツールになり得るポテンシャルがある
実現すればAutoHotkeyから卒業できる(AHKはOOP非対応言語)
RPAツールのコードを将来的にOOPで書き換えられる楽しみがある
とにかくWindows、マイクロソフト製品と相性がいい(当たり前)
Unityでも知識を生かせる
今の自分にとってはPythonとC# といえば圧倒的にC# という結論。なのでPython学習はほぼ完全に打ち切りです。
C系とPythonは相性が悪い?
Pythonは型がごちゃまぜでもOKだがC系は型の宣言や型の一致がとても重要。なので相容れないコーディングスタイルとなる。初心者が両方学ぶととても混乱する😭なのでいったんC# で自分のスタイルを固めたいと思う。柔軟性の高いPythonのスタイルが逆にC# の学習を阻害すると感じた。
なのでnoteでは今後Pythonの記事はほとんど出てこないと思います。
C# を自分のメイン言語に据えることにしました。
「椀方試験」第53話 | 美味しんぼ
https://www.youtube.com/watch?v=k7hoaOTZFgY
よろしくC# 😍
今回の創作活動は約1時間15分(累積 約3,912時間)
(1,156回目のnote更新)