いものやま。

雑多な知識の寄せ集め

私のコード履歴書。(その3)

前回の続き。

個人開発

そんなわけで組込み向けのIDEの開発をやってたんだけど、いろいろあって辞めて、個人開発をやったりもした。 その様子はこのブログの過去記事でも書いたりしてる。

この期間にまずやったのは、Rubyをもっと本格的に学ぶということ。 Rubyオブジェクト指向すごいというのと、RailsでWebサイトを作りたかったからというのがその理由。

Rubyもじっくりと触れ始めるといろいろ思うところはあり、命名の英語がちょっと変じゃない?とか、とにかくやろうと思えば何でもできてしまうパワフルさを怖く感じたり、コードを読んだり調べたりするときには型が分からずに苦労したりとかもあった。 けど、それを越えると言語設計がとにかくよくできてることに感動して、とくにブロックという一つの考え方をあれにもこれにも応用できるというところが、できるだけ少ない原理でより多くのことを説明したい自分にはとても素晴らしく感じた。

ちなみに、ちょっと脱線するけど、このRubyの設計の素晴らしさに比べて、Pythonの設計の酷いことよ・・・ Rubyなら全部ブロックで片付くことを、Pythonだとループだけでもforだったりmapだったりリスト内包表記だったり様々な書き方がある(しかも速度が違うとかいう罠がある)し、さらにファイル処理はwithを使う必要があったり、その主張に反して場当たり的に様々な方法で言語仕様が追加されてて、キメラみたいになってしまってる。 オブジェクト指向についてもPythonは正直Perlと同レベルだし(いずれもhash/dictに対して関数の紐付けを行なって、それを呼び出すシンタックスシュガーでオブジェクト指向を実現している)、Rubyならアクセサもただのメソッドなのに対してPythonアノテーションによるデコレータを言語仕様に追加してメソッドとは別物のプロパティとして実現したりする。 このプロパティの何が酷いって、プロパティは()をつけちゃいけないのに対し、メソッドは逆に()をつけないといけないので、プロパティなのかメソッドなのかをわざわざ確認しないといけないこと。 一例を挙げると、date = datetime.date(2021, 10, 23)としたとき、日付を確認したい場合はdate.dayと書くのに対し、曜日を確認したい場合はdate.weekday()と書く必要があったりする。 もうホントにPythonを使うのはストレス・・・

なお、このブログのRubyに関連する記事は以下から:

閑話休題

Rubyとは別に勉強したのがSwift(とObjective-C)。 これはMac OS XiOSでアプリを作りたかったから。

ちなみに何かと嫌われがちなObjective-Cだけど、個人的にはC++よりもずっと好き。 言語の流れとしてSmalltalkの流れをくんでいて、Rubyと同じようにメッセージパッシングの考えをベースにしたオブジェクト指向言語になっている。 メソッド名が長いとかいう声もあるけど、分かりやすいので、補完があれば全然いいと思う。

そんなObjective-Cを改善させてよりモダンにしたのがSwiftで、これも面白かった。 まぁ、最近は全然追えてないので、今どうなってるのかさっぱり分からないんだけど・・・

このブログのSwiftに関する記事は以下:

あと、実際にアプリを作った様子は以下:

他にもいくつかの言語に興味を持って勉強しようとしたこともあった。 けど、途中でつまらなくなって辞めてる。

たとえばHaskellクイックソートの書き方とか面白くて興味持ち、モナドとかも厨二心をくすぐるものがあっていろいろ調べたんだけど、結局のところ、関数をつないで実行順に一意性を持たせて、状態などをオブジェクトとして関数に流し、それをdo記法で書きやすくしてるだけと分かると、それだけのためにわざわざこんな大掛かりで分かりにくくしかも取り扱いの面倒な仕掛けを用意してるのはとてもバカらしく、それなら素直にコード書けばよくて、結局、関数型の考え方はサブシステムとして使うのにはいいんだけど、わざわざそれだけでシステム全体を作る必要はないというところに落ち着いた。

また、Erlangも軽量なプロセスを使ってメッセージをやり取りするというのが面白かったんだけど、そこで実現されてるのが結局オブジェクト指向のそれで、やっぱりサブシステムでしかなくて、わざわざ手作りでオブジェクト指向を実現する必要ないよなとなった。 (これはErlangの設計者の一人も認めてる;その後のJoe Armstrongのオブジェクト指向に対する見解 - tokoma1's blog

社会人(研究開発)

上記のゲームを作るために強化学習SVMを勉強して、そこで使われてたのが大学でやっていた最適化だったので、やっぱり最適化はすごいなと思い、最適化や機械学習を使っていきたいと転職活動した。

そして、機械学習で現在のデファクトスタンダードになっているのがめちゃくちゃ残念ながらPythonなので、Python機械学習関連のライブラリについて学習した。 Python自体はとても酷い言語だし環境もアレで、ライブラリ自体も設計がいいとは言えないんだけど、とりあえず使えるものではあるので使ってる。 さすがに一から実装しようとすると大変なので。 これがRubyだったらよかったのになぁ・・・

まぁ、統計とかでRも少し見たりしたんだけど、RはPythonにも増してアレでマジ本当にどうしょうもないくらいに酷い言語(これは言語なのか?)なので、そういう環境だった人からすればPythonが神のように思えるというのは分かるんだけど・・・

他にも最近はJuliaとかが話題に上ってるけど、個人的には様子見。 たしかにPythonの中途半端なオブジェクト指向使うくらいなら、学習コスト下げてオブジェクト指向を使わずにプログラム書いた方がとっつきやすく、それならとオブジェクト指向を取っ払ったJuliaは潔いとも言える。 今後、どうなっていくのかなぁ・・・


長々と語ったけど、コード履歴書はこれでオシマイ。

今日はここまで!