見出し画像

Retro-gaming and so on

RE: プログラミング学習日記 2024/02/13〜

龍虎氏の記事(2024/02/19)に対してのコメント。

うわ〜全てここに書かれていた(^_^;)

うん、書いてる書いてる(笑)。
いや、意外と、あるトピックが挙がった時は、その周辺情報に関しては知ってる限り、かなり書いてるよ(笑)。
いや、別に自慢してるワケじゃねぇけど(笑)。
むしろ、プログラミング初心者とか初学者相手でもいつも容赦ない情報量にはなってると思う(笑)。
アレだ、多分小学生とか中学生だと泣き出すレベルな気がしてる(笑)。情報量多すぎて「✗✗だけ知りたかったのに・・・・・・」とか涙目で愚痴られるレベルだ(笑)。
もちろん、言い回し考えたり、分かりやすい例がねぇかな、とかは考えるけど。あと、厳密性を多少犠牲にしても面白おかしく書くように留意はしてるけどね。
それなんでか、っつーと独学者対象に考えてるから、なの。人間って一回とか一発で記憶するのが無理だから。学校とかだったらテストあったり、とかさ。知識確認やってくれるけど、独学だとそうはいかない。
結果、「何度か同じトピックに遭遇して」いつかそれに「慣れる」ように一応気を使ってんのよ。
いっつも何か書く度に「将来の伏線になるかな」とかさ。そういう気は使ってるけどね。
だから、

いかに今まで「へぇ〜」ってノリで読んでたかってことです

その読み方、ってのは正しいんだ。そういう想定をしている。ノリで読んで良くって、詳細なんつーのは実際何かしらに「相対しないと」骨の髄から理解出来ないモンだから。僕もそうだし。
だから「一回読んだら全部覚えるべきだ」的な傲慢な事は全く考えていない。それよりもギャグがスベってないか、とか(笑)。そっちの方が気になってるわ(笑)。
なるたけ「コンピュータサイエンス的な事象の捉え方」とか、それがベストかどうかは知らんけど、そういう考え方の紹介はやるようにしてるけど、ギャグの方が個人的にはより大事だったりする(笑)。

そして読める・・読めるようになっている!

うん、なってるでしょ(笑)。
もう前冗談半分に言ってたけど、「readを忘れて(string->number (read-line))ってやっちゃってる」って辺りで完全に「プログラムを書く」事自体には慣れちゃってんだよね。
結果「言語が身についている」。
加えるとOCamlも「読んでた」でしょ?全然自覚ねぇかもしんねぇけど、もう龍虎氏はバイリンガル越え始めたんだよな。Pythonでトライリンガルだ。
んで、これも繰り返すようなカンジになるんだけど、確かに「Lispはラテン語」なんだわ。ラテン語習得してる以上、ヨーロッパ言語のどの言語だろうと「習得の難易度が下がってる」。今、既にラテン語をマスターしてるような状態なんだ。
今この時点で「色んなプログラミング言語」を読解するくらいの「基礎知識」、っつーより、もう「センス」を習得してる、って事になるんだ。
もうどの言語が来ようと「あまり怖がらない」メンタリティを形成しつつある時点に来ている、と思う。

Pythonドキュメントの「クラス」部分を読む。すごく丁寧に書いてある!Racketドキュメントを経験してるとありがたみがよく分かる。

ぶっちゃけ、これ読んで大爆笑してた(笑)。
そうなんだよな、Scheme系のドキュメント、っていっつも言うけど、Gauche以外は事実上「クソ」なんだよ(笑)。
これ見ても、Lispって「メジャーになりきれない」だけの理由があるんだよね。コミュニティの性質っつーかさ。どう考えても「一見さんお断り」だし、プログラミング初心者に「優しくなくて当たり前」ってメンタリティになってる。Pythonとは大違いだ。お前ら京都人か(謎
うん、Pythonって、言語設計的に色々問題あるんだけど、でも全般的な雰囲気では(コミュニティを含め)プログラミング初心者Welcomeってのが一貫してんだよな。Lispにはそれが「無い」。
Schemeだと特に、仕様書が表示的意味論で書かれてきた歴史的背景もあって、具体的な例示を求めるエンジニアにさえ「拒否」の姿勢を崩さずに来た、っつーか。「マニュアルを読んで理解するには計算機科学の博士号程度持ってなきゃいけない」的な(笑)。読む側にとにかく「苦労を強いる」んだよ。そんな言語流行るわけねーだろ、的な(笑)。
言い換えるとLispって「仲間/内輪ウケしとけばエエや」ってどっかそういうメンタリティがあるんだわ。だから広がらないし、そもそも「新規ユーザーを獲得したい」とか誰もマジメに考えてないんだろう。この世の片隅に存在する、って事だけが実は重要なんだ。
まぁ一方、Pythonみたいに一貫してなくって、「何か(直感的に)この動作おかしくね?」とか言われるより先に「ドキュメントに言い訳を山ほど書いておく」ってのもどーか、ってのもあるんだけどね(笑)。
「理論的に一貫してるLisp」と「それはバグじゃなくて仕様ですPython」のどっちがいいのか、って訊かれると悩むトコではあるんだけど(笑)。

 ふーん、Iterはイテレータ属性を、Nextはイテレーションするときの動作を設定してるわけか〜

そうそう。
で、ちょっと外れるけど、return selfって書き方にも慣れていた方がいい。初めは「何だこれ?」って思うっつーか、「ギョッとする」表現だけどね。まさしく「自分自身を返す」。
イテレータなんかでも変数に代入されて実行される以上、事実上「自分自身を破壊的変更して再代入してる」って意味でもあるんだ。
このreturn selfを、例えばプロシージャ的なメソッドに付け加える事で、何度か書いてるけど、Pythonでメソッド・チェーンが実現出来る。
メソッド・チェーンってのは特にRubyが広めた方法だと思うんだけど(別に発明した、ってわけじゃないが)、あまりPythonではメジャーじゃない手法だ。
Lispなんかだと

(関数n (関数n-1 ...... (関数1 データ]


って書き方で("]"は複数の閉じカッコがある、って意味・・・昔のLispではマジでこういう省略記法があった)、「データに関数を連鎖させていく」って方法論になってるじゃない?
一方、オブジェクト指向では、

データ.メソッド1().メソッド2(). ・・・・・・・・.メソッドn-1().メソッドn()

と言う表現が「使える場合がある」。これをメソッドチェーン、って呼ぶんだ。
上のLispの例だと、使われてる関数は全部「返り値」を持たないとならない。
一方、メソッドチェーンの場合、これが成立するには、Pythonで言うとメソッドチェーンに組み込まれるメソッドが「プロシージャルなメソッドではない事」、そしてreturn selfしてるのが条件になるんだ。「自分自身が返ってる」事で、データ自身が「常に加工されて返される」って意味になって、結果Lispなんかでの「関数連鎖」と同じ効果が見込める。
Pythonじゃ全くメジャーな手法じゃないんだけど、Rubyじゃ常套手段で、また、最近だとJavaScriptでも流行ってる。Javaもコンセプト自体は色んなトコで解説してるかな。
これも必須ではないんだけど、「オブジェクト指向」ってパラダイムでは記述が簡便で明解になる事が多いんで、Pythonでメジャーじゃないにせよ、「教養として?」(笑)、あるいは「記述を簡便/明解にするのを好む」と言うLispっぽいテーゼを前提としてバンバン使って良い形式だと思ってる。
こういう時には「他の人がこう書かないから」とか遠慮する必要なんざねぇ、って思ってる。「簡便な形式でLispっぽいアイディアで書ける」のなら書くべきなんだ。
そのためにも「最初はギョッとする形式」、return selfには慣れてた方がいいと思う。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「RE: プログラミング学習日記」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事