見出し画像

プログラミングって深いなぁ

今週もさとりゅー師匠とプログラミングやったんですが、総論やばかった(語彙。。。)

ロジック作るのが早い

 目的と処理ロジックを説明すると、類義語検索を行うためのデータの読み込みと辞書化を実装したい。今回は、ペアプロを体感したいということになったので、さとりゅー師匠にドライバを依頼。ファイル見てから、ここまでの実装が完了するまで約20分。その後、僕はひたすらなぜその処理にになるのかについて質問攻め、その時間約20分。結果的に40分。まぁ、そういうことですよ。

画像1

 ペアプロをやりながら思い出していたのは、三宅なほみ先生のボビンの論文。さとりゅー師匠はロジックを理解できている人、僕は理解できていない人。そこで僕がひたすら質問することで、さとりゅー師匠は自分の思考過程(実践知)を形式知化しつつ、僕はそれを元にその知識を理解する。で、別の観点からまた質問することで、双方(かどうかはわからない)の理解度が上がっていくことで僕は実践知を吸収できる、的な。改めて、面白い体験だったぁ。多分、実践知の吸収の確度を上げるためには、写経と類似のロジックの構築による追体験が効果的だと思うので、実践して疑問点が出たら改めて整理しようと思ったです。

画像2

https://coref.u-tokyo.ac.jp/nmiyake/research/

https://onlinelibrary.wiley.com/doi/abs/10.1207/s15516709cog1002_2


動かしながら作っている

 「あまり良くないやり方なんだけど、今回は簡単なプログラムだから」と前置きして、この関数を呼び出すドライバを簡易的に実装して、処理の実装やが一区切りするごとに呼び出して、想定した動きになっていることを確認していました。印象的だったのは、想定外の動きが出た際にも、フラットになんでだろう、と考えていたこと(僕はプログラマのときは、思い込みが激しくて、これがうまくできなかった)
 おそらく検証の粒度をもう少し細かくして(関数単位とかにすると)、フレームワークとかでちゃんと実施すると、テスト駆動開発になるのだろうなぁと思いながら見ていました。
 そして、このやり方で改めて思ったのは、設計と実装を細かく行き来しながら実施していること。設計(要望を整理してドライバ書いてみる)→実装(要望を踏まえてプロダクトコード書いて動かしてみる、動いた)→設計(全体俯瞰して、インターフェイスとか見直してみる)→実装(動いた)。これを動く状態を維持しながらやっているって、頭ではわかっていたけど、実際に体得している人と一緒にやってみることで得られるインパクトはすごかった(語彙。。。)

コード利用時の副作用を考えている

 データにアクセスするためのインターフェイス(この場合には関数)のあるべき姿を実装しながらも考えていました。「インターフェイスは契約だから」としきりに良いながら、副作用を最小限にするために関数の切り出し(リファクタリング&動作確認)を実施していました。

 インターフェイスが関数のメタファーで語られるのって腹落ちしていなかったんですが、今回のペアプロを通じて、理解のピントを合わせることができたので共有します。
 共有リソース(今回は、いわゆるグルーバル関数のようなデータ)に対して、不特定多数の関数がルール無用でアクセスすると、ある実装後は想定通りの動作をしていても、ルールや制約がうまく伝わらずに、更新後には想定通りの動きをしない可能性があって、それを引き起こすリスクが高いコードの状態を副作用が強いと呼ぶとのこと(理解違ったらフィードバックください)。そのリスクを軽減するために、ルールや制約を設けることを「契約」と名付けていると腹落ちしました。(インターフェイス志向設計を読んだときのピザ屋のスクリプトではここまで理解できなかった。。)
 でも、おもえば、人気ラーメン屋で、客が勝手に店に入って注文し始めたら厨房(共有リソース)は大変なことになるけど、整理券をもらってその番号順に食べられるようにするというルールを設けるだけで厨房は秩序を持って最大効率で稼働できる。しかも、契約を受けた先のメカニズムや契約を作った背景は理解せずとも、契約のみを把握するという最小負荷で全員が目的を満足できる可能性が高くなるという最大効率を得ることができる。と考えると、「契約」というメタファーはなるほどそういうことか、と腹落ち。

 XPではコードの共同所有が推奨されていて、よくリポジトリとかCD/CIとかのハード面の概念が取り上げらる場面にあうことが多いのですが、副作用が少ないコードにする、とか、実はこういったソフト面の考えもきちんと拾っていかないとコードの共同所有は広がっていかないのでは無いかなぁ、なんて考えさせられてしまいました。思いやり、そして、プロの仕事を垣間見ました。

総論

 プログラミングを学びたいとか、XPを学びたいとか、素人が色々言っていましたが、結果的にプライスレスな感じの何かを受け取っています!!確実になにか重要なことにフォーカスを当てる準備ができつつある気がしている。


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