浜村拓夫(・∀・)作品集

頭の中にあるイメージを表現できるデザイン力が欲しいです(><)

プログラムはこうして作られる

プログラミング教育の教材の作り方について、参考になる本がありました。

 

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう

 

 

ボリュームが約500ページもある本だったので、これ小学生向けの本じゃないよな~。

・読者対象 → 中学生向けか、小学校高学年ぐらいなら読めるかな?

 

スクラッチ等でタイルプログラミングをやった後、文字でプログラミングを始めるときの導入方法として、本書のような説明方法もありかな?

 

hamamuratakuo.hatenablog.com

 

本書の特徴は、こんなかんじでしょうか?

・プログラミングパラダイム:古典的な「手続き型」を採用

・コンピューター(電子計算機)の仕組みを「チューリングマシン」で説明

C言語を日本語化したような「Sunaba」というプログラミング言語を用意

ポインターでメモリを直接操作する作法で、ハードに近い低級言語にも親しめる

・簡単なゲームの制作を通じて、構造化プログラミングを理解する

・本書は、実用言語(JavaScript)への架け橋になる役目を果たす

 

プログラミングの学び方は、いろいろなアプローチがありますね。

 

hamamuratakuo.hatenablog.com

 

●目次

Chapter 0 この本は誰に何を提供するか

 0.1 これまでの教え方が持つ三つの問題

  0.1.1 要素がバラバラ
  0.1.2 プロ向けの道具がもたらす挫折
  0.1.3 できなくても仕方ないと思われている

 0.2 この本は何が違うか
  0.2.1 一つのプログラムを最初から最後まで作る
  0.2.2 専用の道具を用意する
  0.2.3 本当に初めての人を対象にする

 0.3 では、始めよう!

 

目次

 

Chapter 1 プログラム作りを始める前に

 1.1 あのゲームを作るためにはどうしたらいいか

  1.1.1 あのゲームに必要なプログラム技術とは何か
  1.1.2 あのゲームはどんなものか
  1.1.3 プログラムとは何なのか
  1.1.4 この奇妙な文章は何なのか
  1.1.5 君の目標はどのくらいの高さにあるのか

 1.2 どこから手をつけるか
  1.2.1 プログラミング言語の学び方
  1.2.2 どこから作り始めるか
  1.2.3 何か手のつけやすい要素を抜き出せないか

 1.3 この章で伝えたかったこと

 

Chapter 2 メモリに触れてみる~四角を描く~

 2.1 描いたプログラムを動かす

 2.2 四角を描く
  2.2.1 四角を描くための最低限のルール
  2.2.2 この一行は何を意味しているのか
  2.2.3 メモリとは何か
  2.2.4 メモリをいじると点が出るのはなぜか
  2.2.5 コンピュータとはどういう機械か
  2.2.6 画面の点は何番のメモリにつながっているか
  2.2.7 メモリに覚えさせる数と色の関係

 2.3 好きな場所に四角を描く
  2.3.1 画面の真ん中に赤い四角を描く
  2.3.2 1足したり引いたりが面倒だ!
  2.3.3 なぜ0始まりか
  2.3.4 これであのゲームの絵を描けるか

 2.4 この章で伝えたかったこと

 

Chapter 3 くり返し~プログラムを短くする~

 3.1 行数を減らす
  3.1.1 一行で複数のメモリをいじりたい
  3.1.2 なぜくり返しか

 3.2 くり返しの使い方
  3.2.1 くり返しの文法
  3.2.2 何があれば四角を描くのに使えるか
  3.2.3 固定していない数
  3.2.4 1回実行して終わりにする
  3.2.5 2回実行して終わりにする
  3.2.6 16回実行して終わりにする
  3.2.7 好きな回数くり返す方法
  3.2.8 くり返す度に別の画素を塗るにはどうするか

 3.3 繰り返しで四角を描く
  3.3.1 だがそう簡単には行かない
  3.3.2 くり返しをくり返すにはどうするか
  3.3.3 このプログラムの何が悪いのか
  3.3.4 頭の中で動かす
  3.3.5 結果から考える
  3.3.6 思ったように動かない時にすべきこと
  3.3.7 くり返しで書くことに価値はあるか
  3.3.8 画面の真ん中に描くにはどうするか

 3.4 この章で伝えたかったこと

 

Chapter 4 プログラムの変形~四角をたくさん描く~

 4.1 くり返しで壁を描く
  4.1.1 四角を描くことをくり返す
  4.1.2 20個描く
  4.1.3 この調子で右の壁や底も描く
  4.1.4 注釈

 4.2 もっと短くしたい
  4.2.1 くり返しをくっつける
  4.2.2 まだやれることはないか
  4.2.3 底も含めてもっと短く書く方法はないか
  4.2.4 これはわかりやすいプログラムか

 4.3 この章で伝えたかったこと

 

Chapter 5 プログラムを分ける~四角を楽にたくさん描く~

 5.1 行を使い回すための、くり返し以外の手段
  5.1.1 参照が使えたとしたらどうなるか
  5.1.2 参照のわかりやすさ

 5.2 Sunabaにおける「参照」
  5.2.1 実行について
  5.2.2 部分プログラムが役立つために必要なもの
  5.2.3 参照する度に違う点を塗りたい

 5.3 部分プログラムを使って壁と底を描く
  5.3.1 左右も部分プログラムを使って描くには
  5.3.2 部分プログラムに価値はあるか

 5.4 もっとわかりやすく
  5.4.1 注釈はなぜ必要か
  5.4.2 「変な数」に注目する

 5.5 この章で伝えたかったこと

 

Chapter 6 動きのあるプログラム~四角を落とす~

 6.1 次は何をすべきか

 6.2 四角を落とす
  6.2.1 点を落としてみる
  6.2.2 四角を落としてみる
  6.2.3 間違いを直す
  6.2.4 問題を直す

 6.3 もっと速く塗りたい
  6.3.1 手加減をやめさせるには
  6.3.2 手加減とは何か
  6.3.3 手紙を送る

 6.4 ここまでを組み合わせる
  6.4.1 まずはくっつけるだけ
  6.4.2 壁と底を描く
  6.4.3 手加減をやめる
  6.4.4 落ちる四角を真ん中に

 6.5 この章で伝えたかったこと

 

Chapter 7 メモリに名前をつける~もっと日本語で~

 7.1 今のプログラムは何が悪いのか?
  7.1.1 どんな道具がほしいか
  7.1.2 番号を自分で決めたくない

 7.2 Sunabaでメモリに名前をつける
  7.2.1 とりあえず使ってみる
  7.2.2 メモリの番号を決めなくていい、ということ

 7.3 名前付きメモリのルール
  7.3.1 名前付きメモリが作られるのはいつか
  7.3.2 名前付きメモリは部分プログラムごと
  7.3.3 くり返しの外からは見えない

 7.4 この章で伝えたかったこと

 

Chapter 8 操作できるプログラム~四角を動かす~

 8.1 操作するとはどういうことか
  8.1.1 キーボードに反応する
  8.1.2 プログラムはどうやって外のことを知るか

 8.2 操作できるようにする
  8.2.1 押す暇がないし、押せてもわからない
  8.2.2 動いている間にキーを押したい
  8.2.3 点を動かしてみる
  8.2.4 手加減をオフに
  8.2.5 下以外でも動くように
  8.2.6 四角を動かす

 8.3 動きっぱなしを避ける
  8.3.1 まずは小さく始める
  8.3.2 動き続けないとはどういうことか
  8.3.3 前回押されていなければ、をどうするか
  8.3.4 ホワイトボードを見てどうするか決める
  8.3.5 式を思いつく
  8.3.6 上下左右に動けるようにする
  8.3.7 四角に戻そう

 8.4 落ちてくる四角を動かせるようにする
  8.4.1 壁と底を描いて、すぐできる改造をする
  8.4.2 落とす

 8.5 この章で伝えたかったこと

 

Chapter 9 「計算」の本当の意味~ゆっくり落とす~

 9.1 ゆっくり落とすということ
  9.1.1 毎回動かないプログラム
  9.1.2 前動いたら今回動かない
  9.1.3 割り算を使う
  9.1.4 もう一つの方法

 9.2 条件実行
  9.2.1 行を実行したりしなかったりする
  9.2.2 くり返しを1回で止める
  9.2.3 条件実行はおいしいか?

 9.3 Sunabaで条件実行
  9.3.1 前の例はどうなるか
  9.3.2 ゆっくり線を引く
  9.3.3 ここまでを組み合わせる
  9.3.4 押しっぱなしへの対処を整理する

 9.4 計算の本当の意味
  9.4.1 条件式が正しいということ
  9.4.2 <は一体何なのか
  9.4.3 Sunabaの計算記号
  9.4.4 では使ってみよう
  9.4.5 使ってみよう

 9.5 この章で伝えたかったこと

 

Chapter 10 メモリをまとめて使う~四角を積み上げる~

 10.1 当たるということ
  10.1.1 底に当たるとはどういうことか
  10.1.2 壁にも当ててみる
  10.1.3 次に起こることを考える

 10.2 メモリをかたまりで使う
  10.2.1 問題を変形する
  10.2.2 積もった順に覚えていく
  10.2.3 全てのマス目がどうなっているか覚える
  10.2.4 二つの方法を比べてみよう

 10.3 積み上げる
  10.3.1 どんなふうにやるかを整理する
  10.3.2 出発点
  10.3.3 床に当たったら、そこに積もらせる
  10.3.4 新しい四角を出す
  10.3.5 底以外にも積もらせる
  10.3.6 短くしたい
  10.3.7 壁と左右移動を復活させる
  10.3.8 プログラムを整理する
  10.3.9 積もらせる部分プログラム
  10.3.10 落ちる速さと押しっぱなし対応

 10.4 この章で伝えたかったこと

 

Chapter 11 もっとメモリに名前をつける~列を消す~

 11.1 とりあえず消すだけ
  11.1.1 おおまかな手順
  11.1.2 消すプログラム
  11.1.3 組み合わせる
  11.1.4 楽に確認したい
  11.1.5 落ちないことを確認しておく

 11.2 プログラムを良くする
  11.2.1 番号指定のメモリに名前がつけられない
  11.2.2 部分プログラムから部分プログラムを使う時
  11.2.3 部分プログラムに情報を伝える新しい方法
  11.2.4 入力を使ってみる
  11.2.5 入力で問題は解決するのか
  11.2.6 全体を入力する

 11.3 落とす
  11.3.1 一番簡単な例
  11.3.2 プログラムにする
  11.3.3 上にたくさん乗っているとどうなるか
  11.3.4 上に乗るもの全部を落とす
  11.3.5 もう一つのやり方
  11.3.6 どちらがいいか

 11.4 この章で伝えたかったこと

 

Chapter 12 全てを組み合わせる~四角を回す~

 12.1 2つに増やす
  12.1.1 落ちてくる四角は今どう表現されているか
  12.1.2 2個赤い四角を出す単純な方法

 12.2 回すとはどういうことか
  12.2.1 回転以外の要素を一旦忘れる
  12.2.2 結果から考える
  12.2.3 回転には4通りある
  12.2.4 もっと賢く書く

 12.3 回転を組み込む前に
  12.3.1 2つ並べるプログラムを思い出す
  12.3.2 小さくまとめていく
  12.3.3 動かせるかを調べる方法を考え直す
  12.3.4 別のやり方
  12.3.5 2マス分の位置を覚えるのをやめる
  12.3.6 もっと部分プログラムを活用したい
  12.3.7 部分プログラムの出力
  12.3.8 整理はもう十分だろう

 12.4 回転を組み込む
  12.4.1 回転が入ってくると変わること
  12.4.2 おおまかに書いてみる
  12.4.3 入力を追加する部分プログラム
  12.4.4 マス目の場所を計算する
  12.4.5 本当に回す

 12.5 ちゃんと動くのか?
  12.5.1 おかしい
  12.5.2 どのようにおかしいはずか
  12.5.3 直す

 12.6 この章で伝えたかったこと

 

Chapter 13 「表」という考え方~ゲームの完成~

 13.1 3マスづつ落とす
  13.1.1 2と3のプログラム上の違い
  13.1.2 3マスつなげる方法は1つではない
  13.1.3 プログラムにする
  13.1.4 2種類の形が出るようにする
  13.1.5 回転も入れる
  13.1.6 表という考え方
  13.1.7 表を前もって作っておく

 13.2 4マスづつ落とす
  13.2.1 3マスと4マスで何が違うか
  13.2.2 4マスになると種類はどれだけあるか
  13.2.3 代表のマスと、回す前の形を決める
  13.2.4 プログラムにしてみよう
  13.2.5 本当にこれでいいのか?
  13.2.6 手間を省くために
  13.2.7 あの表には何が書いてあるのか?
  13.2.8 回転に関する表を減らす
  13.2.9 回転に関する表をもっと減らす

 13.3 この章で伝えたかったこと

 

Chapter 14 砂場を出よう~始まりの終わり~

 14.1 ここまで使ってきた考え方
  14.1.1 結果から考える
  14.1.2 問いかけ方
  14.1.3 目標と手段
  14.1.4 複数の選択肢を用意しろ
  14.1.5 まとめよう

 14.2 さらに進むために
  14.2.1 もうちょっとSunabaで遊んでみる
  14.2.2 実用言語に移る

 14.3 実用言語の大変なところ
  14.3.1 使えるようにするのが大変
  14.3.2 動かすための手順
  14.3.3 文法が複雑
  14.3.4 絵や音を出すのが大変
  14.3.5 オブジェクト指向プログラミング
  14.3.6 英語っぽい必要がある
  14.3.7 メモリが見えない
  14.3.8 おすすめはJavaScript

 

終わりに、そして感謝

 

索引

 

●内容

概要をザックリとメモ。(自分用の備忘録)

 

(キャッチコピー)

プログラマの頭の中をのぞいてみよう

文法より先にプログラミングの思考法を覚えよう

 

(P.3)

君がプログラムを一度も作ったことがなく、コンピュータに関係した勉強をしたこともないと仮定する。そんな君に、私はプログラムを考え出す能力を身につけてもらいたいと思う。他人が作ったものに手を加えたり、他人が作ったものを寄せ集めたりする能力ではない。全てを自分の頭の中からひねり出し、作り上げる能力である。

 

(P.4) 0.1 これまでの教え方が持つ三つの問題

・個々の要素がバラバラに教えられ、組み立て方が教えられない

・いきなりプロ向けの道具を使うために、初期に挫折しやすい

・できない人がいても仕方ないと思われている

 

(P.7) 0.1.3 できなくても仕方ないと思われている

 もう一つ、さらに深刻な問題がある。

 できるようにならない人がいても仕方ない、と思われていることだ。

 プログラムの道で教師になったり本を書いたりするような人は、当然ながらプログラムが得意である。得意な人は、得意でない人のことが分からない。できないのは努力をしない本人が悪い、と思いがちだ。教え方が悪いとはなかなか思えない。

 もちろん、学ぶ側にも責任はある。努力は大抵足りない。才能の違いも大きい。しかし、それはそれだ。教える側はベストを尽くすべきである。私が知る範囲では、教える側がベストを尽くしているとは思えない。

 また、一見向いていないように見えても、本当に向いていないとは限らない。本人が苦手だと言っていても、本当に苦手とは限らない。私はそれを大学生や後輩に接して知った。

 人はいろいろな人生を歩んできており、躓き方はさまざまだ。「こんなことで!」と思うようなことで躓く。しかし、そこを越せれば、あとはどんどん伸びていくかもしれない。むしろ初期に他人が躓かないように些細なことでしっかりと躓いて、それを乗り越えてこそ、後の上達が早いということもある。

 「マイナスにマイナスを掛けてプラスになるのが納得行かない」と言う生徒は、むしろ数学に向いているかもしれない。それを「才能がない」「不器用」と言って否定するのは、犯罪と言っていい。私はそういう人を助けようと思う。

 

(P.7) 0.2 この本は何が違うか

・一つのプログラムを最初から最後まで作る

・専用に道具を用意する

・本当に初めてプログラムに触れる人を対象とする

 

(P.24) お手本を動かす方法

 プログラムを作るには「プログラミング言語」というものが必要だと前に言った。「あのゲーム」もまたプログラミング言語で書かれている。

 この言語は、名前をSunaba(砂場)と言う。名前の意味は、そのまま「砂場」だ。実用になるものは何一つ作れない。転んでも怪我をしない。砂しかないので想像力なしには何もできない。子供の一時期だけ夢中になり、大きくなれば忘れてしまう。そんな砂場のイメージがそのまま当てはまるプログラミング言語である。

 さて、とある事情から、Sunabaで書かれたプログラムは、専用のソフトウェアを使わないと動かすことができない。

 このソフトウェアは、インターネットからダウンロードして手に入れられるようにしてある。まずはwebブラウザで、

http://www.shuwasystem.co.jp/support/7980html/3925.html

にアクセスしてほしい。

 

(P.39) Chapter 1 プログラム作りを始める前に

1.3 この章で伝えたかったこと

・Sunabaのプログラムを動かす方法

・プログラムというのはとあるルールで書かれた「奇妙な文章」である

・目的達成のために、まず何から手をつけるか考えよう

 

(P.71) Chapter 2 メモリに触れてみる~四角を描く~

2.4 この章で伝えたかったこと

・プログラムとは、「どういう順番で」「どのメモリに」「どんな数を覚えさせるか」を書いたものである

・コンピュータは、プログラムに書かれた通りにメモリをいじることで、つながった外の機械を動かす機械である

・画面は画素でできており、絵を描くとは、たくさんの画素の色を設定することである

・プログラムでは番号を0から始めることが多い。便利だからだ

 

(P.108) Chapter 3 くり返し~プログラムを短くする~

3.4 この章で伝えたかったこと

・プログラムの実行で行われる置き換え。メモリが覚えている数に置き換えたり、計算したりする。

・計算式を書く方法。足し算と掛け算

・くり返しの使い方。メモリにくり返した回数を覚えておくのが基本

・計算式では()を使って順番を指定できる。それがないと足し算でも掛け算でも左から計算する

・思うように動かない時にどうすべきか

・くり返しは改造の手間も減らしてくれる

 

(P.136) Chapter 4 プログラムの変形~四角をたくさん描く~

4.3 この章で伝えたかったこと

・くり返しが何重にもなると、プログラムがややこしくなる

・注釈の書き方

・注釈は必要だが、なしで読みやすくできるならその方がいい。だが必要だ。

複数のくり返しは、くり返し回数が同じなら一つにできる。だが実行の順序は変わる

・同じ計算を何度かやる時は、前もってやっておいて使いまわせることがある

・くり返しの内側と外側を取り替えられることがある。だが実行の順序は変わる

・短ければいいというものではない。プログラムの書き方は手段にすぎない

 

(P.166) Chapter 5 プログラムを分ける~四角を楽にたくさん描く~

5.5 この章で伝えたかったこと

・部分プログラムという機能の使い方

・部分プログラムは、同じ行を使い回すもう一つの手段である「参照」を実現する

・部分プログラムは、プログラムを短くし、名前をつけてわかりやすくする

・注釈や「変な数」を見つけたら、その周りはもっと良くできる

・部分プログラムを作ったら、小さなプログラムを書いてその動きを確認しよう

 

(P.198) Chapter 6 動きのあるプログラム~四角を落とす~

6.5 この章で伝えたかったこと

・絵を動かすとは、絵を消して、違う位置に描くことである

・絵を消すとは、背景と同じ色で塗りつぶすことである

・部分プログラムの中と外で使うメモリの番号が重ならないように注意する

・手加減をやめる方法と、手加減のしくみ。お手紙の遅さ

 

(P.217) Chapter 7 メモリに名前をつける~もっと日本語で~

7.4 この章で伝えたかったこと

・名前付きメモリによってプログラムは書きやすく、読みやすくなる

・名前付きメモリによって、メモリの番号を気にする必要がなくなり、間違いも減る

・名前付きメモリによって、注釈に頼る所が減る

 

(P.248) Chapter 8 操作できるプログラム~四角を動かす~

8.5 この章で伝えたかったこと

・コンピュータの外から情報をもらうのにもメモリを使うこと

・上下左右キーが押されていることを知る方法

・操作できるプログラムは終わらないプログラムであり、そのために無限くり返しを使うこと

・簡単な論理でもコンピュータにわかる形にするにはかなりの置き換えがいること

・ほしい結果を得るために計算式を「でっちあげる」ということ

・「今押されたばかり」を知るための工夫

 

(P.282) Chapter 9 「計算」の本当の意味~ゆっくり落とす~

9.5 この章で伝えたかったこと

・速度を調節するには、移動量を変える方法だけでなく、移動頻度を変える方法もある

・Sunabaの割り算は、小数点以下切り捨てになる。それを利用して小数に近いこともできる

・条件実行と、それを楽に実現する便利機能である「なら」

・今まで条件と言っていたものが「計算」の一種であること

 

(P.328) Chapter 10 メモリをまとめて使う~四角を積み上げる~

10.4 この章で伝えたかったこと

・やり方が二つ以上思い浮かぶまで待ったほうがいい

・条件実行において、二つの条件のどちらかが正しければいい時には、足し算でつなぐ

・たくさんのメモリを使う場合は番号を計算で求める必要があり、番号指定で使うほかない

・結果から考える。結果が同じならやり方が不自然に見えてもいい

 

(P.371) Chapter 11 もっとメモリに名前をつける~列を消す~

11.4 この章で伝えたかったこと

・正しくできているか確認するのが面倒なら準備しよう

・部分プログラムへの入力という機能

・すでに作ったものを利用するか、最初から考え直すかを、どう決めるか

 

(P.429) Chapter 12 全てを組み合わせる~四角を回す~

12.6 この章で伝えたかったこと

・少しづつ加えていく方が進めやすい。例えばいきなり4マスにせず2マスにした

・相対位置という考え方

・部分プログラムの出力機能

・適当に書くと後で直す破目になるが、それは悪いことではない。ただし適当に書いたことを忘れないこと

・少しづつ先の展開を想像することに慣れていこう

 

(P.473) Chapter 13 「表」という考え方~ゲームの完成~

13.3 この章で伝えたかったこと

・今の状態と目標の差から、何をすべきか見当をつける考え方

・「表」という考え方

・面倒くさいと思ったらまず工夫

 

(P.484) Chapter 14 砂場を出よう~始まりの終わり~

14.3 実用言語の大変なところ

・使える状態にするのが大変。ソフトの選択やインストール、使い方の学習など

・書いたプログラムを動かす手順が複雑

・プログラムの文法が複雑で、覚えないといけないことが多い

・絵や音を出すことがSunabaほど簡単ではない

・「オブジェクト指向プログラミング」なるものが必要

・英語っぽくする必要に迫られる

 

(P.490) 14.3.8 おすすめはJavaScript

 さて、そういうわけで実用言語は大変なのだが、私が知る範囲で一つ選べと言われれば、JavaScriptを挙げよう。

 何と言っても、動かすための手間が小さい。ファイル名の終わりに「.html」とつけてさえあれば、メモ帳で書いて、ダブルクリックするだけだ。特別なソフトウェアは何一ついらない。

 そして、文法がシンプルだ。言語の機能が少ないから、覚えることが少ない。さらに、オブジェクト指向に慣れていなくても、それほど困らない。オブジェクト指向的な書き方は後から覚えて足せば済む。

 さらに、絵を出すのが楽だ。HTML5というものと一緒に使うのであれば、それほどの手間なく線を描いたり四角を描いたりできる。HTML5の使い方は一緒に勉強する必要があるとは言え、複雑なことをしないなら大した手間ではない。

 

(P.492)終わりに、そして感謝

 プログラム作りが特殊な技術とみなされている状況を、私はずっと理不尽だと思っていた。

 読み書きは当たり前だが、そうでない時代もあったし、今でもそうでない国がある。三次方程式を解ける人は万単位でいるが、何百年か前には門外不出の秘伝だったという。

 プログラム作りも、そういうものになってしまえばいい。まともなプログラムを書ける人間が掃いて捨てるほどいて、何の自慢にもならないような世界になればいい。なぜそうならないのかと、ずっと思ってきた。

 

 プログラムに向いていない人と向いている人の間には大きな違いがある。記憶力がいいとか、頭が回るとか、算数ができるとか、そういう単純な話ではない。考え方の違いであり、世界の見方の違いだ。優劣というよりは性格、あるいは個性の問題である。「向いた人は勝手にできるようになるし、向いていない人にはいくら教えても無駄」という意見は良く聞くが、性格の問題と考えればそれも納得できる、

 しかし、それで済ませていいのだろうか?何か手はないだろうか?

 ずっとそう思っていた。しかし、私の仕事は教育ではない。ゲーム作りである。何もしないまま時が過ぎた。

 

 そうしてしばらく経った2010年、九州大学の牛尼剛聡先生から、講義をやってくれないかというお話があった。

 これだ、と思った。

 私はSunabaを作り、授業に臨んだ。そして知った。教えても無駄だなんて、真赤な嘘だ。プロになるには程遠いレベルとはいえ、プログラムとは何か、どのように頭を使えばいいか、という根本を教えることは不可能ではない。

 2011年、2012年と講義を続け、私はこのやり方に効果があると確信した。もっと多くの人に試してもらおう。しかし、やはり私の仕事は教育ではない。ゲーム作りである。本を書くくらいならできるかとも思ったが、時間が取れずにまだ時が過ぎた。

 

 そうして2012年の夏、機会は訪れた。暇になったのである。そこで、「もう一度本を書いてもいいか」と当時上司だった熊谷美恵氏と佐井川師治氏に尋ねたところ、許して頂けた。

 

 そしてこの本は、さまざまな方の協力があったおかげで形になった。

 

 さて、この本が目的を達するかはまだわからない。完全に博打だ。初心者向けのプログラムの本など掃いて捨てるほどある。それらとは多少なりとも違うものを書いたつもりだが、私が壮大な勘違いをしている可能性は低くない。

 しかし、それならそれでいい。一つのアプローチが失敗とわかることは、それ自体成果である、また別の方法を試そう。

 

●著者略歴

平山 尚(ひらやま たかし)

1977年北海道生まれ。

京都大学大学院工学研究科にて分子生物学を専攻していたが、実験の下手さで将来に不安を抱き、2002年に株式会社セガに入社。

 

電脳戦機バーチャロンマーズ』(PS2)ではエフェクトやデモ再生エンジン、『パワースマッシュ 3』(アーケード、PS3)と『SEGA CARD-GEN MLB』(アーケード)では描画エンジン、『パワースマッシュ 4』(PS3、360、WiiVITA)では下層のライブラリを主に担当。

 

2008年に『ゲームプログラマになる前に覚えておきたい技術』を執筆。

 

ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術

 

 

twitter.com

 

著者サイト → プログラミング言語Sunaba

 

●レビュー

Amazon.co.jp: プログラムはこうして作られるプログラマの頭の中をのぞいてみようの nekoさんのレビュー

本書は一流のプログラマが書いたテトリスのプログラムを勉強する本ではなく,プログラマテトリスというゲームを作るにあたって,どのような思考をたどる事で各機能を再現して完成形まで積み上げていくのか,その思考の全過程をスキップすることなく記述している本です.

 

本書の最大のオリジナリティは,この思考過程の列挙にあります.他書では省略して書かれてしまう思考過程を,本書では時には冗長に感じてしまうほどに繰り返し繰り返し記述しています.その余りにも親切すぎる文章からは著者の人間味が溢れ出てて,なんだかちょっと微笑んでしまいます.上級者にとっては当然過ぎて省いてしまう思考過程の記述が,初学者にとって大きな障害となるということは,数学を例に考えて頂ければどなたにも分かるのではないでしょうか.プログラマの思考をトレースできるという意味で本書は現在唯一無二で,凄い本が出たなぁと感じています.(数学でも本書のような本が出てくれれば助かるのですが)

 

この本では実用的なプログラミング言語アルゴリズムは学ぶことは出来ませんが,初級プログラマが中級のプログラマを目指す上で必要な思考方法そのものをトレーニングすることが出来ます.

 

本書の特徴は、思考過程をトレースする教授方法なんですね。

 

●改良

本書を参考にして教材を作る場合、知識を吸収しやすい形にして、提供できたら良いと思いました。

 

hamamuratakuo.hatenablog.com

 

・ボリュームが500ページもある本だと、読むのが大変?

・「動く教科書」(動画)や、「聴く教科書」(オーディオブック)にしたら、学びやすい?

 

動画やオーディオブックの作成に必要なスキルやノウハウを身につけたいです。

(CGアニメ…なんとかなんねーかな~)

 

 

 

Daniele Vidal / LES CHAMPS-ELYSEES (オー・シャンゼリゼ)