«前の日記(2007-11-10 (土)) 最新 次の日記(2007-11-13 (火))»  

まちゅダイアリー


2007-11-11 (日)

初めてのプログラミングに Hello, world は向いていない

id:gothedistanceさん経由で。

そういえば「Hello, world」じゃなくて「Hello World」って書いてた。 まぁ、それは良くて。

プログラミング経験者が新しい言語を学ぶ場合に「最初のプログラム」に Hello, world を使うのはいいけど、未経験者が「最初のプログラミング」に使うのには向いていないと思う。 だって、それってプログラミングしなくてもできちゃうから。

コンソールの場合はエディタで

Hello, world

と書いて、

$ cat hello.txt

とすれば「Hello, world」が表示される。

Web系の場合は

<html><body>Hello, world</body></html>

と書いてWebブラウザで開けばいい。

なのに、なんでわざわざ

public class HelloWorld {
      public static void main(String[] args) {
          System.out.println("Hello World");
      }
  }

とよく分からないおまじないをいっぱい書いて、

$ javac HelloWorld.java
$ java HelloWorld

と打たないといけないのか。

スーパーマリオギャラクシーで言うと、最初のステージからいきなりヒップドロップ(ジャンプ中にZボタン)やスター集め(リモコンでスターをポインティング)を要求されているような感じ。 ドラゴンクエストなら、最初から馬車の入れ替えをしなきゃいけない感じ。

まぁ、娯楽のゲームと一緒にするのはどうかと思うけど、でも最初の敷居は低い方がいいよね。 相手次第かもしれない。コンピュータに向いている人や、モチベーションが高い人や、好奇心の強い人ならなんとも無いだろうし。

最初のプログラムとして ”Hello, world.” は適切か?で書かれている「足し算ゲーム」だと、ちょっと詰め込みすぎな気がするので、

puts 4 * 5 + 12

みたいな簡単な四則演算がいいんじゃないかと思ってる。これならエディタの表示だけでは答えを出せないからね。

追記

結城さんからコメントをいただいた。

そういう「きわめて自明」なところからスタートしたほうがスムーズに進める人もいるように私は思っています。

「きわめて自明」なところからスタートするけれど、つまらないと思わずに先を読んでもらえるか(興味を持って先に進んでもらえるか)が入門書(教育者)の腕の見せ所(後略)

確かに Hello, world を出力するより 4 * 5 + 12 を出力する方がプログラムは複雑になるので、初めての人には辛いのかも。 僕の場合はマンツーマンで話す機会くらいしかないので、相手に合わせて興味の持たせ方を考えるくらいかなぁ。

ちょっと話がそれるけど、これから就職して会社で Java を使う予定でプログラミングが未経験な人は、時間に余裕があるのであれば、 Perl, Ruby, JavaScript, PHP なんかの LL 言語でプログラムに触れておくといいかもしれない。 もちろん興味があればいきなり Java をやってもいいけど、なんかとっつきにくそうと思えるなら先に LL をやったほうが入りやすいと思う。クラスとかを覚えるのは慣れてからでも OK だし。 JavaScript なら FireFox に FireBug を入れるだけでもすぐに試せるしね。

Tags: memo
本日のツッコミ(全4件) [ツッコミを入れる]
結城浩 (2007-11-12 (月) 04:00)

手動トラックバック(^_^;<br>http://d.hatena.ne.jp/hyuki/20071112#hello

まちゅ (2007-11-12 (月) 13:46)

ありがとうございます。自動トラックバックはダメでしたでしょうか?

結城浩 (2007-11-12 (月) 21:00)

いや、面倒だっただけです(トラバ)すみません(^_^;<br><br>マンツーマンで教えるというのはかなり自由度が高くてよいですね。人数が多くなるほど、生徒との距離が離れるほど教えるのは難しくなるように思います。主な理由はフィードバックがかからないことですけれど。

endu (2007-11-21 (水) 16:48)

今思えばCのHello, worldって、色々伏線が張られているプログラムで、知識が増える毎に、あぁこの記述はそういうことだったのね!という発見がありますね。ただ、確かに初学者への学習効果が高いかは甚だ疑問です。<br>キャッチーな言語としては、JavaScriptが一番だと思います。実行環境(ブラウザ)も標準であるし、グラフィカルだし。<br>ただ、教育的な言語としては、やはりCかなーと思ってます。低レイヤへとの親和性が高いという意味で。