最終更新時刻:2009年11月25日(水) 18時20分
27

プログラミングを教えるということ

公開日時:
2009/07/05 01:32
著者:
Ace

みなさん、たくさんのコメントやGood、本当にありがとうございます。

みなさんの期待に答えられるよう、頑張ります。

それでは実質初めての投稿です。

Pythonを教えること

僕は現在Pythonを勉強しているわけですが、
使ってみて思ったことは、「習得しやすい言語」だということです。Cをはじめ、VisualBasicやらC#やらJavaやらいくつかの言語を勉強した
のですが、いずれも、理解に苦しむ、「挫折ポイント」とでも言いましょうか、習得しにくい部分がありました。そんな中Pythonを勉強し始めて、(他言
語を勉強していた、というのももちろんありますが)すらすらと様々な概念が習得できたことに驚きました。

そんなこんなで僕もある程度Pythonを扱えるようになっていきました。そこで僕は、部活(科学部のPC班)でPythonの布教活動に着手し始めました。プログラミング未経験者(後輩)とプログラミング経験者(先輩)にそれぞれPythonを教えたところ、ちょっと面白いことになりました。

未経験者の反応

プログラミング未経験者の彼。素直ないい子で、いわば白紙のノート。Pythonicに染めがいがあるってもんです。

まずはプログラミングとは何ぞや、ということを軽く教えた後、早速Pythonを教え始めたわけですが、やはりするする理解していきました。1日で組み込み型のキソ・条件分岐・ループまで覚えていきました。ここまでくればまぁまぁ何とか後は一人でもいろいろできるかなー、っていうくらい。

このレベルまで来るのに、他の言語だと結構時間がかかったと思います。なら教育用言語を教えれば・・・ということですが、教育用言語というのはやはり実用的に使うのにはちょっと無理があります。当然ながら、「実用性」と「習得の容易さ」は相反することだということです。

この常識を打ち破ったのがPythonだと思います。強力な動的型付け、直交性の高さ、誰もが読みやすいコードが書ける文法、 十分実用に使えるのに習得が容易。これがPythonです。

 経験者の反応

経験者の先輩。C++やらJavaやら僕が聞いたことなかった言語まで使う結構な猛者。僕がPythonistaなことを知って、貪欲にPythonも学び始めようとしました。

いやー、こちらは後輩の彼と比べて指導は難航。「インデントの利点って?」「は?do~whileないの?」「俺のswitch返せ」挙句の果てにはきました、「"".join(シーケンス)キモい」・・・

んなこと言って理屈こね回す暇があったら実際にコード書けや。 (←心の声

 先ほど言ったように、「実用性」と「習得の容易さ」を兼ね備えるPythonですが、これによって、見方によっては「クセ」ともとれる文法も確かに生まれてしまいました。「"".join(シーケンス)」然り、ちょっと独特なオブジェクト指向への考え方然り、他言語経験者からすると理解しがたい部分もあるようです。

 Pythonicな考え方

Pythonは、直交性の高い分かりやすい言語を目指しているんだろうけど、ある1つの問題を解決するためにぽんぽん文法を変えたり追加したりはしません。慎重に、全体としての調和が乱れないように、ゆっくりゆっくり変わってく言語なんです。だから2.xと3.xが同時進行で開発されてるのだと思います。後方互換性を崩すことのデメリットについても考慮してるわけです。そんな考え方に賛同できる人じゃないとPythonの理解は進まないかもしれません。常に変化を求め、どんどん新しいことにチャレンジしていくタイプの人は、例えばRubyなんかが向いてるかもしれません。

プログラミングを教えるということ

後輩の彼は、Pythonの文法をすんなり受け入れてくれました。

先輩は、文法にいちいちケチつけてきて、Pythonはお気に召さなかったようです。それは、先輩が「Pythonの思想」を受け入れられなかったからである、と言えると思います。

プログラミングを教える、ということは、その人の考え方をしっかり理解しないと不可能だと思います。いい技術者あっても、人の性格が分からなければ良い教育者にはなれないと僕は考えます。要するに言いたいことは、「プログラミングを教えるということ」は、「他人の考えを理解する」ということなんじゃないかなー?ということです。

まだまだ教えられる立場の僕に言えたことではないですかね(汗

また、プログラミングを始める人は、自分に合う言語を探さなければなりません。もちろん複数の言語が使えるに越したことはないけど、1つ、お気に入りの言語を持つということは、自分の誇りにもなりますし、その言語をもっと良くしようと思う気持ちはかなりモチベーションを高めます。

そんなことを考えつつ、Python普及活動に精を出す今日この頃なのでした。

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。

前後の記事

このエントリーへのコメント

4

プログラミング言語はたくさん言語を知れば知るほど、「プログラミング言語とは何か」という本質的なことを知るきっかけにはなるんですよね。
ただ、その先輩は「こういう表記をする言語もある」という事実を受け止められない、既成観念にとらわれた人ですね。。。
僕にとってのお気に入りははじめにやったC。APIを自作して高水準に近づけるあたりが面白くてしょうがない。
Pythonはブラッディ・マンデイで興味をもったので、これからも連載期待してますw

  えりっく on 2009/07/07

3

Java経験者の先輩は
 String s = null;
 if ("abc".equals(s)) System.out.println("空文字列");
のようなコードを書いたことはないのでしょうか。
便利なのに。

  ISLe on 2009/07/07

2

はじめまして。
素敵な記事ですね。

プログラム言語はいろいろありますが、自分が実現したいことを的確にカタチにできるものがあると嬉しいですよね。
私は最近Pythonで仕事することが多いですが、対話モードでさくっと試せるのは魅力的です。

  cocteau on 2009/07/06

1

初めまして。ほんとすばらしいですね。日本の未来も明るいです、などと言ってしまう自分はずいぶんおっさん化してきたなと思いつつも、結構世の中にはびこっている、COBOLerをOOPerに変革させる必要性について、少し教えてもらえたら嬉しいです。
自分もPython使いたいと思っているのですが、15年ぐらい前に高校で習った、COBOL85とCOBOL/2が頭の中から出て行ってくれないので、他の言語の定義や宣言の紐付けが上手く行かないのです。
(むしろ、COBOL2002でCOBOLScriptでも習っとけぐらいでしょうか?)

何か上手い感じの習得方法はない物ですかね?
やっぱり、みんなのPythonを読んで、まずはガタガタ言ってねーでコーディングしてこいYO!的なのりですか?(笑)

一日でも早くGoogle App Engineで自分のプログラムを動かしたいです。

  いちのせかずま on 2009/07/06

ブログにコメントするにはCNET_IDにログインしてください。

この記事に対するTrackBackのURL: 

CNET_ID

メンバー限定サービスをご利用いただく場合、このページの上部からログイン、またはCNET_ID登録(無料)をしてください。