抽象度は関係ないと思う

Matzの日記より。

初心者向けの言語

言語が初心者向きだとかそうでないとか、「高度」であるかどうかと「抽象度」はまるっきり関係ないはずだ。

まぁどうせこの手のネタにつっこむ人はいっぱいいるだろうから、私がつっこむ必要もないとは思うけど。

Matzの言うように、「抽象度が高い」ということと「初心者から遠い」ということに関係があるのであれば、一番初心者向けの言語は

アセンブラ

ということになってしまう。それも、下手なOSなんかの上じゃなくて、生ハードウェア上のアセンブラ。や、最近のアセンブラはいろいろ下層のレジスタとか操作出来ないから、マイクロプログラムの方がいいか。これが一番初心者向けの言語だ。

逆に、初心者向けでない方向で言うなら、たとえば「テレビを見る」という行為。これはとんでもなく抽象度が高い。スイッチを入れてチャンネルを指定するだけで、いろんな人達のいろんな行動が見える。「いろんな人達のいろんな行動」と「スイッチを入れてチャネルを指定する」という行為の間には、とても関連があるとは思えないくらい抽象的な行為だ。VEの「なんでこの線だけピークが暴れるんだよ」みたいな抽象度の低い話からは遠く離れている。んーなるほど。

なーんてことがあるわけがない。どうも最近のMatzは

自己肯定のあまり自己つっこみが不足

してるんじゃないか? この前のPHPもそうだったけど、1回自己つっこみかけさえすれば、あそこまでいろいろ言われなくても済んだろうに。そりゃプログラマの美徳の一つに「傲慢」があるのだけど、「傲慢」であることは「うっかり」を肯定しないし、「美徳としての傲慢」は「不見識による傲慢」とは違う。

抽象度が高いと初心者向けじゃないかと言えば、「テレビ」の例でも明らかだ。確かに情報処理上の抽象概念というのは、初心者にわかりにくいものは少なくない。とは言え、「アセンブラ」のように極端に抽象的なものをなくしたところで、わかりやすくなったりはしない。つーか、個々のものはストレートでわかりやすくなるんだけど、全体像まで見るのは大変だ。

COBOLやScheme(と言ってもR^3あたりで私の頭は止まってるんだが)でバイト単位の操作を行うのは、結構厄介だ。油断しているとすぐ「かたまり」として扱われてしまったり「数値」に化けたりして、二度手間どころの話じゃなくなったりする。これがCであれば、多少油断してもバイトはバイトのままだから、つまらない神経を使わないで済むし、勝手に数値に化けたりしない。「初心者」にバイト単位の操作をさせるのであれば、COBOLやSchemeのような抽象度の高い言語よりは、Cのように抽象度の低い言語の方が楽なはずだ。

ポインタでないと出来ない諸々は、手慣れた人ならCが楽だと思うだろうし、そうでなかったら「もっと抽象度の高いポインタ」を使う言語の方が楽だし間違いも少ないから、「初心者」には優しいと思う。

COBOLで書かれたシステムにJavaなプログラムを混ぜ込むのは容易じゃない。JavaがPHPだろうとRubyだろうと同じだ。まぁフレームワークがうまくやってくれれば、言語レベルでの問題は解決するだろうが、セマンティクスレベルの話になるとそうも行かない。COBOLで書かれたシステムはCOBOLでいじるのが「初心者」向きであると共に、多分たいていの人に向いている。これは別に「COBOL」に限らず、元が何であっても異質な言語を混ぜ込むのは容易じゃないってだけ。

結局のところ、「初心者」に向いているかどうかに、「抽象度」なんてのは何のモノサシにもならないってこと。bitよりbyteが、byteよりstringが、stringよりobjectが抽象度が高いけれど、高いからどうってことはない。そんなことよりも、「やりたいこと」と「ツール(言語)の特性」が一致してるかどうかの方がだいじだ。

確かに、「抽象化する」というのは難しいことが少なくない。でも、「抽象化されたもの」というのは必ずしもそうじゃない。だから、「抽象化されたもの」がわかるかどうか、扱えるかどうかと、オツムの高級さ加減とはまるで関係ない。また、物事には抽象化した方が良いものとそうでないものがある。だから、「抽象化できる」という能力と「問題解決できる」という能力との間には、あまり深い関係がない。byteレベルで済むことを無理にobjectレベルにする必要なぞない。「伝票」で用の足りる世界であれば、「伝票」に適合したデータモデルが用意出来ればそれでいいから、objectだろうとfileだろうとDBだろうと大差ない。「伝票」のない世界ならあるいはobjectの方が扱いが楽になるかも知れないが。

ついでに次のエントリ

ソフトウェア開発における初心者

もMatzがよくやってた勘違いだ。

いや、これが「プログラミングにおける」であれば、言ってることは正しいよ。でもさ、「ソフトウェア開発」とか言っちゃうと、

そりゃ違うんでねーの

と思うわけだ。だって、「ソフトウェア開発」ってのは、「プログラミング」とイコールじゃないんだよ。同じように「プログラミング能力が高い」ということと「ソフトウェア開発能力が高い」ってのは、イコールじゃないんだよ。そりゃ、世の中の大多数の「おーぷんそーすぷろぐらま」達ってのは、何から何まで自分でやっているけれど、そこそこの規模のソフトウェアだったら、設計と実装は独立してる。とか書くとすぐ「アジャイルだったら云々」ってすぐ言うんだろうけど、「アジャイル」っては

プログラマに設計力を求めている

だけであって、作業として別であることには違いはない。見た目一体化していても、イコールじゃない。それに、

では、私はこの家を素人に立ててもらいたいだろうか。現場に行ったら職人がどれもこれも、専門教育も受けていません、修行もしていません、先月までは関係ない職業でした、とかいうような人の集まりだったら。

私はイヤだ。

とか言ってるんだけど、悪いけど私は学生時代によく土方のアルバイトをしてたよ。私は電気工学科だったから家を建てるための専門教育も修行もしてないし、学生だったよ。「私はイヤだ」と言うのは勝手だけど、それじゃあ多分家は買えんぞ。

建築業界の偉いのは、そういった「学生土方アルバイト」が参加していても、「家を建てる」というプロジェクトを破綻させないシステムが出来ているということ。「建築」という技能を持たなくても、働けるということ。残念なことに現状のソフトウェア開発の現場はそうじゃないから、「学生土方アルバイト」は使えないし、それゆえそういったシステムについて思いを馳せることも出来ないんだろうけど。

だから、「自称初心者」がどーだこーだとかって問題になるのは、そういった人達を「一人前として扱ってしまう(扱わないと困ってしまう)」という状況と、扱う側の技術の問題。どれだけ偉そうな人達が「COBOLer」を責めても、たいていのプログラマは同じ撤を踏む。もうそれはしょうがないことなんだから、それを前提に物事を考えるしかない。

まぁそれゆえ私は「もういい加減言語をいじくり回しても意味なくね?」と思ったものだから、もうちょっとシステム寄りのフレームワークをいじくり回すようになった。どうせ人はそんなに進歩しないんだから、それを最大限活用しつつ、悪影響を抑える方向で考えた方がいい。どんな便利で高級で格好いい言語を作っても、それが使いものになればなる程「コボラライゼーション」しちゃうんだから、ある意味「実用言語デザイン」ってのは虚しい。まぁフレームワークもそうなりがちではあるんだけどさ。

PS.

それぞれのつっこみがgdgdだというつっこみがあったのだけど、それは意図のうち。元の批判がgdgdなんだから、それに合わせて無茶な極端な例を持って来たわけなんで。もっとまじめに見えるつっこみをするのは、他の人がやってるだろうから、ここで私がやる意味はない。一見まじめな批判に見えるMatzのつっこみを、こういったgdgdのフィルタを通してどう見えるかということを味わって戴きたいわけ。

あと、「学生土方アルバイト」はエンジニアと言うよりもツール類と同じという意見があったけど、それはコの業界の奴等がよくやる言い訳だと思う。いわく「プログラム開発は製造じゃなくて設計だ」と言いたいわけ。実際Matzもそういったことをよく言っていた。これも元の話が「家を建てる」云々の無茶を言ってるから無茶な比愈になってしまった例で、そもそもがそんな比愈自体がナンセンスだとも言える。

ただその上で、そういった「人夫」にインテリジェンスを求めざるをえない「システム開発」ってどーなのよという問題意識を持つべきで、「○○業の××はシステム開発の××に相当する」なんてのはどうでもいい。

PS.2

このエントリの「肝」の部分というのは、元のエントリがどのような種類のものであれ(つかどのような種類か説明がないのに)「抽象度」なんてものを持ち出して来てしまったということがダウトだということと、考えてもしょうがない「初心者向けな言語」なんて話題にしてるのがさも議論の対象のようであるかのように書いてしまっているという点。不毛なネタを使えないモノサシで計っているのだから、どんなにマジメくさって書いてもgdgdでしかない。だから「自己つっこみが不足」と言ってるわけだし「反論」としては明かにおかしい「アセンブラ」だの「テレビ」だのを持ち出してるわけ。そんな「反論未満のつっこみ」で破綻してしまう程度の理屈なのだと。どうせ「好み」の問題に過ぎないわけだから、そこに理屈を持ち出されてもねと。

コメントにも書いたけど、初心者が抽象的なものが苦手かどうかなんて、既に「知識に毒されてしまった人」はもうわかりようもない。下手にコンピュータのこと知らない分、初心者は抽象的に考えられるかも知れないし、そうでないかも知れない。

ぶっちゃけさー、本人が意識してるかどうかは知らないけど、客観的にはMatz語の「僕は興味がない」というのは、普通の人の「嫌い」という意味なのよ。だから、gdgdな理屈持ち出してさも公平な考察をした「ふり」なんてしないで、「嫌い」でいいと思うんだが。「あなたは好みじゃない」ってことを理路整然と説明されて幸せになる人っているかい?

抽象度は関係ないと思う” への6件のコメント

  1. Matz氏の言う抽象度っていうのは
    DQNプログラマーやDQN会社のとっつきにくさ
    という意味なのかなーと思う(笑)

    むしろ初心者ほど変なクセにそまっていないから、かえって抽象度の高いことに理解を示しやすいというのはあるように思う。

  2. > 初心者ほど変なクセにそまっていないから

    抽象化した結果なんて、「そんなもんだ」と受け入れてしまったら、「そんなもの」でしかないと思うのよね。

    てか、抽象化って元記事で言ってるほど高尚なことじゃないと思うんだよね。

  3. 一部業界ではアセンブラは初心者が始めに学ぶべき言語と言うのは現在でも真。
    一時期(今でも?)C言語でハードウェア設計とか信号処理とか言って、初心者集めまくった挙げ句、みんな高い勉強料払ってる。(大声で言うと消されるが…)
    ゆとり教育と根は(時期も)同じ。
    Matz氏にアセンブラの発想が出てこないのは、彼の「言語オタク」としての範疇にVerilog/VHDLとSystem-C、あるいは固定小数点DSP用アセンブラとMATLAB付近の比較/経験/興味が無いからなのかなとも思う。

  4. そーいやーそういった思いっきし低レベルなところをいじる言語の話はしたことなかったな。まぁ純粋ソフト屋さんにVHDLとかは厳しいってのはあると思うのだけど。

    System-CよりVHDLの方がわかりやすい気がするってのは、やっぱり抽象度が低いから(ry

  5. うちのプログラムの師匠は元アセンブラ屋だったのですが、
    C言語が一般的に普及するようになってから
    組み込み機器のプログラム品質が極端に落ちた
    とかボヤいてましたね。
    まあ品質が落ちたのは言語だけの問題じゃないと私は思うのですが。

コメントは受け付けていません。