プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

それは最高に楽しいパズルゲーム

難しそう? いえいえ,決してそんなことはありません。最初はパソコン1台さえあれば十分です。見よう見まねで手を動かし,プログラムを作ってみましょう。そのプログラムって,ちゃんと動くのかな?…大丈夫ですって! きっと,プログラミングの面白みが味わえます。

http://itpro.nikkeibp.co.jp/article/COLUMN/20080818/312876/:title:


プログラミング。それは物事の本質を見極め、厳密な定義と手続きに置き換えていく作業。


なんか哲学的ですけど、プログラミングを一言で言うとそんな感じになるかと思います。ふだん無意識にやっていること、何となく分かっているけど「それって何?」って聞かれると答えに困ること。それを数学の証明問題のように細かく分析して、答えが導かれるようにすることがプログラミングなんです。


一見複雑そうに見えるコンピュータですが、出来ることは驚くほど単純です。基本的には:

  • メモリから取り出す
  • 何らかの演算をする
  • 結果をメモリに保存する

といったことしか出来ません。なので、人間がコンピュータを使って何か仕事を出来るようにするためには、それを人間はどうやって行っているのか考え、単純化しなくてはいけないんですね。一見面倒そうですが、慣れるとパズルのようでとても面白いんですよ。

分かりにくいですね。例をあげましょう


「数字の書いたカードが何枚かあります。これを数字の小さい順に並べ替えてください」


人間ならどうでしょう。人によってやり方は違うと思いますが、私ならこんな感じにするでしょうか。

  • テーブルなど適当な広い場所を見つける
  • カードを一枚引いてテーブルに置く
  • 次のカードを引いて、前のカードより小さい数字は左へ、大きい数字が右へ来るようにカードを並べる
  • カードがなくなるまで上記を繰り返す。

カード枚数が少なければもう少し効率よく出来るでしょう。あるいは枚数が多ければ、ある程度グループに分けるといったことをするかも。いずれにしても、並べ替えは感覚的に行われることが多いと思います。

ではコンピュータはどうでしょう


前述のようにコンピュータは、とても単純な作業しか出来ません。同時に複数の数値を比べたり、全体を見通して一番小さな数値を見つける、といった作業は苦手です。


また、メモリは一直線上に並べられた箱のようなもので、箱そのものを動かしたり並べ替えたりすることは出来ません。原稿用紙のマスメや将棋盤をイメージしてもらえると分かりやすいでしょうか。


並べ替えをコンピュータに例えれば、こんな制限がつくことになるでしょう。

  • カードは一列に並べられた箱の中に一枚ずつ入れる
  • 同時に見ることが出来るカードは2枚まで
  • 一枚ずつ動かすこと

なんかパズルみたいですね。そう、プログラミングはパズルなんです。問題も条件も解き方も様々なので、飽きることがありません。何せ飽きっぽい私がこんなに続いてることが面白い証拠。:)

実際のやり方は紹介しません(笑)


ここまで引っ張っておいて、すいません。:)


と言うのも、この記事で伝えたかったのはプログラミングの楽しさの本質だからなんです。プログラムというと、なんか訳の分からない英数字や記号を並べてるイメージがないですか!?いや、確かに実際そうなんですけど、プログラムを書く作業*1はプログラミングの一部にしかすぎないんです。本当に楽しいのは、人間のしたいことをいかにコンピュータの動作に変換するかという、その過程なんですね。


うーん、文字じゃ面白さは伝わらないなあ。もしもプログラミングに興味があるなら、ぜひ引用先の記事を参考にやってみることをオススメします(他力本願)それは誰もが楽しいと思えることではないかもしれません。しかし、ハマる人にはハマるゲーム。yasuho的には最高に楽しいパズルゲーム




大事なことはプログラミングを楽しめるかどうか、だけだと思う - yasuhoの隠れ家

*1:コーディングと言います