見出し画像

自分に必要なのは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で作るのが楽だろう。

(ちなみにTkinterでも上記のようなGUIデザインはできるらしい。色々と外部サービスを使ってデザインし、最終結果をPythonソースコードでTkinter用ソースを出力させるとか。以前調べた記憶だとFigmaとかいうサービスがいいらしい。外部サービスの選択肢は、3~4つあった気がする。詳細は各自で😖)

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# が自分に合っている点としては、

  1. Windowsアプリを作りたい、GUIで。

  2. WindowsアプリのRPAツールになり得るポテンシャルがある

  3. 実現すればAutoHotkeyから卒業できる(AHKはOOP非対応言語)

  4. RPAツールのコードを将来的にOOPで書き換えられる楽しみがある

  5. とにかくWindows、マイクロソフト製品と相性がいい(当たり前)

  6. 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# を椀方に据えようと思う。

よろしくC# 😍


今回の創作活動は約1時間15分(累積 約3,912時間)
(1,156回目のnote更新)


いいなと思ったら応援しよう!

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