« クリスマスの思い出 | トップページ | MacBook Pro »

2014年12月28日 (日)

プログラミング

大人になってから何となく興味があって始めた事の一つにプログラミングがあります。僕が学生だった頃はまだアメリカでも今ほど一般にはコンピューターが普及していなくてそれほどプログラミングの価値はありませんでした。大学一年生の時になぜか取る事になった授業にコンピューターの授業が一つありましたがここでもあまり大した事は習いませんでした。やった事と言えば授業の前半分でワープロとスプレッドシート(それもどちらも聞いた事がない様な物でした)、後半分でBASIC言語を使った簡単なプログラミング。たいした事はしませんでした。

その後、あるきっかけでもう少しプログラミングを知っていても悪くはないな、と思ってC言語のクラスを取って今に至るわけなのですが、その頃に思ったのはプログラミングは普通の人ならば特に知らなくても問題がない事ではないか?という事。その頃までには既にコンピューターのプログラムを自分で書く必要性があまりなくなって来ていたからです。更にその頃を境にコマンドラインを使うという事がだんだんと無くなってきていてGUIプログラミングになるとかなり敷居が高くなり、基礎だけではあまり必要がない、と思われたからです。

もちろん、一年生の時に取ったプログラミングの授業の一部は後々に実験データを可視化する時にまあ役に立ったりしたのですがその程度の事はおそらく自然にそのうちに学んでいった事と思われます(具体的にはエクセルなどで計算をする時に関数を使う時にどう使うかがプログラミングを若干知っていると飲み込みが早くなる様ですが、そもそも普通はエクセルなどのスプレッドシートの使い方を覚えてからプログラミング、となるはず)。

実際に僕が働き始めて最初にした事の一つがそれまで実験データの解析に使われていたApple IIの代わりにエクセルに変更した事でした。学生として使っていた時に使い勝手があまりにも悪かったので嫌で嫌でたまらず、エクセルに変更したのです。Apple IIでは師匠が書いたBASICのプログラムを使って最小二乗法を使って数値を計算するという物でこれはエクセルでも割と簡単に再現できるからApple IIの代わりにエクセルになったのです(当時はまだ386にWindows 3.1を使っていました)。もちろん単純なファイルではなくて数値を入力してボタンを押せば自動的に計算をしてくれる様な仕様になっています。そうする事でどこにどの数値が計算されているのかが明らかになり採点する方も探しまわらなくていい、という仕組みです。また同時に学生が間違った計算をする事を防ぐ、という意味もあります。

正直な所、化学者ってあまりプログラミングをする機会はなく、多くの場合はすでに存在しているプログラムを流用する、という事がほとんどです。もちろん、プログラムを自分で書く、という人もいるにはいるのですがそれほど多くはありません。それに対して物理学者はどういうわけだか自分で書く、という場合が多い様です。このあたりはもう文化の違い、としか言い様がないのですがその為にプログラムを書くという事に対するある程度の偏見が僕にもあるのかも知れません。プログラミングは知っていて損はないけど知らなくても化学者としては何とかなるだろう、とずっと思って来ました。

基本的にはその考えはこれまでずっと変わっていなかったのですが最近になってふと思う事がいくつかありました。まずはこちらのブログから。英語のブログですが四歳児(今は五歳なのか?)の娘にプログラミングを教えているお父さんのブログです。日本語での紹介がこちらにあります。実はこのブログの事を知って最初の反応は「どうして?」でした。あまり意味がない、と思えたからです。しかしだんだん読むにつれて「なるほど」と思い始めたのです。

それからしばらくして同僚のある先生と話をしていてたいへん、興味深い事を教えてくれました。この先生、子供の頃、数学がとにかく苦手。代数でどうしてXやYを使うのかがわからなかったそうです。もしXが未知数なら単純にそれが何であるのかどうして書いてない?と不思議でならなかったそうです。その頃はその先生、単純にXには例えば円周率が決まっている様に常に特定の数値が与えられている、と思っていたそうです。まあその辺りには先生の説明の問題などもあったのでしょうが、それがようやくXやYには特定の数値がなく単なる「置き場所」であると気がついたのはお姉様に「Xを箱と思いなさい」と言われたのがきっかけだったとか。

その話を聞いて思ったのがそういう意味も考えてプログラミングはある意味で有益なのでは?と思いました。どうしてかって?だってプログラミングにはこの様な事をしても構わないのです。

x=1
x=x+1

この段階でxの数値は2になっています。でもこれって数学的に考えるとおかしな話です。何しろ、x=x+1を解くと0=1などというとんでもない事になるので解がない数式になります。でもプログラミングでは構わない。そういう意味でプログラミングでは変数は箱と考えて問題がない。そういう考え方って数学だけからだとなかなか出てこないのではないか?と思われます。で、もしこの同僚の先生が子供の頃にプログラミングを取っていたら…、と考えてしまいます。

他にもプログラミングをしていて学べる事に論理的思考と細かい所に気をつける事があります。プログラムを書くとすぐにわかる事なのですがどうしても思った様に作動してくれない事がよくあります。だいたいの場合は自分が考えている論理がちゃんとしていないから考えもしなかった事をする、というのがその原因です。例えばこういうジョークがあります。

ある妻がプログラマの夫に「買い物にいって牛乳を1つ買ってきてちょうだい。卵があったら六つお願い」と言った。
夫はしばらくして、牛乳を6パック買ってきた。
妻は聞いた「なんで牛乳を6パックも買ってきたのよ!」
夫いわく「だって、卵があったから……」

これは明らかにプログラム(命令)の悪い例ですね。本来ならば「買い物に行って牛乳を一つ買ってきてちょうだい。もし卵があったら卵も六つお願い」となるのが正しいわけです。こういう事は日々の生活でも曖昧な表現にならない様に気をつけるという意味で大いに学ぶ価値はあるかと思います。

少なくともコンピューターのプログラムがどの様に作動しているのか?という事は知っていて損はない事だと最近は思っています。そう考え始めた頃に知ったのがこの本。ふ〜ん、と思いながらもアメリカに住んでいて買うのは難しくはないけど簡単でもありません。そもそも850円程度の本に割にあわない程度の送料が付くのでなかなか買う気にはなりません。と思っていてしばらく前のある日、ふとアマゾン日本のページを見ていたらなんと、Kindle版がある事が判明。前に見た時にはまだKindle版がなかったのでこのしばらくの間に出たらしいです(調べてみると四月十一日にKindle版が出たらしいですね)。Kindleなら読めるし送料もない(その上、Kindle版が若干安い)ので早速購入。まああまり大した内容でもなく確かにこれならば文系の人が教養として読んでもまあ悪くはない内容です(がその反面、理系、もしくはプログラマーにはものすごく物足りない内容かと思います)。個人的にはこの本の中の例(例えば「電車で騒いではダメ」が「立派なプログラミング」とされているのはちょっとどうか?と思うのですが…)は今ひとつかな、とは思いましたが少なくともプログラムがどの様な事をする物であるか、その論理がどのようになっているか、などの基礎の理解にはちょうどいい程度かと思います。

では実際にどのぐらいが適度なのか?これには色々な考え方があるでしょうが基本的にはごく簡単な論理ができる程度は誰もが知っていても悪い事ではないのだろう、と思います。教養として考えるとその程度がちょうどいいのではないか?と思います。理系になると自然にプログラミングをしなければならない機会も出て来ます。どの程度までその場合は知っていればいいのか?というのは難しい所だと思いますが…。

« クリスマスの思い出 | トップページ | MacBook Pro »

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

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: プログラミング:

« クリスマスの思い出 | トップページ | MacBook Pro »