Prev 2008.2 Next
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29  
 
スポンサード リンク
広告
Others
  • RSS1.0
  • RSS2.0
  • atom0.3
  • valid XHTML1.0
  • valid CSS2
  • Credit
Today: Yesterday: Total: Online:
  • BookMark
  • Category
  • Archives
  • Main
  • Search
  • Comment
  • TrackBack
  • Gallery
  • Login

カテゴリー ウェブFebruary 04, 2008

目的がある方はPHPを、ストイックな方はRubyをどうぞ。 ID:1202107445 このエントリーを含むはてなブックマーク



PHPerはどっちかというとオタク気質が少ないのか、ネット上で自分達が「いつまで経っても初心者」などとバカにされていても、気づかないか、それとも別にどうでもいいから言わせておけと思っているのか、あまり表立った反論が無い。

私もなるべく静観していようと思っていたのだが、こういうやり取りを読んで「そうか、PHPはダメなんだな。」なんて思ってしまう人が出てこないかと不安になってきた。こんなことでプログラマーの間口が狭くなってしまい、素晴らしいサービスが世の中に出てくる機会を減らすのかと思うと居てもたってもいられなくなった。

なので少し書いておきたい。

初心者向けの言語 - Matzにっき
http://www.rubyist.net/~matz/20080204.html#p01
初心者への間口を広くするために基本機能はフラットにし、オブジェクト機能などを追加して抽象化もできる言語にすればいいじゃないか、と思う人もいるかもしれない。

が、個人的にはそれはうまくいかないと思う。そのような言語では学ぶことを拒否する「自称初心者」はいつまでも抽象化機能を身につけず、質の悪いプログラムを生産し続けるだろう。

もちろん、志の高い人はそのような言語を通じて抽象化機能について学び使いこなせるようになるだろうが、それくらい志が高ければ、最初から初心者にこびない言語を使っても同じくらいか、もしかするとより短い期間で、良いプログラマに成長するだろう。

なんという乱暴な論理展開だろう。これが本当にあの緻密な計算とバランス感覚に溢れたRubyの設計者の言葉なのか?

対象が「学ぶことを拒否する自称初心者」であっては、そりゃどんな言語でもダメだろうに。

(※追記4より転記:元記事では冒頭で「自称初心者についてはここでは扱わない」としているにも関わらず、自称初心者を前提に話を進めている。「初心者」に対するこういう曖昧さが、議論をカオスにしているんじゃないだろうか?)

また、「志が高い人であれば、最初から初心者に媚びない言語を使えばいい」という話も、まるで「志の高さ」というのは選ばれた人だけが最初から持っている資質とでも言いたげである。

実際には、誰でも最初は初心者なはずだ。「志」などという曖昧な(抽象的な)ものも、それを経験していく過程で初めて芽生えていくものであって、最初から高い「志」なんてものがあるとすればそれは単なる勘違いである可能性の方が高い。

また、Matz氏の話を聞いていると、彼にとってはプログラミングというものは数千万円規模のものだけが重要で、それ以外は「趣味」として価値が低いかのような位置づけをしているように感じる。

プログラミングなんてものはとっくにコモディティ化しているというのに。

特にネットの世界ではプログラミングというのは「ちょっと腹が減ったのでカップめんでも作ろう」ぐらいの気軽さで使われるようになっている。

その点、ちょっとページ中に動的な部分を作りたい、という場合に気軽に使えるPHPが普及するのも当然だろう。

彼らのようなライトユーザーが、確実に恩恵を受けている。それまでプログラミングに縁の無かった人々が、こうしてプログラミングに触れる機会を作っている。

それは事実であり、そこで一旦話を切らねばならない。

ところがMatz氏はそこからどうしても、「初心者はいつまで経ってもライトな使い方しか理解しようとしない。だからPHPerは永遠に初心者」という方向に持っていきたいようだ。

PHPにはもちろん、オブジェクト指向機能が存在する。それは氏も認めるところだろう。
(どこかの日記で「オブジェクト指向機能が壊れている」などと書かれていたものがあったが、恐らく古い情報か誤解を元にしたものだろう。PHP5のオブジェクト指向機能は問題なく動く。)

よって、ライトユーザーがフラットな基本機能だけを使っている事で問題に突き当たったり、誰かに指摘されたりした場合の「次のステージ」がしっかりと用意されているのである。

また、PEARなどのライブラリはこうしたオブジェクト指向に沿って作られているものが多く、それらに触れる事で学ぶことも多い。

しかし氏は、一度初心者向け機能に慣れ親しんでしまうと、より抽象度の高い難しい機能は使いたくなくなる(つまり、堕落する?)というような考えを持っているようだ。

とはいうものの、初心者向け言語への要求があるのは事実である。 それを否定するつもりはない。

そのうちのいくばくかは、初心者向け言語から入門して段階的に(スムーズに)進歩できるという「誤解」によるものだろう。しかし、すでに述べたように「初心者向け」という性質は、良いソフトウェア開発に必要な性質とある程度矛盾する。

「誤解」? 本当にそうだろうか。

皆さんは、「幼児でも扱えるから」という理由で「日本語」をビジネスに使う事を避けるのだろうか?

また、世の中には幼児と同程度の言葉遣いしかできない大人の日本人が溢れていて、それは日本語のせいだ、と思っているのだろうか?

日本語は幼児でも扱える程度に基本は簡単である。と同時に高度に抽象化した複雑な意思疎通も行える言語である。

誰が、「日本語は、子供でも扱えてしまうという性質の為、誰も高度な会話をしようとしなくなる言語である」などと考えるだろうか?

そもそも、具象があっての抽象である。具象レベルでの経験がないものに抽象概念をいきなり教えて分かるのは天才だけである。

確かに、例えば英会話などで単純な構文を連発して稚拙ながらも複雑な要件を片付けてしまうような人はいるだろう。彼らの英語は非常に稚拙な為、上級者から見ると苦笑いするようなケースも多いはずだ。ビジネスの大事な場面で必要な重大な失敗をやらかす可能性もある。

では、ビジネスで英語を使おうとする人は皆、完璧な英語になるまでビジネスでそれを使うべきではないのだろうか?

語学経験があまりない人は、ここで「そうだろうな」と頷いてしまうかもしれない。

しかし、それは理想であり、現実には有り得ない。分かりやすい理由を2つ挙げると、

(1) 人は経験(特に失敗)からしか学べない。
(2) 完璧になるまで待っていたらチャンス(時間)は逃げてしまう。

この2点はそのままプログラミング言語学習にも当てはまる。

つまり、最初からいきなり高度なレベルを要求する(何度も書くが、具象レベルを体験していないものに抽象レベルは理解が難しい)のは、そもそも「入門者は帰れ」と言っているようなものなのだ。Matz氏は自分が初心者だった頃のことを忘れてしまったのだろうか? それとも氏はいきなり全てを理解して生まれてきたのだろうか?(そうかもしれない)

なんにせよ、こうした態度は良いプログラマーを育てる土壌として適切だとは思えない。

「初心者そのものを否定している訳じゃない、初心者に教えるならもっと“しっかりした”言語を教えるべきだと言っているだけだ」

そう反論する人もいるかもしれない。しかしほとんどの初心者は「しっかりした言語」を学びたいと思っている訳ではなく、他に目的があり、それを解決する為にプログラミングを学びたいだけなのだ。

プログラミングとは目的を解決する為の手段でしかない。プログラミングそのものを目的とするような人々は、もちろん私は個人的に好きだし、尊敬もするが、何のためにプログラミングを覚えたいのか、というプリミティブな欲求部分を無視して理想論を語るだけに留まらず、自分の意見に沿わない相手をまるで向上心の無い怠慢者であるかのように扱うのは、私には「老害」と映る。

長くなったのでまとめよう。

(1) プログラミングはコモディティ化しており、様々な場面で、より気軽に扱えることが求められている。特にウェブ上でそれが顕著である。
(2) 「最初から高度な話から入ればいい」はプログラミングそのものが目的の理想論であり、プログラミングが手段でしかない大半の現実世界では低いハードル(経験を積む機会)の存在の方が重要である。
(3) 低いハードルから入ったからといって、高いハードルを超えられない、なんてことはそれこそ誤解である。

私は、PHP5を使ってもっといろんな人がプログラミングの楽しさを知って貰えると嬉しいと思っている。

PHPはオブジェクト指向プログラミングも普通にできるし、MVCへの移行もフレームワークが揃っている(もちろん自前でも問題なく可能だ)。

PHPはほとんどのレンタルサーバに入っており、テキストエディタでコードを書いてアップロードすればいきなり試せる。

「すぐに試せる」これこそが、この変化の時代にもっとも重要なキーワードではないだろうか?

「正しい言語」「正しいコードの書き方」なんてものを探している間に、一つでも二つでも、「目的」を達成する奴の方が、私は好きだ。そして結果的にそいつの方が「正しさ」に早く近づくことだろう。

そしてもし、その過程で何らかの問題意識を持ち、「PHPでは自分の問題は解決できない」となった時に、Rubyの素晴らしい抽象化機能の世界の門をくぐるというのは、とても素敵なストーリーなのではないだろうか。

尚、セキュリティの話についてはこちらをどうぞ。

セキュリティ過敏症 - ぼくはまちちゃん!
http://d.hatena.ne.jp/Hamachiya2/20080131/security

【追記】
この話から、「失敗させた方がいいって言うなら、欠点だらけの言語であればあるほどいいってことか?」のように受け取る方もいるかもしれないので、先に書いておく。

このエントリは「失敗させた方がいい」という主旨ではなく、「御託よりも経験(やること)こそが重要である」という主旨である。その結果として失敗はあるだろうが、それは糧となるだろう、というだけの話だ。ここでいう経験とは、「プログラミングの経験」ではなく、プログラミングを実行することによって得られる「結果」つまり「目的達成の経験」のことである。


【追記2】
ブックマークコメントで、「にほんごのぶんしょうをぜんぶひらがなでかいたらよみにくいとかそういうはなしでは」というものがあった。ありがたい題材である。自然言語である日本語や英語を比喩として使うのは危険かとも思ったが、こういう例が出てくるとあながちおかしくもなかったのかもしれない。

このように、日本語は全部ひらがなで書いても意思疎通が可能だ。読みにくいという問題はあるが、「使える」のである。これと同様な事が、例えば同一ページ中にロジックコードもHTMLも全部書いてしまうようなPHPスクリプトに言えると思う。元コメントもそういう事例を指しているのだろう。

しかし、ひらがなから日本語へ入ったものが将来的に漢字を使い始めるのは無理なんじゃないかなどと言う理由が無いのと同様に、PHPerも、より高度な抽象化へと進めないという理由はないはずである。このエントリではそういう点を指摘している。


【追記3】
このエントリを読んで、「またアンチRubyかよ」とか思ってしまう人が居たら嫌なので、いくつか補足を。このエントリでは主に反論をメインにしている為、反論そのものが私の主張だと思われてしまいがちかもしれない。

私は、以前書いた「デザイナー向けの入門言語」についてのエントリを読んでもらっても分かる通り、Rubyは非常にこなれた良い言語だと思っている。一時期、初心者向けの入門言語として本気で検討したこともあったぐらいだ。

だから誤解しないで貰いたいのだが、私は「PHPが言語としてRubyより優れている」などとは思っていない。あまり言語に優劣を付けたくないのだが、言語としては圧倒的にRubyの方が好きだ。

問題はそれを使う際の環境である。

今、プログラミングが最も活躍できるシーンはウェブだと考えている。人がプログラミングに求めるシーンも同様だ。

そして、このエントリでも書いているように、私はプログラミングを上達させるには、まず実践することが何よりも大事だと考えている。

興味ある分野で、すぐに実践できること。これが最も重要だ。

だから、適当なレンタルサーバにHTMLをアップロードし、ちょっとスクリプトを追加するだけでいきなり実践に入れるPHPを入門者向けにお勧めしているのだ。

言語仕様よりむしろ、それを取り巻く環境が入門者向きだと考えている。

「環境のせいにするなよ、自分で環境ぐらい作れ」という意見もあるとは思うし、まさに理想的な考え方だとは思うが、初心者にそれは酷だと思う。自分で環境を作るというのは当然、目的そのものではない。

PHPの言語仕様については、むしろ「まあ、これなら必要充分でしょ」という位の認識である。PHP5のオブジェクト指向機能はむしろ学術的になりすぎで、もう少し実用向けにシンプルにしても良かったと思うぐらいだ。とはいえ、PHPの言語仕様は充分シンプルで、癖があまり無い。他言語にも移行しやすいはずだ。それは初心者にも安心してお勧めできる利点だろう。

ただもし、RubyがASPやJSP、PHPのような「Server Pages技術」を持つようになり、それが一般のレンタルサーバに普及したら、私はPHPではなく「Ruby Server Pages」を入門者向けに勧めるかもしれない。多少の言語仕様の癖の強さには目を瞑って。にもかかわらず、今回のようなMatz氏の発言を見ていると、そんな気も微妙に萎えてしまうのが残念である。

ちなみに「Ruby Server Pages」でググったら、Google Codeにまさにそんなプロジェクトを見つけてしまった。
http://code.google.com/p/ruby-server-pages/

ホントに出来たらなかなか面白そうだ。


【追記4】
さて…もうここまで読んでいる人はいないだろうが…moro氏のtwitter経由でこんなコメントをみつけた。
http://twitter.com/moro

今日のMatz日記へのTBがこの一連の論争におけるthe best of カオスな反論(反論?)だと思う。
意図を全然逆にとってるような

the best of カオスw
ちょっとウケた。

しかし、意図を逆に?
どの部分だろうか。議論で相手の意見を逆の意図で取ってしまうことはよくあるので、恐る恐る自分の記事とMatz氏の記事を見直してみたが、該当する箇所は見当たらなかった…。

カオスという意味では、Matz氏の元記事の最初で「自称初心者のような人はここでは扱わない」、としながら、PHPのようなやり方がうまくいかない理由として「自称初心者はいつまでも抽象化機能を身につけず、…」とか書いているので、カオスかもしれないが。

あと、

http://twitter.com/moro/statuses/676267522
『初心者がその先のステップを求めたときに困る|その先があることを示さない』、のに「初心者向き」で呼び込むのはどーよ。って話なのになぜか初心者を攻めてるように読んで反論してもなあ

というコメントも続けてあって、そうなのか?と思ってMatz氏の元記事を読み直してみたけど、どこにもそんなことは書かれていないような…。「初心者はその先のステップを求めない(学ぶことを拒否する)」というようなことは書いてあるようだが。

とうか、読めば読むほどMatz氏の元記事はカオスだ。

初心者というのを、「学ぶ意思がないもの」と「抽象化が苦手なもの」とでごっちゃにしている気がする。わざわざ自ら冒頭でそれらを区別しているのに…。

【追記5】
プログラミング自体はコモディティ化したけど, プログラミングの楽しさはまだそれ程ということか. rubyって楽しいと思うんだけど.

こんなブックマークコメントをもらった。
「プログラミングの楽しさ」がコモディティ化する・・・なるほど。もしそうなったら、確かに嬉しい。

これを読んで、ふと、Matz氏の「気持ち」が分かったような気がした。

おそらく、Matz氏にとって「プログラミングによって何かを実現する喜び」と、「プログラミングをする喜び」というのは、ほとんど同一のものなんだろう。

なので、何かを実現したいなら、当然そのコードは美しいものでなくてはならないし、美しいコードは当然より良く目的を果たすことができる、という感覚なのかもしれない。

現実には、やっつけ仕事だって目的を果たせるし、どんだけきれいなコードを書いても出来上がったものはツマラナイものだったりもする。

そんなことはもちろんMatz氏も分かっているとは思うのだけど、可能な限りそれらはセットであって欲しい、と願うのではないだろうか。そんな事をふと感じた。

私から言えるのは、初心者が書いた素朴なコードも、上級者が書いた緻密なコードも、それが動いた時に彼らに与える感動は同じだってことか。
— posted by chikura @ 03:44PM | LinkMe | Comment(18) | TrackBack(0)

上の記事に対するコメント(ツッコミ)です。

ツッコミをどうぞ。名前とURLはオプションです。

Comment Form
名前:   URL: 文字色: cookie?
アイコンクリックで絵文字挿入
:)
:D
8-)
;-)
:P
:o
:(
(TT)
):T
(--)
(++!)

←メールアドレスを入力しておくと新たなコメントがついた際に通知します:
        
あわせて読みたい
Recent Comments
Recent TrackBacks