Show newer

関数型言語のアプローチはたぶん正しくて、ただ、足りないものは私の頭だけなのだろう。こういう正論には反論しにくい…。まあ、でも、現実的には、その人のレベルにあったやり方で問題を解決するしかないからなあ…。

ツールに対する好みは、異性の好みに似て、絶対的にこれがいいとか悪いとかいうことはない。だから、Python が Ruby より優れているとか、その逆とかを主張するつもりもない。

ただ、やはり異性に対する好みと同じように、自分にとってしっくりくる、というのは誰にもあるはずだ。ツールは必ずしも自由に選べるわけではないが、選べる機会が与えられているなら、自分との相性のよいものを選ぶのがいいだろう。

私にとって、一番しっくりきて気持よく使えるツールは、Python になりつつある。一番最初は、Perl、次は Ruby そしていまは Python。どうしてこういう変化が起きてきたのかは個人的には興味深い。

もともと私は Ruby が一番得意で、機械学習も Ruby でできればいいのに、とずっと思ってきた。いやいや始めた Python だったが、やればやるほど好きになっていくという結果に。

Ruby は Perl 的中二病要素をずっと引きずっているのに対して、Python は「仕事をこなす」という一点に徹している大人の言語。

私自身、歳を取って枯れてきた結果、こういう成熟した言語により魅力を感じるようになってきたのかもしれない。

Python のシンプルさ、肩の力が入らない感じ、すごく好きになってきた。やばい、これは恋かもしれない・・・。

stackoverflow には質問自体に vote できる機能があり、私の質問は -1 になっていた(泣)。これで質問の価値自体を測っているのだろう。でも、この仕組み自体はよいものだと思う。

機械学習自体の学習は進んでいるのかどうかよくわからないのだが、毎日、Python を書きまくっているおかげで、Python の知識は急速に伸びている感はある。すでに、いくつなタスクに関しては、Ruby と同じくらい使えるようになった。

Python のコードはすっきりして見えるので、書いていてとても気持ち良い。

今朝 stackoverflow に投稿したら早速よい回答が2つ付いていた。stackoverflow すごい!嬉しいね。stackoverflow.com/questions/44

stackoverflow は日本語版もあるのだが、あえて英語版のほうに質問してみた。情報検索していてもひっかかるのは圧倒的に英語版の方だし、たぶん英語版のほうが答えがつきやすい気がして…。

ああ、それと nullkal さんね・・・。この3人だけだわ・・・。もっとフォローすべきなんだろうけど、だれがだれだかよくわからないからなあ。

マストドンで活発に活動している面白いアカウントがあったら知りたい…。私のタイムラインはこんあんさんとえふしんさんでほぼ100%なのでw もっとホームタイムラインを賑やかにしたいのだが。

deep learning にGPU必須というのは当たり前の話なのだが、それにしても、ここまでの違いを目の当たりにするとびっくりするな…。NVidia の株価がうなぎのぼりになるのも当然だわ。

例の犬猫分類の機械学習、AWS の g2.2xlarge インスタンスの上で走らせたら、ローカルPC(第2世代 Core i3 のみ)の実に30倍(!)の速度で処理が進んでいる。GPU すげええええええええええーーーー。こんな圧倒的な戦力差は、初めて見た…。衝撃的過ぎる。

まあ、 reduce を足し算で使うくらいなら、

import numpy as np
sum = np.array([1, 2, 3]).sum()

とでもしたほうがわかりやすい気がする…。

Python でも、reduce(lambda x,y:x+y,[1,2,3]) と書けるのか・・・。

うーん・・・。こんなことする意味って実務上あるのかな…。まあ、きっと私には理解できない理由があるのかもしれない。

Python で書くと

sum = 0
for n in [1, 2, 3]:
sum += n

だよね・・・。これでいいじゃない。

まあ関数型プログラミング的な文脈で、「変数を使うな」的な要請から、 みたいなインターフェイスがあるんだろうけど・・・。実務上要るのかなあ…。とかいうとバカ認定なのか。

個人的に Enumerable#map は直観的で好きだけど、 は要らないんじゃないかとも思う。このインターフェイスはいつまで経っても覚えられない。

それは私が頭が悪いことを意味するのだけど、おそらくは頭が悪いのは私一人ではない。プログラマに頭の良さを要求するインターフェイスは筋が悪いと思う。

愚直にやればいいじゃない…。

[1, 2, 3].inject {|sum, n| sum + n }

って書けば確かに頭よさげでカッコイイけどさ、

sum = 0
[1, 2, 3].each { |n| sum += n }

って書けば誰でも直観的に理解できるんだから…。

実務上、この2つの記法の違いで致命的な差が生まれることなんてほぼゼロだろうと思う。

「一つのことをやるのに複数のやり方を!」と声高に叫んでいた、Perl はほとんど瀕死状態だしね…(Perl 6 に新しく加わったよく意味のわからない演算子群を見て笑ってしまった)。

ソフトウェアは放っておいてもどんどん複雑になっていくのだから、言語仕様的に、プログラマに凝ったことをさせないという縛りは有効だと思う。

こういうことをいうと宗教論争を巻き起こしてしまうけど、UNIX哲学により合致しているのは、Ruby より Python だよな、と言わざるを得ない。

Ruby は言語仕様的につい凝ったプログラム(メタプログラミングお化け)を生みやすい。だが、そんなものはほとんどの場合、実際には要らないのだ。もっとも知能の高い人たちだけが理解できる自己満足の産物にすぎない。

Google が Python や Go といった「つまらない」言語にこだわるのは、「プログラムはなるべくシンプルに書こう」という UNIX 哲学に忠実だからではないのか。もちろん Google には世界最高のプログラマーたちが集結しており、凝ったプログラムを書こうと思えばいくらでもそうできるのだが。

ja.wikipedia.org/wiki/UNIX%E5%

朝電車に乗ると、みんなスマートフォンをいじっている。これらのスマホは99%、iOS か Android の上で動いている。iOS は BSD、Android は Linux に起源を持つOS、つまり UNIX だ。老若男女、朝から夢中で UNIX マシンを操作しているのだ。これは、夢かうつつか…。

1970年にタイムトラベルして、UNIXを作った強者達に「50年後には、すべての人たちが一日中、UNIXマシンをいじり倒すようになる」と告げたら、狂人扱いされるだろうな…。

本当に久しぶりにスタバに来ている…。今日は気分を変えて、高価なサンドイッチ(460円)を頼んでしまった…。うまかったけど、高い。高いけど、うまい・・・。

でも、吉野家の牛丼と比べてのこのサンドイッチが本当に高いのかはよくわからない。雰囲気は100倍こちらのほうがいいし。味も3倍くらいうまい。唯一劣っているのはカロリーくらいか。

Show older
mstdn.jp

Mastodon日本鯖です. よろしくお願いいたします。 (Maintained by Sujitech, LLC)