2013年11月7日木曜日

言語の性質

もうプログラムのことしか考えられない
病気の領域

模写


pythonが人気がないのは、perlやrubyに比べ、堅苦しさが抜けないところだと思います。
rubyとか特に、3+4だっぺ とか、3+4だべ 3+4やん 3+4でおま。というような記述でプログラミングが成立するが、その分厳密ではなくなってしまう。まぁ、見つかりにくいバグも出てくるようになっちゃうわけだけど。
javaとかC言語。特にjavaはほんとに厳しいと思う。”陛下こちらが3+4でございます”のような、敬語を常に話さなければ、コンピューターに伝わらない。コンピュータを敬わなければならない言語なんですね。
だけど、そうとう精密だし、バグが出まくる反面、ひとつひとつの言葉が厳密に定義されているので、プログラムさえちゃんと書いていれば、ほとんど思い通りの反応をしてくれる言語ですね。
また、完成したプログラムを読み返すときに、動いている以上はちゃんと、書かれているという特徴もありますね。

でも、書くのが面倒なのは面倒なので、perlやrubyが、ハッカーに愛されるって理由も分かるんですけどね。pythonはなかなか愛されてません。
perlやrubyと同列に語られることもあるが、pythonはそこまでフランクではないようですね。丁寧でも、フランクでもない、中途半端な言語なので、好かれないのでしょう。
だけど僕自身が最も好きな言語であるpythonを、どうしても否定し切れません。どうしてpythonが好きだって説明することが出来るかな……。


小飼弾がpythonをこのように評価している記事がありました。pythonは傲慢であると。彼はperlの開発に携わったプログラマーですが、この評価ですごく納得したことがあるんですね。pythonの言語で非常に傲慢である部分が、perlやrubyからみるとわずらわしいというのでしょう。

小飼氏の言葉を借りて僕にいわせれば、C言語・javaは言語に敬いの念を、perlやrubyは友達との会話であり、pythonは自分に酔った言葉を書くことになります。
つまり、pythonの言語とは。3+4であるぞよ。2*5をつかわす。のように、バカ丁寧ではないのだが、言語を飾る言葉が必要であるわけですね。

そのおかげで、正しいプログラムであれば、誰が書いても、読みやすく、美しいコードが現れるのが、pythonというわけです。
僕は中二病ではないが、自分のプログラムに酔えるこのpythonが好きですし、プログラムの入門にもっとも適しているし、超上級者になっても扱うべきプログラムであると思います。スーパーハッカーになってもpythonがいいと思います。

javaの習得は自分が想像する以上に大変でした。言葉のわずらわしさも原因ですが、そのわずらわしい言葉のひとつひとつにも意味があるからです。
そして、意味は明確なのだろうけど、冗長なコードが、読みやすいとも思えないからです。



悪い癖なんだけど、プログラムしたい病が出てきましたね。
絵も描きたいんだけど。
何もかもやりたいっ。
でもなかなか一辺に出来ないのが辛いですね。

プログラムはすぐに飽きると信じて、ちょっと燃え尽きるまでやろうかなと考えてます。
だから絵は1日2時間まで・・多くても3時間までにして、プログラム中心の生活に変えよう。
筋トレはサーキット1本か2本と、ストレッチ。ランニングは週二回ぐらいに。
睡眠時間は3時間ぐらいにしよ。

プログラムもただ組むんじゃなくって根本的なところがどうしても知りたくなってしまった。スーパーハッカーにはなりたくないが(すぐ手に入れられる力ならそりゃ欲しいが)根底の知識だけは欲しい。


プログラムはどんどん深い階層に入っていく。

{
{
{
}
}
}

たとえばこういう知識が欲しい。
というのは、自論だが、根本的に理解できていることのみが発想に繋がるから。

16進数


C言語のハローワールドを学んだ時に思ったことがあるんだけど。
単純に"hello world"と文字を表示させるだけのプログラムに、不可解なところがたくさんでてくる。
全部説明すればいいのにと思う。後々躓いたときに、躓いた原因と共に教えられるのがつらいと思うんだけど。

printf("hello world")   だけを切り取って、printfは次の()内の文字を出力する意味とのこと。

fの意味についてさえ触れない。
そして、応用不可能な例題だということ。

つまり、この文章をみて、生徒は写すだけで、何も思わない。
というか。今は何も考えるなというんですね。

これは学校ならまだしも、インターネット上でさえ、もっとも適切な教え方だと信じられている。
生徒が30人もいれば、全員が同じペースで進めるわけではないし、30人から飛び出す質問を遮断したいという気持ちも分かる。ただ別にテキストであれば、延々説明することは可能なはずなのに、それをしない。いや、この先生には出来ないんだろうとしか思えない。

今は考えるなという単語は、その直後に明らかになってくること意外に使ってはダメだろう……と思うんですけどね。

#include<stdio.h> //ライブラリを挿入

int main(void){}    //関数であり{}内は、その意味
   関数は参照可能。それは別の関数内からであっても……。

かなり大掴みなないようではあるが、すでに応用可能。


#include<stdio.h>

int main(void){
dasu();
return 0;
}

dasu(){
printf("hello world");
}


これでも、helloworldは現れる。

もっと紛らわしくしたいだけなら


#include<stdio.h>

int main(void){
dasu();
printf("world");
dasuyo();
return 0;
}

dasu(){
printf("hello ");
}

dasuyo(){
printf("!!");
}


このような描き方がよいというのではなく。このようにも描けるという発想が大事だと思います。
しかも、非常にプログラムらしい(アルゴリズムらしい)応用が可能です。
当然プログラムですから、応用すればアルゴリズムらしさに近づくのです。
実際に、C言語のすべりだしから、この解説をして、理解不能だという人はいないでしょう。そして、半分以上が、helloworldを自分なりに描く方法を見つけられたはずです。
その発想の目を詰んでいるというのがまずい。

根本的な理解なくしては、発想はありえないという例でもあります。
冗長であり自己満足な発想ではありますが、その発想が浮かぶということが大事だと思います。

また、応用不可能である知識の何が悪かというと、興味が持てないということ。
なぜなら、知識を得たいという欲望は、知識を応用したいからという欲望に基づいているから。
ただ知っておきたいことなんて皆無だと思う。
まぁ、そういう人がいるってのも知ってるけど。(悪い意味じゃなくてだよ)


新しい分野に取り組むときに、足かせになってしまうのが言語の問題です。
英語にもいえますが、同じ日本語であっても、聞きなれない単語ばかりがでてくるプログラミングの環境では大きなプレッシャーがかかってしまいがちです。
だけど、新しい言葉を学ぶように、どんなにたくさんの知らない言葉がでてこようが、意味をしらべていけばいいだけです。また、どうせ忘れてしまうと思ったり、覚えられないことを苦しむことはないように感じます。
たとえ、この先何度忘れようとも、その文章を読んでいる今、意味を知っていれば問題はありません。
文脈の中でその言葉はいきているからです。忘れてしまってもまた調べればいい。それを読むときに知っていればいいだけのことです。
ただ、意味が分からないまま読んでも、何の足しにもならないことはたしかですが。

そのうちに文脈から意味を思い出せるようになったり、その文字をみただけで、どのような文章の流れの中にでてきそうかということが分かります。そして、たまに間違えたままつかっていたりするでしょうが、それも特に問題はありません。
日常会話でだって、ある単語を、まったく別の意味として使っている時期があっても、差しさわりがないからです。結局その場合、人と話すときに不便があって、やがて修正されるだけですが、自分の中で明確な意味をもって生きていればよいわけです。間違えたまま熟練者になったとしても、簡単に修正できることですしね。

0 件のコメント: