TOP10簡易説明の C# のところ

プログラミング言語人気TOP10の簡易解説

などという記事が話題になっておりまして。

まあ、個人的な感想としては、「おそらく専門外であろう言語の説明にしてはよくできてるんじゃないかな」くらいのところ。

以前、まあ、言語/プラットフォームのコミュニティごとの「非もて」談義に関して、twitterでかなり不快感をあらわにした批判をかけたことはあるんですが、あれも、実は内容そのものに関してはそこまで腹を立てていなかったり。(あの方、Android クラスターな人っぽく、そのAndroidは「非もて」だと言っていて、実は単なる自虐ネタくさいので。)
あの記事に関して何にそんなに不快感を示したかというと、「酔っぱらって書いたから、確信はないよ」の部分なので。

今回のこの記事に関して、突っ込みいれるとするなら:

  • Javaのコピー」
    • 実際、ドナドナされたあの会社がアレな感じでなければ C# は生まれず、MS が Java に手を入れて、今の C# 3.0 的機能が Java に入ってたんじゃないかと個人的に思っています。
    • クロージャとか型推論」に触れているあたり、まあ、よくある「Java しか知らない人の偏見」と比べれば随分と「よく知っている」印象
  • 「Micorosoft頼み」
    • Mono な人に怒られるよ!
  • 「MSシンパな人、Windowsが大好きな人は、C#を学ぶことが義務付けられている」
    • ええ、義務付けられていますよ!… と、twitter でも言いかかったけども
    • 自分の場合は逆なんですよね。C# って言語に一目ぼれしたから今がある。さもなくば、MS シンパになっていない。
  • Windowsで動くGUIアプリを作りたい場合は、C#から始めるのもアリ」
    • C# の利点、GUI が作りやすいというのももちろんあるのだけども、.NET はカバー範囲が広いというのも大きな強みかと
  • 「参考図書: 独習Java」「なんかJavaっぽいなぁと思いながら書いたらちゃんと動いた」
    • これは、「世の中 COBOL っぽい Java で動いてるんだから、Java っぽい C# でもいいよね?」という自虐かと。
    • Java 屋さんからの転向組はこれでいいと思う。さすがに、これを真に受けた初心者が Java っぽい C# を学んでしまうとと少々悲しいけども。

可換性

3×5 の話題に付随して、そういや、掛け算の可換性についての話とかで盛り上がってる人もいるようで。

「可換性は自然なことではない」って。

3次元ベクトルの外積とか行列とかを知ってると、そう思うじゃん?

体に限定すると?

3次元ベクトルの外積も、行列の積も、あれって逆演算できないんですよね。掛けれるけど割れない。四則演算全部満足にできる体(たい, field)じゃなくて、環(かん, ring)。

非可換な環は結構多いけども、体となると非可換なのってすごく作りづらく。数の概念を抽象化して、環とか体って言葉が生まれたころですら、「体は可換」が普通だと思われおりまして。一般に、「体」とだけ呼べばその積は可換で、非可換な場合はわざわざ斜体と呼んだりも。

もちろん、非可換な体も作れはします。四元数(quaternion)がその例です。が、割と発見が遅かったという。

行列の Ax と xA

行列の積が非可換っていっても、じゃあ、

  • x をベクトル、A を行列とするとベクトルの写像としての表現で正しいのはどっち?
    1. Ax
    2. xA

実はこれ、問題文が悪いんでどっちでも OK。x が縦ベクトルなら Ax だし、横ベクトルなら xA。

順序なんて記法の問題でしかなくて、どっちが正になるか、定義の仕方でなんとでも変えれます。

関数の適用

行列の Ax って表現、行列 A はベクトルに対する演算子になります。あるいは、ベクトル→ベクトルの関数みたいなものです。A(x)。

一方で、プログラミングの経験ある人は、x.A() っていう表現にもなじみあるかと思います。特に、C# がわかる人は拡張メソッドを考えてみてください。A(x) でも apply A to x になりますし、x.A() でも同じく apply A to x。

要するに、演算子の前置きか後置きかの差でしかなく、やっぱり記法の問題。

  • 前置き演算
    • y = A(x)
  • 後置き演算
    • x.A() -> y

集合的に見て

集合論で言うと、3 = { 0, 1, 2 }、5 = { 0, 1, 2, 3, 4 } っていう集合なんですね、3とか5って文字の意味するところは。さて、じゃあ、×の意味は?

一般には、掛け算の定義っていうと、

  • n+ を n の跡継ぎ元とする
  • f_n+(a) = f_n(a) + a となるような写像の列 f_n が作れる(ことが証明可能)
  • この f_n(a) をもって乗算を定義して、 a×n と書く

かな。あと、集合同士の直積の元の数で定義できたりも。3×5なら

  • {0,1,2}×{0,1,2,3,4} = { (0,0), (0,1), ..., (2,3), (2,4) } = 元の数15個
    • () は順序対(ordererd pair)で、(0, 1)と(1, 0)は別の意味
    • {0,1,2,3,4}×{0,1,2} だと { (0,0), (0,1), ..., (4,1), (4,2) } になって、集合的には別
    • ただ、自然数としての 3 とか 5 は「集合の元の数」で定義するんで、{(0,0), (0,1), ..., (2,3), (2,4) } と { (0,0), (0,1), ..., (4,1), (4,2) } はどっちも15と同値

腐女子演算

3が攻めで5が受けという意味なら 5×3 は不正解!

こればっかりは納得。
3とか5がどう擬人化されてるのかはちょっとわかりませんけども・・・

(ところで、最近のIMEときたら、腐女子を一発変換してくれるんですね・・・)

5×3 の例のアレ

追記: http://kidsnote.com/2010/11/15/35or53/ こういうのがホットエントリーに入ってるけども、やっぱり3×5のどっちが「掛ける数」でどっちが「掛けられる数」かの問いには答えられてないなぁ。あと、指導要領からして終わってることが発覚。

さらに追記: http://d.hatena.ne.jp/yetanother/20101114/1289759677 「3×5≠5×3」派の意見は、やっぱり「指導要領を部分的に読んで曲解」ってところっぽい。

かけ算の5×3と3×5って違うの?
http://togetter.com/li/68853

5×3は不正解派の人があんまりにも納得いかないんで今更釣られてみる。

正解派はもちろん:

  • ×付けられてどこが問題なのか気づける相手ならいいけど
    • 3皿5個のリンゴの数が、(皿に置かず)3行5列に並べても個数変わらず、さらにそれを横から見て5行3列にしても個数変わらないという脳内イメージができてる子供相手に、「5×3はダメ」を納得させられる?
  • 掛け算は可換だから気にすんな
    • 掛け算の可換性も確か同学年で教えるはずなのに、それと矛盾する
  • もちろん考える過程は大事だけども、こんな短い式から過程は読めない
    • 皿ごとにカウントしてって 3+3+3+3+3 と、お皿に1個ずつ乗せて各皿3個になるまでカウントして 5+5+5 と数えるのと、どっちも正解じゃない

なわけですが、そこで不正解派の人曰く、

  • 「掛ける数」と「掛けられる数」が違うからそこは厳密に

って言ってるわけですね。
じゃあ・・・

どっちが「掛ける数」?

「掛ける数」と「掛けられる数」が違うというところまでは、(少なくとも哲学的には)納得は行くものの、そこから先の説明がまるで納得できるものがない。

3×5、どっちが「掛ける数」で「掛けられる数」数なの?

  • 3に掛ける5 だから 5が掛ける数
  • 3を掛ける5 だから 3が掛ける数

どっちだよ!

「5皿に3個ずつ」と「3皿に5個ずつ」が違うのはいいとして、「3×5」を「3皿に5個ずつ」と読む根拠は?「5個を3皿」でないのはなぜ?

あと、順序気にしておかないと割り算の時に詰まるって?じゃあ・・・

  • 15個を3個ずつ皿に分ける
  • 15個を5枚の皿に分ける

やっぱ問題次第じゃないかと・・・

言語と語順

ここで、もう少し話をややこしくしてみましょうか。×って記法、ヨーロッパでできてますよね。じゃあ、印欧系言語の語順で考えないといけないのでは!試しに英語にしてみましょうか。

  • 3 times 5 (5を3回)
  • multiplies 3 by 5 (5を3に掛ける)
  • 5 dishes of 3 apples (3個のリンゴが5皿)
  • 3 multipies 5 (3が5に掛かる)

ややこじつけなものの、でも、言語によって語順は変わるということは重要。

抽象化

こんな言語依存な話になっちゃうのって抽象化が足りないんじゃないですかね。だからこんな言語依存、読み方依存な議論になっちゃう。

数学(算数も後々には数学につながっていく)として、抽象化は非常に大事なわけですが。もちろんそんな話小学生相手にしても難し過ぎますけども、上記のような話が記憶の片隅に残って、抽象化が必要な歳になった時にそういう志向ができない子に育ったら嫌だなぁと。

最初にちょっと書いてますけども、この問題の場合、抽象化ってのは以下のような感じ

  • 3皿5個のリンゴの数が、(皿に置かず)3行5列に並べても個数変わらず、さらにそれを横から見て5行3列にしても個数変わらないという脳内イメージを作る
  • さらに、それはリンゴや皿である必要はない

このイメージができてる人相手に、「3皿5個と5皿3個は違うから3×5でないとダメ」って説明してほんとにいいものか。

萌えキャラ路線

まあ、もうかれこれ1年くらい、↓こんなことしてるわけですが。

実は作った当初のこと言うと、あんまり乗り気じゃなかったんですよね、擬人化やるの。正確にいうと、「ただ絵にして終わり」ってのはやりたくなかった。もしやるのであれば・・・

  • 半端はやっちゃいけない
    • 基本的に、擬人化とかは突っ込みどころ満載なので、いっそのこと「もう突っ込んだら負け」って言わせるレベル目指さないと。
  • 不自然にキャラが露出するのは嫌
    • そんなところにキャラを入れる意味はあるのか?みたいなのになるのは嫌。
      • 無意味にトップページからキャラ入ってるとか、全ページのわきにキャラ入ってるとか、ちょっと。
      • 見たい人が見るのと同じくらい、見たくない人が見ないで済むってのも尊重したい。
    • キャラの絵があることを有意義に使いたい。
  • 一過性のものにするのは嫌
    • なんか、一過性のものって「その後、あれどうなってるの?」とか言って検索した時に残念な気持ちになるので。

「やる」と決めたのは、C#擬人化の一次まとめ - 平々毎々(アーカイブ) ←このあたりの話題がきっかけなわけですけども。これを見てていろいろとイメージ固まったんですね。ガチで、継続的にやれるイメージ。

  • なんかいろいろ裏設定思いついちゃった
    • 無駄に裏設定練りこむ → 半端はやらない
    • 漫画にしよう → 数本分、ネタ起こし → 絵を活かせる & 継続的にやれそう
      • 今主にやってるような、「あるある」ネタな感じのコメディ
      • 可能であれば、オーム社の「マンガでわかる」シリーズ的な感じで「マンガでわかる C#」やりたい
      • あと、裏設定で魔法少女設定とか無駄に作ったんで、やろうと思えばジャンプ漫画的なことできる(プログラミング関係ない、完全にネタ的なスピンアウト)
  • これ単体で独立したコンテンツにもできそう
    • 不自然な場所で露出する必要ない
      • http://ufcpp.net/ の各所にキャラが出てくるとかいううざいことする必要ない
    • ほんとはブログも分けたいくらいだったけど、管理手間大変だから断念
      • せめてもと、タグはちゃんと設定
  • ちょうど絵の描ける知り合いがいたので、練った設定持って行って描いてもらうことに
    • ただ働きさせ続けるといつかくじけるだろうから、ちゃんとギャラ払ってやってもらう

とはいえ、最近、月1更新程度になってるのが惜しいところ…

やっぱ自分1人じゃ限界があるんで、いろいろと他の人巻き込みたいんですけどもね。まあ、実際、数名巻き込んでますけども。「みんな、C# たん描いて Pixiv ででも共有して!」とかやってるのもその一環。

ぶっちゃけ、商用利用含めて自由に使ってほしかったり。ライセンスがらみの条項、練らなきゃなぁ。C# の普及に一躍買ってくれるなら商用利用可!とか(線引き面倒だし public domain でいいかもしれない)。夜の方面にもうるさく言わないよ!自分じゃやらないけど、2次創作で色々やっていただいても。目指すはさのすけ(実は、C++ たんの部屋さのすけいたりする。)。

論理的であれ、理性的でなく

たまに、論理的(筋道だてた説明を欲しがる/したがる)と理性的(本能や感情に流されない)が混同されがちな気がする。

論理的ってのは感情押し殺せって意味じゃなくて、感情すらも、その原因は何で、ならどうすればどう変わるか考えるってことよ。

食欲

というのも、円満レトルト生活 - ++C++; // 管理人の日記なんてものをこないだ書いたわけですが、これに対して、「生物としての本能持ってるの?」などと聞かれる機会があり。

自分としては、おいしいとつい食べ過ぎるとか言ってる人よりも、栄養素の効率的な接種手段を求める自分の方がよっぽどピュアに本能に忠実な気でいるんですけども。

栄養の不足に対しても、食いすぎに対しても生命的な危機感を感じるというか。栄養足りてないと食欲がわいて、太り気味だと食欲控えめ。自分の好きなタイミングで、好きなものを、好きな分量だけ食う。本能的な行動だと思うんですけどねぇ。

群れを作る動物の本能

で、人の本能として、「楽したい」という気持ちと「人の役に立ちたい」という気持ちがあって、この2つは否定しちゃいけないことなんじゃないかと思います。その帰結として、以下のようなことはやっちゃダメ。

  • × 何の役に立つかわからないことに注力させる
  • × やることやった上での休憩を許さない

ぶっちゃけていうと、楽して儲けてる人すら否定しちゃだめ。儲かってるということは需要があるわけで、需要の先には何か役に立つものがあるはずで。むしろ、「楽したい」と「人の役に立ちたい」が両立している理想的なケースととらえるべき。(もちろん、現実的には、それが楽に儲かると周りも気づくことで参入者が増えて、すぐに楽な商売じゃなくなりますけども。)

「働かざる者食うべからず」という言葉も、きっと、「楽するな」と解釈しちゃダメで、「人の役に立て、人を楽にさせろ」と解釈すべき。もしこれを「楽するな」と解釈するなら、たどり着く先は「仕事してるふり」でしかないと思う。理想形は「自分も含めて、みんなが楽できるようにする」。

聖人君子

他に普段からよく言ってるのでいうと、「聖人君子なんていない」とか「morale(士気)なくして moral(道徳)なし」とかいうセリフ。どっちも、「まず自分の身の安定なくして他人のことなんて気は回らない」「余裕をなくした人に道徳は期待できない」とかそんな意味合いで使います。

人に理性的であることを求める人は聖人君子を求めますけど、まあ、無理な話ですから。

感情や本能にあらがうのは並大抵の労力じゃ無理で、非効率にもほどが。効率を求めるなら、本能ときっちり向き合って、それを論理的に扱うべきかと。

“s”

最近、twitter

自然言語に見られる理不尽な仕様、歴史をたどっていけばたいてい納得のいく理由は出て来る。けど、それは歴史あるから守ろうってものじゃなくて、たいていの場合負の遺産をしょっちゃってる状態。異文化交流進むほど消失する。

などとつぶやいていたわけですが。

英語が、他の印欧系言語比べてずいぶんシンプルになってるのも異文化交流の結果ですし、さらに言うと、まだ簡素化の余地あり。実際、英語ベースのピジン(他の言語と混ざってできた方言)だと、今の英語より簡素化されてたりします。

複数形

欧印系言語は、本来、格変化する代わりに語順が自由。英語は複雑な語尾変化をなくす代わりに語順の自由捨てたという言語です。

で、その複雑な語尾変化をなくす過程で複数形と三単元だけ残っちゃったと。残念なことに。

印欧系言語にとっては、「数を与える」ってのが大事なことだったりします。数を持たないと単語が具体化しないという。例えば:

  • dog: 漠然と、犬という種
  • a dog: 現実にいる「とある犬」

という区別。

昔は格変化があったので、原型が抽象、主格とか目的格にしたら具体化って区別できたはず。

  • dogで抽象的に犬という種
  • dogoで「とある犬」
  • dogosで「とある犬たち」

で、英語の、格変化の消失の過程で、この語尾の o が消えたと。その代り、数の概念は必要なので、冠詞か数詞をあためにつけなきゃいけない。

ただ、語尾変化なくす代わりに冠詞・数詞って発想まではいいけど、複数形だけ語尾変化を残したのがいただけない。複数形冠詞でよかったはず。

実際、ピジン語では these に相当する冠詞付けて複数形表すもの多いらしいです。英語の場合は some とかでもいいかも。冠詞らしく、sa とか som とか、妙に縮めてもいいだろうし。

  • dogで抽象的に犬という種
  • a dogで「とある犬」
  • some dogで「とある犬たち」

格変化が消失してるはずの言語としては、こっちの方が自然な感じが。

ちょっと余談: 原形=?

ちなみに、印欧系の場合、格変化前の原形は不定詞(英語でいうと「to + 動詞」的なの)に使われるせいか、原形のまま = 動詞的な印象があるみたいで。

日本語は逆ですね。たとえば、「走」という文字、「走る」というように「る」をつければ動詞、「走り」にすれば名詞的に使えるわけですが、「走」単体を見ると、どっちかというと「走り」の方の印象受ける。

というので、英語の場合だと、ほんとは、dog を原形のまま使うと、「犬のように何かする」(おそらくは、例えば、「従順になる/従順に言うこと聞く」みたいな)になるのかな。「犬という種」だと、dogoid とか、そういう語尾つけて。

you

英語の単複で変なのは、you もそうですね。I⇔we、he⇔they とかあるのに、you だけ複数形がない。

実際のところ、ないのは単数形の方なんですけども。というのは、古英語だと、

  • 2人称単数: thou thy thee
  • 2人称複数: ye your you

という区別があったので。thou 消失のからくりは、たぶん、フランス語の影響。フランス語だと、

  • 2人称単数 = 特定の個人をきっちりさして「あなた」 → 親しい人相手に「お前」
  • 2人称複数 = 漠然と大多数を指して「あなた」 → よそよそしく「あなた」

という感じで、単数形の tu は親しい人用、複数形の vous は敬語、みたいになっています。

英語も一時期、こんな用法になっちゃった上で、「結局めんどくさいから丁寧語の方で統一しようよ」みたいになって、単数形が消失。you だけが残ったという。

三単現

同じ理屈で変なのが三単現の s。これももともとは、1人称、2人称、3人称がそれぞれ別の語尾に変化してました。例えば、have だと、haf が語幹で、

  • I have
  • you hafst
  • he hafth

みたいな。(適当。というか、その当時は I とか have の形がそもそも違ったはず。)

それがなぜか、3人称単数現在形でのみ、それも、複数形の s と同じルールでの語尾変化が残ったという。

残った理由は、命令形かなぁと思われます。変なたとえですけど、

  • Mike! go home!(マイク、お前もう帰れよ!)
  • Mike goes home.(マイクは家に帰る)

って書けちゃうんですよね。三単現の s 取ったらこの区別がつかず。これも、昔だったら、命令形語尾があったから特に問題にならないんですけど、なぜか今の文法だと原形をそのまま使っちゃうので。

疑問形も、今の英語は「助動詞を倒置」とかいう意味わからない文法ですけど、普通の印欧系言語は動詞を倒置するはずで、動詞が頭にきます。今の do you have... みたいなのは hafst you... 的になるはず。活用なくなった今となっては命令形との混乱がありえそうな。

疑問形や命令形は、ピジン語で多いのは文末に感嘆詞をつけるってのですかね。日本語とか中国語がそうですけど、明示的な疑問形ってのを持たず、アクセントの付け方だけで疑問を表現。ただ、明示的に疑問を示した胃場合には語尾に「か」とか「ma」をつけたり。というのがあるので、中国語混じりのピジン語だとほんとに、平文+ma で疑問文を作ったり。命令文も、2人称現在形そのまま使うか、命令を明示したい場合は「平文+ba」とか。

円満レトルト生活

レトルト製品伸び盛り

今、まあ、レトルト食品の通販市場は伸び盛りだそうです。

ネット通販が始まってから、もうかれこれ10年くらいは経ってるわけですね。となると、客層がどうなっているかというと…

昔、一人暮らしの女の子とかがお茶や水を買ってたわけですね、結構。そういう世代が今、子持ちになってるわけです。ネット通販で飲食物買うのに抵抗ない世代が子持ち。その結果どういうことになってるかというと、主婦向け・家族向けの商品がネット通販で売れだす。飲食物に関していうと、それがレトルトなわけです。

極端なケースだと、「同じ食卓に家族全員そろってるけども、食べてるものは全員違う」とか「一般家庭に、コンビニのアイス売り場みたいなフリーザーがある」とか言う状況。こういうのも、今後はどんどん一般化して行く可能性あり。おそらくは、遅かれ早かれなるでしょう。

まあ、食事全部がレトルトにはならないにしても、食材をレトルトで買うとかもあります。例えば、ネギ。1回の食事で使いきれないから冷凍して保存しておくとかやるじゃないですか。ところが、一般家庭でそれをやろうとすると、刻んだネギがくっついちゃって次から使いにくいとかに。ところが、外食チェーンとかで使ってる業務用の冷凍ネギなら、きれいに加工してあるからくっついていないと。

こういう状況なので、今現在スーパーで売ってるようなレトルト食品じゃなく、もういっそのこと、外食チェーンの使ってる業務用製品がネット通販で一般家庭に売れちゃう時代になってきてるとか。

手作りの方が不健康疑惑

そういう背景の中、ふと思って twitter でつぶやいたネタ↓

レトルト食品のパックのバーコード読み取って摂取した栄養記録していくアプリとか作ったらレトルト食品の市場伸びないかな。外食もレシートに QR コードでもつけてケータイカメラで読み取り&ウェブサービスで。

ピッてやるだけで毎日の摂取栄養量が全部記録される!

「おいしくてつい太る」、「子供向けの量が分からなくて子供が肥満化」などという事態も回避できます。

バランス偏ってたら、それを補うような食品を推薦してくる機能まであれば完璧!

もちろん、その推薦品は1クリックで購入可能!

今日は自分で作る?ダメだよ、1タッチで摂取栄養量記録されないじゃない!

食育とかやってる人らも、「お母さん頑張れ」とか言うんじゃなくて、ツールに頼るアイディア考えないと。女性の社会進出進んだ状況下で「お母さん頑張れ」は選択肢として厳しいだろうと。

工場生産、マニュアル接客最高

まあ、今日に限らず、普段からずっと思い描いてたりはするわけです、この手の「新生活」。

昔にも、規模効果のある生活なんて話書いたことありますし。「関東平野みたいな人口密集地帯で自炊はしちゃダメ!」

もう1個、いつも公言してるセリフは「工場生産、マニュアル接客最高!」ですし。

あと、こないだ、野菜ラボ付きサブウェイで飯食った後、野菜工場見学に行くとかいう観光にまいりまして。「材料も工場生産!」

というのも、IT 系開発者な人にはわかってもらえると思いますけど、プログラムで機械的にできる作業を手作業でやって残業してる人とか見るとイラッと来るじゃないですか。僕にとって、食品ってもう機械的に作るものなんですよね。なので、そこに手作業で手間暇かけてるのを見るとイラッとするという。