作者: 機械伯爵
日時: 2007/9/29(14:37)
 機械す。

 こっちのスレでは、まず仮想的な入門者像を、たたき台に上げて
みたいと思います。

・中学校のクラブ活動として、プログラミングを習いたい人

・一般の方で、趣味でプログラミングをやりたい、という人


 条件としては、

1.「パソコンは使える」と普通に云える人

2.英語や数学が得意である必要は無いが、アルファベットや算数にアレルギー
 の無い人

 あたりかな、と自分では考えています。

 では、以降、レス部分です。

>   なんかすでに揚げ足取りの域に入りつつある気がしますが…。

 すいません、こちらもどうも曲解したらまずいと細かいトコに
とらわれすぎてるかもしれません。

 でも、大鉈でざっくりやると、根本が違ってると悲惨なコトに
なるので、加減は重要ですが……話してて気分が悪くなっては
つまらないので、以後気をつけます。

> >  正規表現は論外として、オブジェクトの説明もかなり後でいいかな、と思います。
> > 
> >  言語によって、オブジェクトの機能って、かなり違いますし。
> 
>   それは仕方ないんじゃないでしょうか。オブジェクトってそんなもんですし。
> オブジェクトをただの変数であるかのように説明するわけにもいかないですし。
> (今はそう思っておいてくれ、という注釈を加えるためにもオブジェクトとい
> う言葉は必要ですし。)

 少なくとも、変数/関数の特殊な書き方、として最初は説明するしか
無いでしょうね。

 ただ、ブラウザなどを教材に使うと、やたらオブジェクトが最初から
出てくるのは仕方が無いので、ごまかし方(?)も少し考えておいた
方がいいかもしれませんね。

※この点で入門者向け言語でJavaを選択するのは論外。JavaScriptならともかく、
 全てのプログラミングがクラス定義であるJavaでプログラミングが理解できる
 なら、その入門者はとんでもなく優秀だとしか思えない。

>   早めに出すべき、とまでは言いませんが、それほど避けなくてもいいかなと
> 思います。特に伝統的な変数とオブジェクトの違いを考えなくて済む(つまり
> みんなオブジェクトな)言語なら。

 PerlとかRubyとかPythonあたりならいいかな……全てオブジェクトだけど、
例えば言語としてのSmalltalkとかだと微妙ですね。

 Smalltalkerの主張のように、オブジェクト/メッセージ志向のパラダイムって
理解しやすいかどうか、は、私には正直判断しかねます。

 ……なんせばりばりの手続き……どころか、簡易アセンブル言語もどきのBASIC
から入った人間なので。

> > > # まったく異なる要素を組み合わせることの方に重きを置いて
> > > # います。
> > 
> >  ましてや、未体験の「プログラミング言語の構文」を組み合わせろったって、
> > とまどうだけだと思います。
> 
>   ワタシは「組み合わせろ」とは言っていませんよ。(この「組み合わせろ」
> には自分の力で組み合わせてみせろ、という意味を読み取っています。これが
> 間違っているかもしれません。)複数の要素を組み合わせた目標を先に提示し
> てくれた方が自分は面白いと言っているつもりです。

 いや、「その意味で」です。

 つまり「提示される例」の中に「構文の組み合わせ」が入るタイミング、と
云うのは、私はかなり考えるべきだと思うのです。

 先に例で文字解析(実際には検索)の二重ループの話をしたと思いますが、
同じ構文を重ねたアレですら、私はかなり慎重に出すべきだと思うのです。

 そもそも私は、PythonMLで「forよりwhileのほうが分かり易いのでwhile
をまず教えたら?」と云って、蜂の巣をつついた(上に、2chでさんざんバカ
にされた(苦笑))ことがありますが、それくらい「飲み込みの悪い」人間
なので(まぁ、自分の能力の低さを主張する度にみじめになるだけですが)
「それ、難しいなぁ」と感じる閾値が低いのです。

 まぁそれでも、基本構文は順次/条件分岐/反復の三構造しか無いわけです
から、組み合わせしなければすぐに手詰まりになるでしょう。

※蛇足ですが、前に出して頂いたJavaScriptの例は、二重ループなんか
 よりはもちろん、簡潔でわかりやすい例だと思います。

 私は出来るだけ、組み合わせは基本的なものにとどめて、逆に「自分で」
構造を作っていくほうが分かり易いんじゃないかと思ったりもします。

 人のコードを理解するのと、自分のコードを作るのでは、意外に人の
コードを理解する方が難しいのではないかと。

 ですから、コードサンプルは極力短く、そして最終的には自分で構造を
組み立てて行くように流れは持って行くべきじゃないかな、と思うのです。

 まぁ最初は、サンプルの変数だけを変化させたようなモノでしばらくは
実践して実感してから、になるでしょうが。

 ただ気になるのは、たとえば「イディオム」が豊富なSmalltalkとかの
イディオムのレシピを、まず理解する前に応用して使って行ってその慣れの
中で感覚をつかんで行くといった方法も、確かにあるのかもしれません。

 私自身はタイプとして組み上げ型の思考なので、この手の方法は苦手なの
ですが、広く受け入れられている方法はどちらなのでしょうね?

> >  Perlが最初から書ける人にはRubyは楽勝、と、よく聞きます。
> >  でも、RubyとPythonの行き来って、あまり聞きませんね。
> >  もしかしたら、根本的にセンスが違う集団なのかも(汗)
> 
>   両方書ける、あるいは両方やる意味があまりないのではないでしょうか。
>   両方とも better Perl の面は否めないが Perl には両者を超越するライブラ
> リや動くコードという資産がある。これが Python と Ruby になると大きな違
> いを見出しにくくなるのでわざわざ両方やらない、という印象はあります。そ
> れこそどちらかを知っているなら仕事でもない限りもう一方に手を出さないよ
> うな気がします。少なくとも自分はそういうスタンスで行くと思います。今か
> ら Python を学び直すモチベーションをひねり出すのはなかなか大変です。

 Pythonの基本文法なんて、Rubyを使える人なら10分で一通りマスターできる
と思いますけどねぇ、多分(苦笑)

 ダークゾーンまでハッキングするのは、確かに難しいですが、「ソレは趣味
だけにしとけ」とPythonクックブックですら云ってます(黒魔術だってさ)の
で、「行儀の良い」Pythoneerは、それを「密やかな楽しみ」としかせず、それ
が出来ないことで、他人を低く見ることはまず無いと思いますので。

※およそハッカーに似合わない「行儀の良い」ことが美徳になってる言語カルト
 って、PythonとPascalだけじゃないだろうか……まだあるかな?

 ちなみに、RPGツクールXpがあんなにスカでなかったら、私もRubyを勉強しな
おしていたと思いますよ、きっと☆

※定期アクティベーション付きのゲーム開発環境なんぞ使えるかっ!

 /機械伯爵/