年末年始に小さなプログラムを書くことにしている理由
ここ5年くらい年末年始の休みで小さなプログラムを書くことにしています。理由は新技術を利用することによる気づきを得ることです。過去にプログラミングをしていた方でプログラミングから離れているという方にはお勧めします。4, 5年空いたときもあったのですが、時間を空けすぎると調査に時間がかかって年末年始の休暇で終わらなくなりました。かなり違う領域の技術でも応用、流用できることが多いと思います。
私の本業はソフトウェアエンジニアリング分野の研究なので、本業として自身でプログラムを書く機会はほとんどありません。普段の仕事は、共同研究で実際に開発している方々から課題を伺って解決策を議論したりプログラミングやその周辺の活動を理解したり教育したりすることですが、自分でプログラムを書く必要はありません。
では、なぜプログラムを書くのか。プログラミングに関して大きな進歩があれば、本業である研究においてもその違いに関係する変化があるので気づきますし積極的に取り込んだり調査したりしようとします。しかし、利便性が高まることや小規模な改善はそれほど大きな変化にならないので、気づかないことが多いです。本業としてそういう時間を取るのももったいない感じです。ただ、細かい部分を理解できていないことが結果として解像度の低い理解になってしまうと感じるからです。
これの一番大きなきっかけは、当時60代くらいで今は引退されている複数の方の下のような発言です。どの発言もある程度本質はおさえていると思うのですが、小規模な変更はあまり大きなムーブメントにつながらないと断定して、良さや違いを知ろうとしたりしないことが共通していると思います。
- 仮想化なんて昔からやってるんだから。何も変わっていない
- マルチスレッドとかマルチコアなんて結局プロセスがわかっていれば新しいことはない
- クラウドなんてクライアント、サーバモデルを言い換えただけでしょ
- 継続的インテグレーションなんてmakeを知っていればわかる
- 昔の開発はみんなアジャイル開発で言われているようにユーザを巻き込んでいた
これらはある側面では正しいのですが、細かい点で違いや改善があってその違いが大きな利用方法や実装の形態をもたらすというのを何度か見てきました。これが小さなプログラムを書いて違いを知ろうとした大きなきっかけです。
ここ3年間で私が試したプログラムは下のとおりです。その年でちょっと気になったものを試しています。適切な組合わせというよりは、自分の興味でやっているので、バランスが悪いかもしれません。これらを作る中で、ツールのインストール、知っておかないといけない概念、実行環境、ライブラリの品質等を短い時間でできる範囲で見ていきます。「これがサーバサイドJavaScriptにつながるのね」とか「OAuthは前提知識があったほうが理解が進むなぁ」とかいう気づきにつながります。
- 画像のエッジ検出
スマホで撮影したサイコロの写真からどのサイコロの目が出ているかを確かめるプログラム。
画像認識に関して知っていることが足りていないと思ったので、実際にどのくらいの精度でエッジ検出ができるのかをメジャーなライブラリで確かめようと思いました。PythonとOpenCVの組合わせです。Pythonのライブラリのインストール方法やOpenCVのライブラリについても学びました。 - Webページのスクレイピング
指定されたWebページからたどれるページの中に同じような記述があるかどうか確かめるプログラム。
文字列操作に関して知りたいと思ったのとJavaScriptで書いたことのあるコードが5行くらいのものしかなかったので、JavascriptとNode.jsで作りました。 - API連携
TwitterのAPIの実行結果をGoogle spread sheetに書くプログラム。
ネットワークAPI間の認証, Google spread sheetを操作するGoogle Apps Scriptを書いてみたいと思ったのとブラウザで提供されるIDEがどのくらい使えるのか知りたかったので作りました。