ぺんぎんメモ

プログラミングのメモです。たまに私生活のことや鬱っぽいことを書きます。

ここ数年の振り返りと雑談 その1

急に過去を振り返りたくなったので、文章を書きながら振り返ろうと思う。
プログラミングを勉強し始めた2012年8月から振り返る。

2012年8月に、プログラミングを勉強できるスクールに入った。
そこには、プログラミングが大好きな先生がいた。
昔は漁師だったようで、魚の群れを検知するシステムを開発して成功したと聞いたことがある。
100個を超えるゲームを作っていて、スクールに入ったときに最初にやらされたのは、そのゲームのコードをひたすら写経することだった。
ゲームはすべて Visual Basic で作られていた。
言われたとおり、最初の数ヶ月間はずっと写経していた。
そのときに何を考えていたのかはよく覚えていない。
ひたすら写経するだけで、自分で改造したりといったことは全くしなかった。
普通は写経してゲームを動かした後に、何か改造したくなるもの、と先生に言われたことがある。
そうやって改造することでプログラミングスキルが上がることを先生は期待していたんだと思う。
しかし、僕にはどのように改造すればいいのかがわからなかった。
写経しているうちに徐々に書いていることがわかるようになってきたが、それでも改造の仕方がわからなかった。
おそらく、発想力や遊び心が足りないんだと思う。
そしてそれは今でも変わっていない。

ある程度 Visual Basic を勉強した後は、C# と HTML/JavaScript を勉強した。
HTML/JavaScript を勉強する理由は、そのスクールの最終課題が「インターネット上の Web サイトから目的の情報を収集してわかりやすく表示する」だったからである。
先輩の作成したプログラムのプレゼンテーションを見る機会があったが、「株の動きを表示する」みたいな無難なプログラムだったので、正直詰まらなかった。
そのプログラムは、重い処理をしている間も画面に変化はなく、処理中かどうかが目で見てわからなかった。
プレゼンテーション終了後に感想を言う機会があり、そこで「画面が固まったかと思った」と発言した。
すると、少し不機嫌気味に「これでも早くなったほう」という回答を貰った。
そのやり取りを先生は楽しんでいるようだった。

僕の発言は言葉足らずだった。
「比較的重い処理を行う際は、画面に何かアニメーションを表示するべきではないか」と発言するのが正解だと思う。
しかし、「画面が固まったかと思った」だけでは、相手はどうすればいいかわからないだろう。
中途半端なところで言葉を切らすのではなく、きちんと最後まで伝えるべきだった。

ローディングについてもう少し語りたいので語っていく。
ローディング処理は、思っているよりも書くのが難しい。

まず、ローディングアニメーションをどこに表示するのかを考えなければならない。
ボタンが押されたときはそのボタンに表示すればいい、としても良いが、そうなると、画面に複数のボタンがある場合はどうすればいいか。たとえば CRUD 画面の「更新ボタン」と「削除ボタン」が横に並んでいるとき、更新ボタンが押されたときに削除ボタンにもローディングアニメーションを適用するかどうか。
その後、そもそも2つのボタンが横に並んでいるという設計自体が間違っているのではないかなどと考え始める。

こういうことを考えると、「ローディングについては最初に考えたほうがいいのではないか」と思い始める。
最初から考えておけば、後から UI を変更する手間がなくなるからである。
しかし、まだ経験が浅いプログラマが、果たして設計時にローディングのことを考えられるか。
おそらく最初は「こういう機能を実装したい」というのがあるだけで、その機能の一部にどれだけの処理時間がかかるか、そのときにどういったローディングを表示するかなどは考えない。

言語の問題もあると思う。
JavaScript の場合は非同期処理が簡単に書けるのに対し、C# の場合は少々複雑な処理を書く必要がありそうだ。
当時は async/await という構文が存在しなかったため、何か重い処理をしながら画面にローディングを表示するためには、まず「スレッド」を理解しなければならない。
更にローディング時に進捗状況も表示したいとき、スレッド間でのデータの共有方法についても考える必要がある。

「ただローディングを表示するだけ」であっても、色々と考える必要があることがわかった。

今日のところは一旦このくらいで終わっておく。