ある著者さんのブログで、その人はネットワークプログラミングが得意で、他の人はそうでもないというかむしろ苦手なので、その分アドバンテージがあった、みたいなことを書かれていた。
ナルホドと思う節があると同時に、なぜそうなのかを考えてみた。
ブログ主はというと、ネットワークプログラミング、いわゆるTCP/IPのプログラミングはほとんどやったことがない。しかし、RS-232Cなどの通信プログラムは書いたことがある。RS-232Cの通信プログラムで悩んだことが、そのままTCP/IPでのプログラミングでも生きているのではないかと考えた。
双方とも送受信があるが、特に悩むのは受信ではないだろうか?送信は、送ろうと思ったときに送ればいいわけで、さほど悩むことはない(もちろん、相手の準備ができているかとか、バッファリングするとかの問題はあるけれど)。
しかし受信の場合、いつアクションが来るかわからない。それだけ待っていてもしようがないので、他のことをしながら待つとか、割り込みを待つとか、受け身になる。このとき、いかにスムースに待ちをこなすかということが、センスになると思う。
いわば、非同期に実行される処理をいかに上手にさばくことができるか?ということになるのかなぁ。
その点、DB系やWeb系はこれが薄い。最近ではWeb系もクライアントサイドでJavaScriptを使ったりして非同期処理が一般的だけど、これが苦手だという人もいるようだ。
プログラミングという作業は頭の中でシミュレーションを絶えず行っているようなものだけど、非同期処理というのは、その中でもやっかいなもののようだ。それがなぜなのかは、ちょっと考えただけではよくわからなかった。ああ、時間切れ…。