« さて、今回は? | トップページ | VirtualBoxにUbuntu10.10 β版を入れる »

セオリー通りということ。セオリーを無視するということ。

Twitterの方で、ぼちぼちと呟いてたりするんですが。
ちと、まとめとこうかと。

昔、ラジコンをやってまして、車の方ですが。
これがまた、セッティングとか非常に細かいレベルで調整するんですが、天気、温度や湿度、そんなものまで影響していて、大枠のセッティングと美著性ってのが必ず入ってきます。

で、これにも、「こう見ていく」というセオリーがあって。
ただ、そのセオリーってのは、「特定の場所」でしか通用しないものも多く、別の場所でうまく走らない時は、「セオリーから外して、逆をやる」なんて柔軟な発想も必要だったりします。
まあ、事実、何人かでチームだったりすると、敢えてみんなバラバラのセットで走って、その後感想を伝えあって方向性を決めたりする、なんてこともあるんですが。

んで。
このセオリーってのは、「経験によって蓄積された知識」によって成り立ってると思うんですが、それが通用しない場面では、敢えてそれを捨てる、という柔軟さも必要だと思うんですよね。

まあ、なんの話かというと、実はラジコンじゃなくて。(笑)

最近、なぜかプログラミングの話題に巻き込まれることも多く。
#自分で引き金引くことも多いんですが。(笑)

「プログラミングを学びたい」に対しての回答が「まずC言語」ってのは、昔のセオリーでした。
なぜか。
「汎用的に使える」言語が、C言語かアセンブラしかなかったからです。
#BASICもあったな。あ、Pascalもか。(笑)

当時のC言語は、今で言うJavaのように「ポータビリティに優れた言語である」と言われていました。
まあ、CLIの時代の話ですし、OSの壁は標準ライブラリが吸収するという考え方があり、「書き方によっては」ポータビリティに優れている、というのもあながち嘘ではなかったし、確かに、当時のほとんどのOSでC言語の処理系があったんじゃないかと思います。

ま、現実にはポータビリティなんて、幻想に過ぎなかったわけですが。
#もちろん、ポータビリティの高いコードを書いていたウィザードと呼ばれるプログラマ達がいたのは事実ですが。

そんで、今も「プログラミングを学びたい」に対しての回答は「まずC言語」なんですよね。
今、C言語を勧めるひとに、その理由を聞いても、明確な理由はないと思います、たぶん。
てか、思いつかないし。
そもそもワタクシは、今、初学者に勧める言語にC/C++は含めません。
そんなの後回しだろ、と。

昔のC言語は、アセンブラに比べて、圧倒的に解り易い言語でした。
プログラミングというと、まずアセンブラ、という時代に、劇的な変化をもたらしたのは間違いないでしょう。

同様に、今は、初学者が「プログラミング」を学ぶための敷居の低い言語がいくつかあります。
Javaを筆頭に、Perl、Ruby、Python。
いずれもライブラリが豊富で、熟練すれば、それだけでキチンとアプリケーションも構築できますし、なによりメモリ管理がきちんと言語側で管理され、「OSごと落とす」ようなキケンなプログラムを書く心配がない。
C言語は、「OSごと落とす」ようなキケンなプログラムを書けてしまう言語なわけです。
#間違いで。

また、プログラミングを学ぶ上で、「オブジェクト指向型言語だから、オブジェクト思考を理解しないと先に進めない」なんて話も聞いたりしますが、プログラム言語ってのは、そんなに不自由なもんじゃありません。
オブジェクト指向型言語が、構造化プログラミングだけで書けないか、というと、そんなことはないんです。

プログラミングの学習のセオリーに、オブジェクト指向が、まず入ってくるのはおかしいと思ってます。(笑)

構造化は、もう仕方がない。これは、避けて通れないと思います。
冗長な表現を避けて関数化する、変な分岐やジャンプはしない、これはもう当然なので、構造化プログラミングは「意識されない」と思いますが、避けて通れない部分でしょう。

しかしながら、オブジェクト指向プログラミングなんてのは、いわば、大規模開発のための設計技法なので、プロを目指すならともかく、趣味のプログラミングで、「完全に理解」なんてする必要はないし、そもそも「なんかこんな感じー」で十分です。
必ずインターフェースや、基底クラスを作って、そこから派生させて、なんてやる必要なんてないんですよ。
それはフレームワークを作成するために必要な知識であり、技法です。
継承すら、場合にはよっては知識として不要だと思ってます。

学習するプログラミング言語に関しても、すべての構文なんて、まず最初に覚える必要なんてなくて、最低限の構文、変数の宣言や関数宣言、そして制御文、これくらい知ってしまったら、まず書くことができるんですよ。
プログラムを「効率よく書くためのセオリー」はあるかも知れません。

でも、「プログラミングを学ぶ」ためのセオリーなんてないんじゃないか、とワタクシは考えています。
ひとによって考え方、学び方は様々あるし、まずきちんと理屈を学んでからじゃないと手を付けられないひと、まず手を動かして、痛い目を見ながらkじゃないと学んでいけないひと、両極端ですが、両方あると思うんですよね。
なので、初学の方法を「決まった形」で勧めるのは、間違いじゃないかと思うんですよ。
まず「何をやりたいのか」でも、学習の手順が変ってくると思います。
例えば、「Rubyを極めたい」ひとに、まずは手を動かせ、って言っても納得しないでしょうし。

まあ、一方で。
「プログラミングを学びたい」ひとが、明確に目的を持ってることも少ないのも事実です。
でも、それはそれでOKかとも思ってるんです。
「なんとなくプログラミングってやってみたいんだけど、どこから手をつければいいの?」な質問はアリだと思います。
それこそ、「んじゃJavaからやってみれば?」「Rubyがいんじゃね?」とか言えるわけで。

質問に回答する方も「それがセオリーだから」と思ってるのかも知れませんが、そのセオリーが間違ってる可能性があることも考えた方がいいんじゃないか、とワタクシは思います。

なぜ、それを勧めるのか。
自身で明確な回答が出せないなら、それを勧めるべきではありませんし、自身のレベルで、初学者のことを考えるのもナンセンスです。

世に出回っているセオリーは、時に無視することも大事であろう、とワタクシなぞは考えますがね。
特に、自分で学習する場合、まずはセオリーに乗ってみるのもいいですが、なんか違う、と思ったら、手順を疑ってみる、そういう必要もあるんじゃないかと思いますよ。
こと、プログラミングに関して言えば。
したり顔の上級者の言うことは、あまり信じない方が吉です。(爆)
#ま、つまりこの文章も信じない方がいいってことになりますか。(笑)

さて、どんなもんでしょうか。

|

« さて、今回は? | トップページ | VirtualBoxにUbuntu10.10 β版を入れる »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/500703/49403795

この記事へのトラックバック一覧です: セオリー通りということ。セオリーを無視するということ。:

« さて、今回は? | トップページ | VirtualBoxにUbuntu10.10 β版を入れる »