#年末の過ごし方
前回の続きです。
https://note.com/marble_walkers/n/n99d6affb773d
モチベーションを保つためには
プログラムの部分部分はロジカルな機構ですからパズルのような面白さがありますが、一連に動かすとなるとすべてが想定通りに動く必要がありますから、トランプタワーやシャンパンタワーのような精神をすり減らすような面があります。
まずはよくばらない
始めるときは「誰も見たことがないようなすごいもの作るぞー」と思うものですが、(1)での説明のようにモチベーション有効期間に完成をみなければ黒歴史になります。。結構痛いです。。
ですので自分の現在の余暇時間、気力度、精神的な余裕を考慮して無理しないものを目標に置きましょう。
好きなところをこだわり、嫌いなところははしょる
プログラムを組むときの望むところは人によりまちまちです。目的とした機能を作りたいというものから、完全無欠なコーディングをしたいとか、ワンライナーで書きたいとか。ここは趣味なので楽しめるように、自分の好きなところにトコトンこだわりましょう。
嫌いなところ、苦手なところははしょりましょう。シングルスレッド、同期処理、ループでウェイト、全部ファイル書き出し/読み込み、オンメモリ処理のみ、エラー回復/リトライなし、でもよいではないですか。でもフレームワークやツールに任せればそのあたりをよしなにやってくれることが多いので任せられる部分は任せてしまうべきです。
ゴールを動かしてでも結果を喜ぶ
いろいろ工夫しても結局モチベーション0になるまでにプログラムが動かないということは多いと思います。
そのときは**「ゴールを動かしちゃいましょう」**
かっこいい3Dムービーが出るはずだったとしたら、とりあえず絵が出たらokとか、モデルが出たらokとか、トレースログが出たらokとか、とりあえずエラーなしで動けばokとか。
きちんと喜ばないと、引きずってしまって次にやる気が出る時期が遅くなります(でもいつかはまたやりたくなるんですけどね)
それに意外に動かしたゴールのそばに新しい道があったりするのです。
途中まで作ったものを別の物に転用したら結構便利だったり、新しい用途が見つかったりします。
Tips
評判がよく情報がたくさんあるフレームワーク/ツールを使いましょう
趣味としてやるのなら楽しいことをやるべきですが、しかし楽しい部分だけでなく苦手な部分や面倒な部分もやらないとプログラムは動きません。
ですので面倒な部分をあらかじめ作り込んであるフレームワークやボイラープレート(ひな形)を極力使いましょう。
ホビーで使える時間など微々たるものです。プログラムの工数を算出するのに行数で量るときがありますが、コード量が多いとそれだけ時間とモチベーションが削られます。出来上がるまでに書くソースは少ないにこしたことはありません。
あらかじめいろいろ組み込んであるということはそれなりに「フレームワーク上でプログラムを書くときの約束事」が決まっていることが多いです。
約束事の見逃しは後々すごく手戻りやハマりどころになることが多いので活用情報が多いフレームワークを使いましょう。他の人も同じところで詰まっていることが多いのでググることで速攻で解決することが多いです。
既存のパッケージを使いまくる
すでに既存に機能が世の中にあるものを作るのにモチベーションを消費する必要はありません。そこに消費するくらいなら、その先の自分オリジナルの部分に気力を使ってください。
今の時代は多くのプログラム部品がパッケージになって公開されています。npmjs,pip,apt,anaconda,NuGet,chocolate,snap,hugging face,etc.
AIだってパッケージで配布されている時代です。
地味な処理を1から書く必要はありません。本当によい時代です。
自分の黒歴史ソースの中には結構プリミティブな部分から作り始めたものもあります。でもそのような無理をしたものは結局途中で詰んでしまっています。。
パッケージは先人達が道程に使い残した剣や弾丸みたいなものだと思ってありがたく使わせてもらいましょう。
ネットの知識は探しまくる
プログラミング周りの困難問題は一度はまると無制限に時間を消費します。解けてしまうとあっけない理由ということもありますが、自身の知識では解決しようのない原因だったりすることもあり一気にモチベーション0になるリスクもあります。
ネットをググりまくって、先人の知恵、Tipsはありがたく使わせてもらいましょう。
そういう情報をまとめているサイトもご存じの通り多数あります。 https://stackoverflow.com/, https://qiita.com/, https://zenn.dev/ など。またGitHubそのものも巨大なソースアーカイブですのでソースそのものも役立ちますし、issue等の問い合わせ情報も役立ちます。
ChatGPTやAI pilot系ツールに問題を直接問い合わせることも出来ます(結構間違いも出ますが問題解決の方向のヒントにはなります)。
自分が作っている過程で面倒な問題を解決できたなら技術系サイトとかにTipsとしてアップしていくのもよいですね。
調べても分からなかったら、別方向から考えて困難問題を回避する別方法を選択するなど切り直しをするべきです。
賢いツールを使う。適切な言語を使う
近年のIDEは本当に賢いです。ソースを書く次の指先を指示してくれたりそれとなく問題を指摘してくれたり。最近は生成AIのサポートによってさらに悩まずに済みます。悩むのが楽しいという側面もありますが、まずはゴールに到着するまでは悩みも極力減らすべきです。
学習コストが少なくて済むので慣れた開発言語を使うのも一案です。ただ開発言語については作りたい分野によってライブラリの揃い具合や参考にできるサンプルや参考情報の量が極端に違う場合があるので言語の得意分野で開発言語を選んだほうがよいと思います。
今の時代の言語なら相互運用はだいたい出来ますから、専門の処理はその分野に強い言語で作り、全体制御は自分の得意な言語で作るなど、つぎはぎにしてしまうのも一案です。
ホビープログラムであれば実行速度が問題になることは少ないはずです。
デコレーションしましょう、出来るだけ使いましょう
作ったプログラムのアウトプットはお気に入りで目立つような出力にしましょう。意味なく可愛い絵が出る、SNSに出力が出るとか、自分がニヤニヤできるようなアウトプットを出しましょう。満足度も上がりますからモチベーションの低下も防げますし、次のプログラム作成への新しいモチベーションも早くたまります。
実用的なプログラム、特に日常的に使えるプログラムは、役だった感が増しますのでモチベーションも上がります。よく使うソフトだと改良のヒントも見つかりやすいです。
いいねは最強のモチベーション。でも、
SNSとかで発表して「いいね」をしてもらうのはやはり誰でもうれしいですし、モチベーションも上がります。
でも、それっていいねに一喜一憂しませんか? 減ったいいねが気になったりしませんか。
減った他の方の評価は自分の方向性を見直すのに役立ちますが、それでも自分の楽しみなのだから、自身の方向は自分で夢見るべきです。
最近のお気に入りは「AIにいいね」をしてもらう
自分が使っているツールの中で地味に気に入っているのが「自分の個人ToDoを完了したら褒めてくれるAIツール」です。
https://twitter.com/marker_mind/status/1739161893309460719
これの原型は4年くらい前から作っている個人活動管理ツール(mi-serverと呼んでます)のToDo管理機能です。元々個人的でたいしてプライバシーも関係ないようなことを管理していたので、去年の中頃からToDoの完了のみを出力するようにしていました。
https://twitter.com/marker_mind/status/1575826670187315200
完了だけだとつまらないので、数パターンの定型文で褒め言葉を付けるようにしていたのですが、去年末頃からChatGPTで再解釈させて褒め言葉を追加するようにしました。
https://twitter.com/marker_mind/status/1607567245118689281
単純パターンだと頭が慣れてしまって単なる完了メモにしかならないのですが、AIで再解釈させて都度、自由な言葉で褒められるのはそれなりにモチベーションの保持に役立ちます。
これだと自分の目標タスクの完了に対して「いいね」を付けてくれるので他人に一喜一憂せずに済みます。
褒めてくれるツールはGPTsでも簡単に作れるのでお勧めのテーマの一つです。
次は具体的なテーマ案とツールなどの予定です。
(おまけ) プログラムしながらAIに絵を描いておいてもらう
最近は高速化手法などでAI絵の生成が早くなりましたが、30分くらいかかっていた頃に、AI絵ツールにプロンプトを設定してから、一定時間プログラムをする などをしていました。
一段落したい頃にはAI絵がバッチで複数枚できていて、それを評価してよく出来たものをSNSにポストします。
そうすれば今日プログラム側で成果が出なかったとしても「AI絵は作った」と考えれば無駄な時間を過ごしたわけではない と妙な納得感があったりします。