2008年12月17日 12:30 [Edit]

いきなりCの方がよっぽど難しい

さすがにJavaやPHPはなかったけど、高級言語を先に学ぶというのは今にはじまったことじゃない。

304 Not Modified: プログラミング初心者はギークから学べるのか
そんな私が学んできてずっと思っていたことは、私はC言語から学び、Java、PHPと進んできたが、今の人はいきなりJavaやPHPから学ぶのである。構造化プログラミング言語からオブジェクト指向言語へと順を追うのではなく、いきなりオブジェクト指向言語を学ぶのだ。はっきりいって理解できるのか非常に疑問にう。

404 Blog Not Found:初心者向け言語もいろいろ
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

この記事へのトラックバック
wikiに説明の文章としてまとめていると案外時間がかかってしまうわけですが。 C言語の変数の項目書いていて思ったこと。 いきなりCの方がよっぽど難しい たとえば変数に100っていう数値を入れて、出力するプログラムを書く場合 できるだけ宣言と代入を同時にやらずに初心者
Cは難しい言語なのかな【馬鹿だけどプログラミング頑張る日記】at 2009年11月14日 17:40
ミュージシャンとして数々の経験をしてきた日下さんでさえも驚かれた衝撃の出来事を、ご本人自ら告白してくれます。 つづきは、こちらの動画で、聞いてあげてください。 Y M W b p V F M U 5 b 2 n j w x 9 G O 7...
49歳男性ミュージシャンの告白【或る隣人の秘密】at 2008年12月18日 22:53
 ちょっと気になったので思い切って反応してみました。 ・404 Blog Not Found:いきなりCの方がよっぽど難しい むしろCをいきなり学ぶというのは...
Cは決して難しくない【妄想プログラミング道】at 2008年12月18日 18:17
404 Blog Not Found:いきなりCの方がよっぽど難しい  ここで最初に学ぶコンピュータ言語にC言語を選ぶのはあまりよい選択といえないと書いてある。...
学ぶ目的と学ぶ人種【Akulaのいろいろ日記】at 2008年12月17日 23:26
最近、いろいろな方から、「どうしてschemeを始めたの?」という意見を頂く機会が多いので、今回、考えをまとめてみました。
[scheme]schemeを始めた理由【Bugle Diary】at 2008年12月17日 23:22
この記事へのコメント
そこでprocessingですよ
Posted by tmp at 2009年02月08日 19:10
 私が初めてコンピュータに触れたのは中学生の頃。言語はN88-BASICだった。
 マニュアルはPCに付属。100ページもなかったと思う。もちろん、ほとんど中学生でも十分に読みこなせるものである。

 画面に文字を書くのは1行。
 画面に直線や円を書くのも1行。
 音楽を奏でるのも1行。(当時、プログラムで演奏できたのだ!画面描画と同期をとるのは難しかったけれど。)

 テトリス風味の落ちゲーとか、Wizardry風味の線画迷宮なんかを作って、遊んでいたものだ。
 その頃の愛読書は、もちろんマイコンBASICマガジン。

 思い返せば、初心者にとって、何と適切な学習環境だったのだろうと思うのだ。

 時は今。画面に文字を表示させるために、まずはウィンドウを生成して、コンポーネントを作って、ラベルやらテキストボックスやらを放り込んで、ボタンの入力を受け付けるlistenerを実装して、画面に直線を書こうなんて話になったら、サーフェスやらキャンバスやら用意して、DirectXやらOpenGLやら勉強して、音楽鳴らすには、FM音源がないから、どこかで録音したのを持ってきてwav作って、うんたらかんたら〜〜あぁ〜〜う゛ぁ!=%(!=&’〜!’$)(〜}{〜〜〜#って、初心者には敷居が高すぎ。自分でコーディングした範囲以外のプログラムの動作も把握しなきゃならない。はっきり言って、やりたいことを実現するまでのプロセスが長すぎ。

 だから、もしも、自分に子供がいたら、N88-BASICみたいな手軽な環境を与え、コンピュータ言語を使うこと(=コンピュータに「何かをやらせること」)の楽しさを教えたいと思う。

 という私も、今、eclipse+Visual Editor+Java+SWT+OpenGLで1本ゲーム作成中。年末年始で一通り終えるつもりだったけれど、、、環境構築だけで3日。全く、私はSE失格だろうか。
Posted by ひろ at 2009年01月02日 09:45
ケンブリッジのコンピュータサイエンス学科では、
新入生たちに向けて、入学までにLogoでもやっとくとよい、
と学科のサイトで勧めてました。

私は個人的には独学でまずPascalからみっちりやりました。
(今でもDelphi等で役立ってます)
それとアセンブラ。
Cはそのあとでした。
で、PrologやLispをやりました。

Javaからはじめる学校も多いようですが、
どうなんでしょうかね。
まだ、PythonとかSchemeとかOberonなんかの方が良さそうに思いますが。

Posted by isakus at 2008年12月21日 11:21
初心者≒Windowsユーザー

ならばJavaScriptではなくVBScriptという選択も捨てがたい。
ブラウザすら不要だし。


Posted by コーエン at 2008年12月20日 08:18
私の母校では、FORTRANをやってから6809アセンブラでした。
今はどうなんだろう。
Posted by 弾さんと同い年 at 2008年12月18日 22:35
>traijpn
Typoを指摘しただけなんですが、教員の養成課程でSmalltalk、今ならさしずめSqueakが出てくることはないでしょう。「中学・高校教員の養成課程」ってそんなに重要なんですか?何というかout of scopeな気がしますが。

ちなみに私は高級言語から学習すること、今ならJavaScriptで学習することに賛成です。できれば、Lively Kernelみたいものがいいでしょう。
Posted by (o) at 2008年12月18日 15:15
BASICおすすめ
遅さに絶望してCもしくはマシン語にいくのがいい
Posted by とおりすがり at 2008年12月18日 03:55
コンピュータ言語も、数学と一緒で、さいしょは簡単な(しかしその奥にたくさんの深い意味を内包した)言葉でさらりとわかりやすく、扱いやすく記述されているけれど、
学べば学ぶほど、どんどん奥に、どんどん深く、真理に近づいていく…。というイメージです。

機械語の場合は、人間の言語に近い形をした、わかりやすい表層から
0と1という真理に近づいていくかんじです。
Posted by tasoi at 2008年12月18日 02:47
C++BUILDERでいいじゃん。
一般人に売る気の無い値段がアレですが。
Posted by 便利なものは高いのう at 2008年12月18日 01:26
>Smalltalkな。
と言われるんですが、日本の中学高校で『情報』を教える教員の養成課程に Smalltalk が出てくることはあるのでしょうか、ってのがちょっと問題なんじゃないかなあと思ったりしてます。実際どうなんでしょ?
Posted by taraijpn at 2008年12月18日 00:52
Cやった後、Javaをやると楽さ加減にもう、涙が出る。
初心者が最初にやるならJavaの方をお勧めしたい所。
っつーか、自分の大学ではCより先にJavaをやったわ。
ランクとしては底辺の大学だけどね。
Posted by 通りすがり at 2008年12月17日 22:32
基礎的な部分を覚えるのにはCが向いているとは思うけど。
しかしwebやWindowsのプログラムを初心者が組むのには向いてないと思う。
Posted by H at 2008年12月17日 21:46
そういえば、弾さんのJavascriptによる初心者本はどうなってるんだろう。
Posted by 鈴木 at 2008年12月17日 21:13
Smalltalkな。
Posted by (o) at 2008年12月17日 17:52
日本の中高生が学んでいる『情報』に導入されるべきプログラミング言語は何か?という議論にもっていくと面白いのかも?
Posted by taraijpn at 2008年12月17日 17:04
プロシージャルな言語の方が解りやすい人多いと思うけどなあ。人間の思考は結構リニアだから。オブジェクト指向が頭で分かっても、実装できるかどうかは別だと思う。何だかんだいって、Cは薄くてシンプルな言語だから、これを理解できない人がプログラマーになるっていうのは、考えられないでしょう?

JavaScriptが初心者に良いというのは、同意。でもちょっといい加減過ぎるところがヤバいかも。
Posted by ひえええぇぇぇぇ at 2008年12月17日 16:26
アナグラマーのすすめを読みました。
続きが楽しみです。
Posted by k at 2008年12月17日 14:29
開発環境の構築はめんどくさいねえ。

ある程度知ってる人が隣にいないとどこかでつまずく。
Posted by gf at 2008年12月17日 14:03
初心者がボタンとかも出したいと思うならVBかと。
単に Hello, JavaScript! って出したいだけならJavaでも5行だけれども
Javaは初心者が開発環境を作る段階でつまづくかも。
Posted by BOKO at 2008年12月17日 13:37
VBAはダメなんですかね。エクセルで実行できる方がオフィスワーカーにはありがたいと思うんですが。
Posted by eurodollari at 2008年12月17日 13:00