キャリア20年超。ずっとプログラマで生き延びている女のコラム。

言語擬人化妄想

»

 わたしは、いまの会社に入ってからはVisual Basic(以下、VBと略)とTransact-SQLをメインに仕事をしているんですけど、最近、久しぶりにC++を使うことになりまして。「ようやく本妻さんのとこに戻れるぞ~」と思って喜んだんですが、いざ向き合ってみるとC++がすっかりツン化していました(爆)。

 以前はツンデレ程度だったのに、ちょっとよそ見している間に、ツンツンツンデレくらいな感じです。どうやらVBと付き合いすぎて、VB脳なままでコードを書いたらご機嫌を損ねてしまったようです。「ごめん。君と向き合ってるときは、君のことだけ考えるから」とか妙な言い訳をしつつ、3日ほど頑張ったらなんとか以前の感じに戻りました。関係が修復できてうれしかったです(笑)。

 世の中、擬人化が流行しているらしいです。国とかならまだイメージがわくのですが、鉄道擬人化とかなると、もう何がなんだかさっぱり分かりません。調べてみたらプログラミング言語擬人化などというジャンルもあって、「そりゃすごい」と他人事なテンションでいたわけですが、ふと気付くと「C++はオレの嫁」的なことを言っている自分がいたりしました(泣)。

 わたしは仕事で頼まれたらどんなプログラミング言語でも覚えるつもりですし、どんな言語でも要求されるレベルで使いこなせるようにならないといけないと思っていますが、言語の好き嫌いというものはどうしても発生してしまいます。

 それは、「この言語の方がこの処理をシンプルに記述できる」とかいったテクニカルなものではなく、「なんかうまく入ってこないなあ」とか「こういう感じは好きだなあ」といった漠然としたものです。単純に文法的な問題ならば、慣れればいいだけの話ですからね。

 わたしがメインで使ってきた言語はFORTRAN→C→C++→Java→Python→VB&SQLと変遷してきましたが、実を言うとJavaが一番、苦手です。トータルすると3年分くらい業務で使っていて、ちゃんと扱えていた自信はあるんですけど、なんだかコーディングの際に微妙な違和感があるんです。

 一番しっくりくる言葉でいうと「萌えない」。

 このJavaに対する「萌えない」感はなんなんだろうなあ、とずっと思っていたんですが、「JavaはC++の欠点を克服しようと設計された言語らしいから、先にC++をある程度使いこなしちゃってた人にとっては、行儀がよすぎると感じるんじゃないんですか?」と言われて、なんとなく納得してしまいました。なるほど、「欠点」込みで好きになってたものだから、それがなくなったことに違和感があるということなのかもしれません。

 では、扱いづらいと評判のC++をわたしはなんでこんなに好きなんだろう、ということが今度は気になり、またもや考え込んでしまうわけですが(苦笑)。

 プログラミング言語は、すべて人が作ったものです。もちろん、普通の言語だって人が作ったものには違いありませんが、プログラミング言語にはあいまいにできた部分など1つもなくて、デザイナーが選び抜いたものだけで作りあげられています。ですから、その言語仕様にはその人(or人たち)の「好き」とか「嫌い」とか「信念」とか「理想」とかいったものが、ぎゅうぎゅうに詰め込まれているんでしょう(まあ、政治的な思惑とかも入ってるのかもしれませんが)。

 ですから、それをデザインした人の「意志」みたいなものが、なんとなくはまったり、なんとなくはまらなかったり、といったところから好き嫌いが生じるのかもしれません。

 「擬人化」とかいう以前に、プログラミング言語は最初っから、それをデザインした人そのものなのかもしれない。

 そんなことを考えていたら、プログラミングとはその言語を作ったプログラマとの「問答」とも言えるのかもしれない、とかいったことを思いついてしまって、なんだか楽しくなってしまった次第です。いや、どこが楽しいんだ、と言われたら困っちゃうんですけど(苦笑)。

 小説家の京極夏彦先生は「面白くない本はない。自分にその本の面白さが分からなかっただけ」といったことをおっしゃっています。その考えでいけば、すべてのプログラミング言語はどれも面白くて、ただそれを理解する能力が自分に欠けているだけなのかもしれません。

 実際、C++だって最初は ちっとも面白くなかったですからね。Javaももうちょっと踏み込めば、もしくは、踏み込む角度を変えてみれば、面白くなるのかもしれません。その面白さが分かる日がくるのかなあ。くるといいなあ。

Comment(14)

コメント

インドリ

こんにちは。ひでみさん。
C++萌えますよね♪
特にテンプレートが面白い!
標準ライブラリと標準テンプレートのソースコードを読んだら、テンプレートが乱舞していておもしろすぎます。
テンプレートメタプログラミングも最高ですし。
その他は、やっぱりその危なさが魅力的ですよね。
オブジェクトのスライスとか、その危うさがかわいい。
コンパイラ的にも非常に興味深いです。
それにC++は、システムソフトから大規模システムまで作れる頼れる子です。

Javaの魅力は、文法ではなく、実行環境とライブラリにあると思います。
言語仕様的に無難すぎて、ちょっとスリルがありません。
正直言って、文法的にはあんまりおもしろくない。
だけど、ライブラリと仮想マシンは面白いです。
リフレクションはセクシーですし、並行処理に関する機能も充実しています。
仮想マシンの仕様も色々面白ポイントがあります。
例えば、バイトコードをコンパクトにしすぎて、他言語に対応し辛いとかかわいいです。
ライブラリや仮想マシンの仕様を調べると、萌えポイントが見つかると思います。

士郎

こんばんわ。

C++とJavaはどちらも面白さがあると思います。
C++は自分が思っていることはインドリさんと殆ど同じです。
C++で熱いのはやはりテンプレート。そして、Boost!
STLやBoostなんてテンプレートの嵐なのでソース見ていて面白いです。
そして、速いけど危ない。油断するとすぐSIGSEGV受信してcoreファイルが
できていたりします。

Javaは豊富なフレームワークや開発環境でしょうか・・。
あまりにもたくさんありすぎて理解していくのが大変ですが、
フレームワークやライブラリを利用することでかなりソフトウェア開発が
楽になりますね。

結局は自分はC++が好きで今もLinuxでC++でソフト書いています。

CMP

おはようございます(汗)。

私もJavaはあまり好きではありませんね。
理由は簡単なんだけど、「確保したメモリ領域を意図して解放できないから」。
C/C++やってる人間としては、メモリ管理は重要でしょ?でもJavaって「そんなの関係ねぇ~!(古)」じゃないですか。そこが違和感ありすぎなんですよ。
そこさえ気にしなければ、VB並みに生産効率のいい言語だなぁと思ってます。

だけど、VBまたはJavaしかプログラミングできませんって奴はプログラマとして認めませんけどね(:p)

> CMP さん

まだ GC でハマったことがないのかな? と思います.
Java には GC があるとは言え, その動きを把握しないとメモリは溢れますよ. 結局, Java のメモリと参照を理解しないと Java は使いこなせませんね.「GC 意味ないじゃん」と言われればその通りですが :P

ひでみ

こんばんわです。ひでみです。


インドリさん。

なるほど、Javaは言語仕様だけをみていてはそのおもしろさがわからないんですね。
う~ん。やっぱり、まだまだ踏み込みがあまいようです。

C++は危うさがかわいい、というのはよくわかります。昔はよくキレさせちゃってcore吐かれて、「おかしなもの食べさせてごめんなさい」とか謝ったりしてました(←私が危ない人なだけかも(爆))。


士郎さん。

Javaを使いだした時、一番、困惑したのはライブラリの豊富さでした。
似たようなライブラリがたくさんあって、どれをどの時に使えばいいのか大混乱でした。
調べても本によって違うこと書いてたりしますし(苦笑)。
もっとも、私が使っていた時期から、Javaのヴァージョンもあがっているので、今、勉強をしなおせば、また違う印象が得られるのかもしれません。
Androidアプリにちょっと興味がでてきたので、これを契機にJavaとのおつきあいを再開してみようかな、とか思っています。


CMPさん。とっても早起きでいらっしゃるんですね(笑)。

私も、Javaがあんまり好きになれないのはメモリ管理の問題なのかな? と思ってたんですが、Visual Basicはかなりお気に入りなので、どうやらそれが原因ではないらしい、と考え直しました。
そういえば、なんでVBはかわいいと思えるんだろう……(←新たなる謎)。

インドリ

>そういえば、なんでVBはかわいいと思えるんだろう……(←新たなる謎)。

ちなみに私はVB出身です。
今でも結構好きです。
私が好きな理由は・・・
おせっかいで、ほんわかしているところかな?
継続文字「 _ 」が必要な場面も減り、ちょっとおせっかいさが減ったけど、まだまだかわいい。
言語仕様的にみると、Sub(手続き)とFunction(関数)が同居しているのが案外特徴的。
Javaなんかメソッドしかないし、C++も手続きはない。
voidで間に合わしているけども、言語仕様的視点からみると、手続きとは理論的に違う。
そういった意外な側面を持つからVBも侮れない。
そこがまた魅力なのかも。
話しは変わりますが、ひでみさんはF#に手を出さないのですか?
F#はマッチマッチしていて楽しいですよー♪
プログラミング好きの心をくすぐると思います。
私は多数のプログラム言語に手を出す浮気者です(笑)

じょりちょこ

おいらはC -> C++ -> Perl -> Ruby -> Java -> PHP -> VBA -> Ruby -> JavaScript、Javaあたりが仕事でメインに使っている言語で、趣味ではBASIC、アセンブラ、Hypertalk、Scheme、Python、Smalltalk、Objective C、Eiffel、sml/nj、Objective Caml、Erlang、Haskell、Common Lisp、Clojureなどを触ってきました。

お気に入りはPerl、Ruby、Scheme、Common Lisp、Erlang、JavaScriptといずれも動的な言語です。

Javaはもっとも仕事で使っている言語だと思いますが、あまり好きではありません。

Javaの魅力を探せば、実行環境・クラスライブラリ・開発環境ということになると思うのですが、根っこの部分で何かが間違っているという印象があります。

Javaの世界のオープンソースのクラスライブラリは、他の言語のものと比べて、質・量ともに優れていると思います。それは、たとえばPHPのクラスライブラリと比較してみれば一目瞭然です。現状、エンタープライズ向けにWebアプリケーションをまじめに実装しようと思うと、Javaがファーストチョイスになるのは間違いないでしょう。

しかし、それでもJavaでコーディングしていると、何かが間違っているという感触がぬぐえません。おそらく、それは以下の理由によります。

1. コード量が多い。特に、コンパイラを助けるための記述が多い。sml/njやHaskellのように型推論があれば...と感じるし、検査例外の記述もやりすぎだと感じる。良く言えば、人間の意図とコンパイラの理解をダブルチェックしていると言えるだろうが...

2. リフレクションが使いにくい。メソッド名が単なるシンボルであるような言語と比較すると、リフレクションの使いにくさは歴然としている。

3. クロージャが利用できない。簡潔な構文でクロージャが利用できないので、クロージャが利用できればエレガントに抽象化できるようなアイデアが、無骨で鈍重な具象的コードになってしまう。コードの再利用が進まず、似たようなパターンのコードがあちこちに出現する羽目になる。

4. 多値を返せない。結果として、多値を表現するクラスを無数に作る羽目になる。せめてタプルが使えれば...と思うことは多い。

おそらく、Javaは、当時のプログラマーの大多数が理解できるレベルはせいぜいこの程度だろう、という認識がベースになっているのですね。当時はOOPが普及していませんでしたから、CからOOPへ飛躍させるだけで精一杯だと考えたに違いありません。

おいらの不満は、主として、動的言語や関数型言語の経験に依拠しています。動的言語や関数型言語を経験してからJavaを眺めると、必要不可欠な機能がずいぶん足りない。それで何かが間違っていると感じるのでしょうね。

CMP

>cocoatomoさんへ
過去に、GCしても解放されない場合があったので。まあ、ある意味GCでハマってしまったわけですが(汗)。

>ひでみさんへ
VBのコーディングに慣れてしまうと、他の言語の手続きが煩わしくなってしまい、結果的に他の言語でのコーディングが”へた”になってしまうというのが・・・。
それで私の周りでは「VBはCプログラマキラーだ」って言われてました。

VBって愛情を持って接すれば、バグバグなコーディングでも正しく動いちゃうことがあるじゃないですか、そういうところは大好きです(ぇ?)

何故こんなにJava人気無いんだココ。
私は好きだけどなあJava。特にあのプログラマを信用してなさ加減が良い。クールすぎる。
あと他人のソースを読まなければならない事態になった時にC++は超地雷なことがあるのでちょっとびくびくする。
もっとも仕事で「言語を選べる」状態になることはまず無いのでだいたいは「今使っている言語」が一番好きになるような気がする。というか使っている言語の哲学に染まってしまうという感じか。

ひでみ

こんばんわです。ひでみです。


インドリさん。

> 話しは変わりますが、ひでみさんはF#に手を出さないのですか?
> F#はマッチマッチしていて楽しいですよー♪

F#はまだ手をだしてません。私は基本的に仕事で頼まれた言語にしか手を出さないんですよ。
でも、関数型言語には心惹かれるものがありますねえ。


じょりちょこさん。

> 4. 多値を返せない。結果として、多値を表現するクラスを無数に作る羽目になる。
> せめてタプルが使えれば...と思うことは多い。

そういえば「多値を返せない」というのは、Javaをやりはじめて、真っ先に困惑したことでしたね。
おもわず「それでどうやってプログラムつくるの?」と大まじめにきいて、Javaチームにいた人(Javaしかやってない人だった)のひんしゅくを買った記憶が(苦笑)。
それまであたりまえにあったものが使えないというのが衝撃的で反射的に言っちゃったんですけど、Javaからはいった人からみれば、なんでそれくらいのことでプログラムがつくれないとか思うんだ、ってことだったんでしょうね。


CMPさん。

> VBのコーディングに慣れてしまうと、他の言語の手続きが煩わしくなってしまい、
> 結果的に他の言語でのコーディングが”へた”になってしまうというのが・・・。

わかります……それでC++に嫌われたような気が……(苦笑)。


たけぽんさん。

> 何故こんなにJava人気無いんだココ。

もしかしたら私の読者さんの傾向が偏っているのかもしれません(汗)。

> もっとも仕事で「言語を選べる」状態になることはまず無いのでだいたいは
> 「今使っている言語」が一番好きになるような気がする。
> というか使っている言語の哲学に染まってしまうという感じか。

仕事でプログラミングをやっている以上は、今のパートナー(?)を理解し、利用しつくせるように努力するのが、プログラマとしての義務だと思いますし、せっかくおつきあいするのなら好きになりたいと思うので、萌えポイントを探してみるんですが、だいたい探してもみつかりません。
つきあっているうちになんとなく「ああ、そういうことなのね」と納得して、少しづつ自分の中に入ってくる感じです。
ので「染まる」という表現はわかりやすいです。今度からは「まだ染まれない」という言い方にしてみようかと思います。

仲澤@失業者

自分も、まぁ偏ってますね。偏屈老人です(笑)。
んで、やっぱJavaは嫌い。じょりちょこさんの発言に激しく
「だよね~」を連発してました(笑)。

自分の意見を追加すると、Javaには
「平民はあほうだからこれでも使っていなさい」的な
香りを感じてドン引きしましたね。最初は。いずれにしても

「工夫の余地の少ない言語は使う気がしない」

という鉄火肌なのかもしれません。
もちろん、ちゃぁんとアプリを作ってますが(C++で)、
アプリの開発よりも、むしろ細かいデザインパターンの発見と
コード化に「むぅぉ萌ぇぇっ」かもしれません(大笑)。

K.O

面白いネタなので、自分も擬人化してみました。


VB
 可愛いのでつい、
 なんであの子(C#)は出来るのに、
 ・あんたは、そんなに駄目なの!
 ・あんたは、そんな方法でしかできないの!
 ・あいつ(C#)を見習いなさい!
 って思えるとこが良い。S心を刺激してくれる。
 キーボードが壊れる事もある…

DELPHI
 気難しやさん…
 
C/C++
 やたら手先が器用な、口やかましいおじいちゃん…
 最初はむかつきまくるが、長く付き合うと味が出てくる。
 でもやっぱり、基本的に付き合いたくない。メンドクサイんだもの…

その他中括弧系
 生理的に嫌いなタイプっているでしょぅ…
 仕方なくお付き合いしてるだけ(W)

括弧(記号)系
 アスキーアートにしか見えない…

COBOL,FORTRAN
 お蝶夫人

アセンブル系(or マシン後)
 男を感じる!いいぜ!やるぜ! 
 男は拳で語るんだぜ!
 この小さな一歩が大事なんだぜ!
 おれの打った、この釘が支えているんだぜ!
 そんな人の集まりです。

Perl
 できる八方美人!
 若干むかつく…

その他、
 ちょっと立ち話しただけなので、人柄までは…


男を感じる言語が一番楽しいなぁ(w)

ひでみ

こんばんわです。ひでみです。


仲澤@失業者さん。

> Javaには「平民はあほうだからこれでも使っていなさい」的な香りを感じてドン引きしましたね。

こういう感じは自覚してなかったんですけど、言われてみればそうなのかなあ、という気がします。
「あれは危ないから」「これも危ないから」と取り上げられちゃった感じというか。


K.Oさん。

C++は気難しいおじいちゃんですか。それでいうと私は老け専に(爆)。
ていうか、FORTRANがお蝶夫人て……私の最初の人(?)なのにっ。いや、師匠という意味ではお蝶夫人で正しいのか?(←まじめに考えてどうする)

凛桜

私はまだ、言語に萌える・萌えないの段階にないですね。
お話にさっぱりついていけません。
でも、こういう話ができるくらいに言語に愛着を持ちたいなと思いました。

コメントを投稿する