ベイダー卿

今日からはじめるプログラム(その2:プログラマ脳)

2009-03-24 12:59:55

 
コーホー、コーホー、こんにちは。WBCの結果が気になりすぎて仕事も手につかないベイダー卿です。

 

さて、前回は、プログラムを作るモチベーションを、シッカリガッチリ持っていただいたわけですので、今回は、早速プログラミングの環境を整え…。

なんて考えてる方、いらっしゃるのかもしれませんけれども。

甘いです。

普通のプログラミング解説本ならいざ知らず、僕が書くのにそんなセオリーが通用するわけがないのですよ。

というか、書かないというよりも、書けない。

セオリー通りに文章が書ける人って偉大ですよ。

ミネバザビくらい偉大。

いつも、ライターさんってすごいなと思っています。

で。

前に言ったとおり、僕は具体的なプログラミングの説明などしません。

例として、なんか出すことはあるかもしれませんけれども、どう考えても、スターウォーズ、その他のネタ話のほうが多いはず。

つまり、この一連の文章を読んでもプログラムが組めるようにはなりません。

ただ、プログラムが組みたいなぁという気持ちを高めるとか、こういう風に考えたらうまくいくんじゃないのか?というヒントだとか、

やる気をなくしかけたときに、

「こんなところでくじけていいのか!お前の力はそんなもんじゃないはずだ!」

という感じで、竹刀を持った古き良き体育教師のような根拠の無い応援をするのが僕の役目。

そういう、実際とはちょっと離れた外堀あたりを攻めるのが僕の使命ですから。

本丸を攻める精鋭部隊になどなった日には、死んじゃうリスクが高いじゃないですか?

そんな最前線のど真ん中での、どつきあいなんて、同じ愛の持ち主である直江兼続にでも任せておいて、へっぽこプログラマーの僕は、外から愛情こめて応援するくらいが限界なのですよ。

なんか話がそれましたが…。

今回、書いてみたいのは、プログラマはどうやってプログラムを考えているのか?ということ。

普通に考えてるだけで、プログラムができるのなら、プログラマなんて職業は要らないんですよ。

それが難しいから、僕らがいる。

そう、プログラマーの僕らがいるのさ!

だから、普通の人にとっては難しいことではあるんです。

けれども、普通の人にも出来るだけわかるように書いてみたい。

プログラマって、いったい、何考えてんの?というあたりのお話。

で、それを”プログラマ脳”と、とりあえず言っておきます。

僕なんて、プログラマ脳の性能が悪いばっかりに、仕事でもとんでもない遠回りをしてること、多々あるんですよね。

困ったもんです。

で、そのプログラマ脳っていうのは、どういうものなのか?といいますとね。

別に、マモーとか、MAGIとか、ヴェーダとか、R2D2とか、HAL9000レベルのスーパーな頭脳なわけではないですよ。

ごく普通のちょっとだけ理系っぽくて理屈っぽくて融通があまり利かない脳のこと。

それには、いろいろな能力があるんですが、その中の一つを例に出すと、

「1から10までの数字を表示するプログラムを書きなさい」

っていう、なんだか全然楽しくない問題があるとしますよ。

プログラムを学校で習いますと、初期に良く出てくるんですけどね。

こういう寂しい問題。

多分、もっと楽しい問題だったら、きっとプログラマになる人も増えるんじゃないかって思うんですけれども、なかなかそうはならない。

クラスの好きな子の名前を10回表示するプログラムを書きなさいとか、そういう風にしたらいいのって思いますけどね。

中には、10個とも違う名前を書いちゃう浮気な人なんて居たりして、その人の人間性が垣間見える楽しい問題です。

でも、僕、一度としてそんな問題に当たったこと無いですから…。

何でダメなんですかね?不思議でたまりませんよ。

学校教育はこういうところから改革して欲しいですね。昨今の教育現場には、楽しく、愛のある教育が求められていると思うんですよね。

で、とりあえず、寂しいほうの問題でやりますとね。

これにはいくつも解答があるんですが、普通に考えて、

”1,2,3,4,5,6,7,8,9,10”

って、キーボードで打ち込みまして。

それを表示しろ!ってやると、できあがるわけです。

これ、普通に考えると、かなり普通の方法。ほんとうに普通です。

僕が普通、普通って、うるさいのは、これが普通じゃないのが、プログラマの世界の人々、つまりプログラマ脳で解くと、こうはならないからなんですよ。

どう解くか?といいますとね?

1は、とりあえず1。

で、2は、1+1なんですよ。1を1に足した答え。

わかります?

で、次の3は、2+1なんですよ。上で計算した2に1を足した答え。

同じく4は、3+1なんです。上で計算した3に1を足した答え。

10は、その前まで計算していた9に1を足した答え。

そう考えると、とりあえず置いておいた1も、全く計算されてない0に1を足した答え。といえる。

要するに、1を10回足していって、その答えを毎回表示することで、1~10までを表現しましょう。ということ。

これがプログラマ脳によるこの問題の代表的な解法です。

わかります?

なんでこんなに面倒なことを考えるのか?

プログラマってバカなのか?って思った方。

正解。

じゃないです。そんなこと、builderで言ったら袋叩きにされてしまいますからね。

もちろん、バカじゃないですよ。

僕みたいな微妙な人はたまにいますが、基本的にバカじゃないので、心配しないでください。

プログラマが考えてること。

それは、

「すべての結果をできる限り、何らかの決まり(ルール)に則った答えとしてあらわしておきたい」

ということなんですよ。

なぜか?

というと、今回、1から10までですけどね。これ、100までといわれると、打ち込むの大変ですよね。

好きな子の名前なら、恋するジェダイとしては100回くらい問題なく書いていただきたいところですけれども、無機質な数字だとイヤですからね。

1000とかになったら、やる気なくしますし、10000になったら、会社辞めますって。

100000超えたらジェダイもやめる。

そのくらいの苦行になってくるわけです。

でも、さっき決めたルール(一つ前の数に1を足した数を表示する)の結果として書いておくと、どうなるかといいますと、

それを10回やりなさいって言ってたのを、100回やりなさいって一箇所だけ書き換えるだけで、100になる。

1000にも、10000にもなる。

ということ。

プログラマはこういう風になったときでも便利だということを想定して、物事を考えてるわけですよ。

「おっ!プログラマって、なんかやるじゃん!」って思っていただけました?少しはプログラマのこと、見直してくださいました?

まあ、こんな感じなわけですよね。

で、これがですよ。

ちょっと問題が変わるとまたややこしい。

「スターウォーズのキャラを10人表示させなさい」なんて、なんとも楽しい問題になったりする。

そうすると、

レイヤ、ハンソロ、チューバッカ、ルーク、アナキン、アミダラ、クワイガン、オビワン、R2D2、C3PO

って感じで、普通は書くわけですね。

で、プログラマにこれをやらせても、やっぱり、あなたと同じように書くわけです。

何らかのルールを見つけるわけではなく。

こういう、適当につけられた名前みたいなものには、決まったルールで表せるような法則を見出すのが厳しいから。

プログラマは、これも判断しているわけです。

つまり。

どんなルールで表したらいいのか? そもそも、なんらかのルールを当てはめられるような法則がそこにあるのかどうか?

プログラマが、あのメガネの奥の鋭い目で虎視眈々と狙っているのは、こういうルールをみつけてやろう、ルールがあるかどうかを見極めてやろうというわけなんですよ。

そのうち、街中で数字の並びを見たら、「フィボナッチ数列なんじゃないのか?」とダ・ヴィンチ・コードのように疑ってみたり、

ちょっとした傷を見て、「これは釣り糸が引っかかって出来た必然的な傷なんじゃないのか?」と、コナン君みたいに殺人事件を疑ってみたり、

スーパーで5番レジに並んだら、「俺の誕生日を誕生月と足し、誕生年の1の位の数で割ると5。だから、今、5番レジに並んでいるのは必然なんだ!」とか、

勝手な法則や屁理屈ともいえる様な必然性を無理矢理にでもこじつけて考えるようになります。

それが、プログラマ脳なのです。

もちろん、プログラマ脳の役割は、これだけじゃないですけれどもね。

でも、世に言うところの綺麗なプログラムが書ける人っていうのは、大抵これが上手くできてる。

とても賢いルールで、綺麗にプログラムを組み立てるんですね。

だから、逆に言いますと、こういうルールを見つけるのが得意なら、プログラム書くのも結構得意じゃないかと思うんですよ。

でもね。

得意じゃない人も居るんですよ。

例えば僕とか。

もう、好きな子の名前とか書き始めたら、ドキドキしちゃってプログラムどころの話じゃなくなっちゃったりしますからね。

だから、こういう問題、得意じゃないんですよ。

まあ、そんなんでも、何とか仕事やってるわけです。

だから、あなたもきっと大丈夫。

 

ということで、今回は、プログラマが何を考えてるのか?という一端に触れていただきましたけれども、

これ、実際にプログラムを組み始めちゃうと誰でも自然にできてることだったり、

プログラミング言語のほうで枠組みを勝手に用意してくれちゃってたりすることもある話なので、

あまり深く考えずに、今はリラックスして、好きな子の笑顔でも頭に思い描きながら、楽しく日々を過ごしてくださいませ。

ということで、また次回。

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 3件のコメント
#1   2009-03-24 22:41:55
>「スターウォーズのキャラを10人表示させなさい」
これをベタ打ちでよしとするのはちょっとなぁ・・・

ま、例ですしね。
#2   2009-03-25 13:22:18
ジュダイ・スクール 
プログラミング・クラス 
テキスト ”第一単元 まとめ問題”より。

1."Hello world"を印字せよ。
2.1-100までの乱数列をスペース区切りで印字せよ。
3.入力文した文を印字せよ。
4.1.-3.までに習得した知識を元に、フォースの訓練に応用できるプログラアムを作成しなさい。
#3 ベイダー卿   2009-03-31 13:10:02
#1さん
あ、確かに!
ジェダイなのでフォースでやる!っという手もありましたね。いやぁ、不覚です。

#2さん
おぉ、素晴らしいテキスト!
こういうテキストをどこの大学や専門学校でも使ってくれたら、プログラマーもきっとたくさん増えますよね。
やっぱり、勉強は楽しくないとって僕も本当に思います。
  • 新着記事
  • 特集
  • ブログ