2008年12月17日 12:30 [Edit]
いきなりCの方がよっぽど難しい
さすがにJavaやPHPはなかったけど、高級言語を先に学ぶというのは今にはじまったことじゃない。
304 Not Modified: プログラミング初心者はギークから学べるのかそんな私が学んできてずっと思っていたことは、私はC言語から学び、Java、PHPと進んできたが、今の人はいきなりJavaやPHPから学ぶのである。構造化プログラミング言語からオブジェクト指向言語へと順を追うのではなく、いきなりオブジェクト指向言語を学ぶのだ。はっきりいって理解できるのか非常に疑問にう。
Computer Scienceをきちんと教えている学校の多くは、最初の一年の前半に scheme を教えて、後半に C と assembly language を教えている。私が教わったのは1980年代の終わりだけど、21世紀の今になってもこれは変わっていない。
そう。Schemeが先。高級言語、というよりソフトウェアを先に学んでハードウェアを学ぶ。少なくとも四半世紀前からそう。理由は簡単。その方がわかりやすいから。そしてなぜわかりやすいかといえば、現代のコンピューターのハードウェアは「そのままの具象」ではなく「機械のために簡素化された具象」という、むしろ抽象的なものだから。
404 Blog Not Found:オブジェクトは難しくない。難しいのはクラスそれでは、なぜ電脳においては抽象化が先になされていなければならなかったのか?そうでもしなければ、使い物にならなかったからだ。電脳は今でも根源的に0と1しか扱えない。しかも我々が普通に使っている電脳では、0と1を一個づつ扱うことも出来ず、最低でも8つまとめて扱う必要があったりする(これがbyte)。
だから、電脳における最初の仕事は、0と1から具象を作り出すことになる。0と1を32個まとめて「整数」をこさえたり、8つの0と1を文字に対応させ、それを並べて「文字列」をこさえたりといった作業だ。
こうした「再具象化」されたものを集めて、はじめて「人間向き」のオブジェクトが出来上がる。そして一旦出来上がったオブジェクトであれば、粘土や折紙を使うがごとく、それを「使う」ことができる。
小学生がどうやって算数を習うかを思い出してみよう。最初は「りんご2つとりんご3つ」という具合に、必ず具象に結びつけてあるはずだ。いきなり「2+3」とはならない。そしてオブジェクト指向というのは、先に具象 = objectがあって、それをメソッドで操作する。先に手続き = procedure = function があって、具象を後付けする手続き型の言語よりずっとわかりやすい。実際 Alan Kay は、「子供にもわかるように」と SmallTalk を作ったのだし。
304 Not Modified: プログラミング初心者はギークから学べるのか1を学ばずに3から学んでいっていいの?って違和感。
むしろCをいきなり学ぶというのは、算数をすっとばして数論から入るようなものではないか。
あるいは、ガソリンエンジンの仕組みを学んでからでないと、車の運転を習ってはいけないというか。ところが、エンジンを電気モーターにかえても、車は運転できてしまうのである。そうでないとプリウスにのっている我が家は困ってしまう(笑)。
プロになるためには、確かに原理も知らなければならない。JavaやPHPしか知らない「プログラマー」には、私だって「スイーツ(笑)」と頭につけたくなる。しかし、それは原理から学ばなければならないということを全く意味しない。むしろ原理は、動作感覚を会得してからの方が学びやすいのだ。
むしろ問題は、JavaやPHPが「中途半端に難しい」ことにあるように思える。それゆえ私はどちらも初心者用の言語とは見なしていない。以前にも書いたが、昨今使われている言語の中で最も初心者向けなのは JavaScript だと考えている。なんといっても、ブラウザー上で実行できるというのが大きい。
404 Blog Not Found:私がJavaScriptを初心者用の言語として選んだわけ
- プログラム:
- 出力:
- エラー:
これと同じ事をJavaでやろうと思ったら、何行コードが必要なのでしょうか。JavaScriptならHTMLも含めて10行です。
数学に入る前に算数が必要なように、プログラミングはまず手でいじくりまわせる具象を備える程度の高級言語からはじめるべきなのではないだろうか。
Dan the Geek
この記事へのトラックバックURL
単に Hello, JavaScript! って出したいだけならJavaでも5行だけれども
Javaは初心者が開発環境を作る段階でつまづくかも。
ある程度知ってる人が隣にいないとどこかでつまずく。
続きが楽しみです。
JavaScriptが初心者に良いというのは、同意。でもちょっといい加減過ぎるところがヤバいかも。
しかしwebやWindowsのプログラムを初心者が組むのには向いてないと思う。
初心者が最初にやるならJavaの方をお勧めしたい所。
っつーか、自分の大学ではCより先にJavaをやったわ。
ランクとしては底辺の大学だけどね。
と言われるんですが、日本の中学高校で『情報』を教える教員の養成課程に Smalltalk が出てくることはあるのでしょうか、ってのがちょっと問題なんじゃないかなあと思ったりしてます。実際どうなんでしょ?
一般人に売る気の無い値段がアレですが。
学べば学ぶほど、どんどん奥に、どんどん深く、真理に近づいていく…。というイメージです。
機械語の場合は、人間の言語に近い形をした、わかりやすい表層から
0と1という真理に近づいていくかんじです。
遅さに絶望してCもしくはマシン語にいくのがいい
Typoを指摘しただけなんですが、教員の養成課程でSmalltalk、今ならさしずめSqueakが出てくることはないでしょう。「中学・高校教員の養成課程」ってそんなに重要なんですか?何というかout of scopeな気がしますが。
ちなみに私は高級言語から学習すること、今ならJavaScriptで学習することに賛成です。できれば、Lively Kernelみたいものがいいでしょう。
今はどうなんだろう。
ならばJavaScriptではなくVBScriptという選択も捨てがたい。
ブラウザすら不要だし。
新入生たちに向けて、入学までにLogoでもやっとくとよい、
と学科のサイトで勧めてました。
私は個人的には独学でまずPascalからみっちりやりました。
(今でもDelphi等で役立ってます)
それとアセンブラ。
Cはそのあとでした。
で、PrologやLispをやりました。
Javaからはじめる学校も多いようですが、
どうなんでしょうかね。
まだ、PythonとかSchemeとかOberonなんかの方が良さそうに思いますが。
マニュアルはPCに付属。100ページもなかったと思う。もちろん、ほとんど中学生でも十分に読みこなせるものである。
画面に文字を書くのは1行。
画面に直線や円を書くのも1行。
音楽を奏でるのも1行。(当時、プログラムで演奏できたのだ!画面描画と同期をとるのは難しかったけれど。)
テトリス風味の落ちゲーとか、Wizardry風味の線画迷宮なんかを作って、遊んでいたものだ。
その頃の愛読書は、もちろんマイコンBASICマガジン。
思い返せば、初心者にとって、何と適切な学習環境だったのだろうと思うのだ。
時は今。画面に文字を表示させるために、まずはウィンドウを生成して、コンポーネントを作って、ラベルやらテキストボックスやらを放り込んで、ボタンの入力を受け付けるlistenerを実装して、画面に直線を書こうなんて話になったら、サーフェスやらキャンバスやら用意して、DirectXやらOpenGLやら勉強して、音楽鳴らすには、FM音源がないから、どこかで録音したのを持ってきてwav作って、うんたらかんたら〜〜あぁ〜〜う゛ぁ!=%(!=&’〜!’$)(〜}{〜〜〜#って、初心者には敷居が高すぎ。自分でコーディングした範囲以外のプログラムの動作も把握しなきゃならない。はっきり言って、やりたいことを実現するまでのプロセスが長すぎ。
だから、もしも、自分に子供がいたら、N88-BASICみたいな手軽な環境を与え、コンピュータ言語を使うこと(=コンピュータに「何かをやらせること」)の楽しさを教えたいと思う。
という私も、今、eclipse+Visual Editor+Java+SWT+OpenGLで1本ゲーム作成中。年末年始で一通り終えるつもりだったけれど、、、環境構築だけで3日。全く、私はSE失格だろうか。