宣言すればコンピューターがいい感じに解決してくれる未来を目指して~理想の世界と現実の壁~
by @dekokun on 2014/12/25 00:00
Tagged as: ポエム.
CYBIRDエンジニア Advent Calendar 2014最終日の@dekokunです。 昨日は@gotyooooくんのサーバ障害時のトラブルシューティング ~クリスマスイブでも早く帰ろう~でしたね。彼は新卒2年目なんですけど、新卒2年目でこんな感じで障害要因の絞りこみできているのを見ると、私の若いころとくらべてモノが違うなって思いますね。すごいですね。
今日の内容
人間は「◯◯がしたい」って願うだけで後は全てコンピュータに任せたい。その未来はどんどん迫ってきている。以下、その例をいくつか挙げます。
ルンバ系の掃除機
- ルンバみたいなの買いました。東芝製のトルネオロボっていう名前です。可愛いです。
- 電源を入れてリモコンで「自動で掃除」ボタンを押すだけで部屋全体を勝手にいい感じに掃除してくれます。
- もちろん、「どのように動け」みたいなプログラミングを行う必要はないです。ただ「自動で掃除して」とお願いするだけで部屋全体がいい感じに掃除されるのでとてもいいかんじです。
- 「隅から隅まで圧倒的に綺麗な部屋じゃないとやばい」みたいな人以外は、こいつがいれば基本的にあんまり掃除しなくていいんだろうなと思いました。
SQL
- SQLは「どんな方法でデータをとってきて」って言わなくても「どんなデータが欲しい」っていうだけでデータをくれます。
- 上記のように作られているのに「インデックスはってないカラムにクエリ投げるな」とか「どっちが駆動表だと意識しろ」とか、結局DBMSがどのようにデータをとってきているのかを考えなくちゃいけないの完全に人類の知性の敗北っぽいと思います。
- と言っても実際のところは「小さいデータであればどのようにデータをとってきているかを意識する必要はないが大きいデータではそれは難しかったりして、まぁ程度問題」というのが正しい話ではありますね。
- まぁ、Oracleとかの賢いDBMS使って「程度問題の『程度』」のレベルをあげたらいいんじゃないっすか〜みたいな話でもあります。
- 多分普通の人が(普通の人って何?という話はあるが)普通にDBを使う分には、十分にいい感じに「どんなデータが欲しい」に答えてくれているようです
- 弊社でSQL書いたりORMでDBアクセスする際は、ちゃんと「どのようにデータを取ってきているか」を意識してくださいね
ライブラリとかそういうの
コードの速度は本当に遅いと分かるまで最適化しないみたいなの、理想論ではそういう世界であるべきなんだが結局ORMを適切に使わずN+1問題大量発生とかforの中でinnerHTML変更しまくるとかそういうのはやはり事前に潰さないとねと思うわけですよ。
— でこくん (@dekokun) 2014, 8月 21
ライブラリやフレームワークをより賢くしていく方向で「素直に書くと勝手にその辺りが潰される」という理想の世界を我々が作っていかなくてはいけないとは思っている。
— でこくん (@dekokun) 2014, 8月 21
宣言型がまさに宣言型として動く世の中を。
— でこくん (@dekokun) 2014, 8月 21
- 上記で言っているようなことは、まだまだ人間が頑張らないといけないところ多めだよねって思いますね。ただ、ORMがDBへのアクセスからその結果をオブジェクトに突っ込むまでやってくれてるの、やっぱすごいですよねって思います。
- 最初の「innerHTML変更しまくるとかそういうのはやはり事前に潰さないとね」とかも、Virtual DOM等の流れや、そもそものブラウザのDOM操作の最適化、高速化などによってそういうことをそこまで考えなくても良い世界が一歩ずつ近づいているなぁとは感じますね。
宣言型プログラミング
- 手続き型プログラミングと対比されるやつですね
- 「どのように行うか」ではなく、「何をしたいか」を記述する感じのプログラミングスタイルです。
- 宣言型プログラミングのスタイル及びそのプログラミングスタイルを支援するためのライブラリやら言語やらが最近熱いようです
- ただ、例えばfoldlとfoldrとfoldl’の使い分けは?どういう時にfoldl’使うの?え?foldlを使ったほうがいい場面はほぼないって?なんで?「どう動くかを考えれば当然だろ!」みたいな話を考えるにつけ、人生ってのは私が思っていたよりも圧倒的に複雑なものだなぁという思いを新たにしますね。
- 上記はHaskellを例に出しちゃいましたが、別にHaskellだからどうこうという話ではなく、どのような実装でもある程度のレベルだと何がどう動いているかは考えないといかんよね〜みたいな話でした。
- 遅延評価の思想とか、初めて知った時には本当に感動したし、その分理想と現実の落差を(どこで何が起きているか全然わからんぞ。みたいな。どこで何が起きているのかも全然わからなくても問題ないようにするのが一番の理想なのだろうが)どう埋めるかの絶望感も高い
結論
- 今でもある程度理想の世界は現世に現れてきている
- 現代の私達は、たいていの場合においてマシン語が見えたりCPUの歓声が聞こえたりしなくてもほぼ問題なくプログラミングができる時代に生きているし、ルンバは勝手にある程度綺麗に掃除をしてくれるし、SQLは小さいデータなら中を知らなくてもいい感じに欲しいデータをくれるし、etcetc
- ただ、改良の余地はどれだけでもあるので、我々はそれを更に改良していかなくては!って思います。人間の判断で色々指示を出すとどうしても間違えちゃうので、指示出しは極限までコンピュータに任せたいです。
最終的に我々のしごとが全てコンピュータに奪われてくれないかな〜って思います。
CYBIRD Advent Calendar
- 「やりたい」って言ったらみんな賛同してくれて、いい感じにできました。嬉しいです
- ブログ書く人、25人集まるかなっていうのもすごく不安だったんだけど、みんな書いてくれて嬉しいです
- 集まらなかったら、「しょうがないから自分たちでブログ書きまくるしかないよね〜」っていう話をしていたけどそんな必要は全くなくて嬉しかったです
- 私が2回書いてますが、メンバーが集まらなかったというよりは、私が2回書きたかったってだけですね
- たくさんの人が自分の書いたものを世に出す経験をしたっていうのが死ぬほど重要なんだろうなぁと思っている。が、実際のところ、これが弊社にとってどれくらいいい影響を与えるかはよくわかっていないです
- このブログ群をみて、弊社を知っている人が少しでも増えたのであれば嬉しいです
- 弊社CYBIRDは、一緒に働く仲間、コンピュータに人間の仕事をどんどん奪わせたい仲間を絶賛募集しています!!
- http://www.cybird.co.jp/recruit/
- せっかく会社の名前出してブログ書いてるし、どうせなら宣伝入れてみようと思って宣伝入れてみました
- PHPカンファレンス2014で社名を出して発表してから、なんかもうひたすら社名とアカウントを紐付けまくる感じになっている。いいことも悪いこともたくさんあるだろうなって思います