「CLOS」を含む日記 RSS

はてなキーワード: CLOSとは

2017-08-02

憧れのlispを学びたい

元々phpから入ってruby on rails流行に乗って趣味rubyやってて一度プログラミングから離れてた

最近本の整理しててハッカー画家を読んでハマって全く読みこなせかったポール・グレアムon lispを手にとった

本当になんとなくの気持ちからlispを極めたいという気持ちになった

全く読みこなせかったのが悔しかったのもあるし、読みこなせなかったながらPGの今まで書いた記事を読めば読むほどこのlispというものがとてつもないものなんじゃないかと思うようになったのもある

lispについての概略を知れば知るほど自分の中の厨二をくすぐられる


・60年前のITの速度感で言えば古代プログラミング言語なのに最新のプログラミング言語lispの真似をしてるだけで追いついてない

マクロCLOSという機能がありそれを使いこなすと強力過ぎて他のプログラミング言語には戻ってこれないらしい

しかもそのマクロという機能は他のプログラミング言語には絶対に真似できないらしい

・その真似できない理由が()を多様するプログラミング文法に由来するから

・()を多用するがために他のプログラミング言語学習からするとかなり難しく見えるらしい

マクロというのはプログラムを作るためのプログラムらしい。元々AIプログラムを作ることを想定してたとか

こんな俺たち(?)の厨二心をくすぐるプログラミング言語ってあるか?絶対に無い

lispを使いこなして他のプログラマが1ヶ月で作るものを1日で作るとかマンガか何かみたいなことがしたい!絶対したい!!


で、俺が今やってることと言えばプログラミング言語というものが何をできるか調査するためにrubyで色々作っているところ

HTMLパーサーとかDBドライバlispで作るためにrubyのパーサーとかドライバコードを読んでると、自分が一体何をしてるのか分からなくなる

もちろんそれですぐに飯が食えるようになるのはrubyだ。給料もそれなりに良い。lisp求人を見たことは今まで一度もない

だけどこれもなんとなく遠回りでナンセンスな感じがしてる



直接lispを学ぶのが良いのか、急がば回れruby熟練するのが先か、どうなんだろうか

プログラマーの皆さん教えてください

2016-04-22

プログラミング。好きだけど、さようなら

追記(2015 5/20)

洋食屋ジョブチェンジを果たしました。

---

1年の間、プログラマとして働いていたが、続けていくことが無理だと思い、さようならする話。

プログラマになる前は、コーヒー屋で働いていた。しかし、色々とあり辞め、職業訓練校に通ってプログラミング(php)を学び、60人ほどのソフトウェア開発会社就職した。

会社に入ると、まずC#研修があった。研修と言っても、C#で内製ツールを独りで作るという研修だった。この研修中に「あれ、オレ、プログラム書けねー」と思ったりしたが、研修は終えることができたし、社内の人にも「なかなか良く出来ている」と言ってもらえ、大丈夫だろうと思っていた。

研修が終わり、C#の社内で実際に使われているツールに、機能をいくつか追加する仕事を振られた。前任者にどんな設計になっているのか大雑把に聞き、なんとなくイメージができ、コードを読み始めたのだが、これが全く意味不明で、何のために有るかがわからないクラスが大量にあった。名詞王国だと思った。前任者に、何故このクラスは、この単位で分割されているのか聞くと、「単一責任原則だよ」とか「hogeパターン使うと、後から機能追加しやすいじゃん」というような回答をもらった。納得は出来なかったが、プルリクも承認されて、このツールデプロイされていたので、社内的にも、このコードは、クソコードと言われる物では無いはずだと思ったので、自分プログラムを書き続けていれば、こんな感じの設計に慣れてくるんだろうと思った。モヤモヤは残っていたものの、仕事はしなければいけないので、前任者のコードに習うように、クラスを追加したりして、機能を追加した。プルリクを出すと、設計には何も言われずに、タイポや、テストコードを注意されただけだった。指摘された点を修正すると承認された。振られた仕事は完遂した。が、結局最後まで、モヤモヤは消えなかった。むしろモヤモヤモヤモヤになった。

次に振られた仕事は、内製ツール設計から自分で行い作成する仕事だった。言語Goだった。Goで書いてと言われた時は、以前から自分モヤモヤオブジェクト指向のせいで、モヤモヤしているんじゃないかとも思っていたので、喜んで!という感じであった。が、Goを触ってみると、結局、Go継承の無いオブジェクト指向言語やないかと思った。Goの標準ライブラリinterface名もHogerみたいな感じに接尾辞に-erを持ってくることが慣習らしく、この命名だと、interfaceを満たす構造自身が-erになるので、正にオブジェクトだなぁと思った。巷での「Goオブジェクト指向ではない」というのに期待していたのだが、自分にとっては、とてもオブジェクトしていました。

Goに対する印象は良くなくなったが、ツール設計をしないといけなかったので、Go構造体をC#クラス見立て、前回の前任者のコードのように、単一責任も持つ構造体に(無駄に)分けて、プログラムを書いて、プルリクを出した。自分でクソなコードだと思いながら。だけれどもレビューでは、「errorのチェック忘れ」「標準ライブラリにこの機能ある」「こんな風に書ける」といった感じだった。こんなコードで良いんかよと思ったが、良いらしい。ワケワカメだった。

ここらで、プログラムを書く仕事は、無理だと悟った。現実世界は、自分自然だと思う方法と違う方法で、プログラミングをすることを強要してくる。

ちなみに、仕事ではC#Goを書いていましたが、オブジェクト指向と仲良くなるためにSqueak(Smalltalk)で、オレオレ言語作ってみたりもしましたが、何が嬉しくて、オブジェクト同士のメッセージパッシングプログラムを作るのかわかりませんでした。

Lisp語族言語も触りました。

Clojureは、気持ち良くプログラムを書いていても、Javaが顔を出すところでフラストレーションが溜まってしまって、つらくなりました。

Common Lispは、自分が触った言語の中でも、秀でて良いと思いました。プログラマを辞めても、プログラム書く必要に迫られたらCommon Lispで書こうと思うくらいにです。Land of Lisp楽しいです。あと、CLOS総称関数の考え方が大好きです。

最後に、この投稿は、一種の決別の表明です。いつまでも自分に向いていなかったことに、時間を掛けてしまっている自分との決別です。

最後まで読んでいただきありがとうございました。

自分共感をもった参考リンク

 
ログイン ユーザー登録
ようこそ ゲスト さん