2013年1月26日土曜日

進捗管理の心がけ

「間に合いそうですか」って確認は意味が無い

何%進んでいるかを自己申告させることには意味が無い

あるのは成果物ができたかどうかだけ

完成はもうちょっと先でも、コストの投入は計測できる
例えば材料の費消とか

一番遅れがちなのは「着手」
中間生成物でいいので「着手ポイント」をみる

先行タスクの完了は後続タスクの着手をもって完了とする


Webフレームワークがカバーすべきこと


まず素のPHP・CGIで作ろうと思えば作れる

それで困らないら問題はない。特にPHPに至っては、クリエストリングのパースやセッションやファイルアップロードに関する関数が充実しており、フレームワークがないと困る度合いが他言語に比べると少ない。

エントリポイントの一元化

ほとんどの場合、画面全体で共通の処理が走る。例えばデータベースの接続や、必要なライブラリのrequire。特に開発環境と本番環境での設定の切り替えをここでやっとくといいエラーの画面出力を、開発環境と本番環境でON/OFFを切り替えたりとかね。

イグジットポイントの一元化

途中までは同じであっても、最後には必ず通って欲しい処理というのがある。
例えば、携帯サイトでは、機種に応じて文字コードや絵文字の変換処理が入る。さすがに最近はそこまでするケースが減ってきた。ログの出力とかはここで共通でやっておくといい。

controllerとviewの組みあわせ

「どう機能して欲しいか?」「どんな画面を見せたいか」というのが、controllerとviewの分離ということ。
これが機能するのは、こういう画面遷移。

  •  フォームに入力→送信
  •  エラーがあれば、元のフォームの画面、エラーがなければ確認画面
  •  確認画面から、更新でデータ更新、戻るボタンで元のフォーム
この画面遷移で、同じ入力フォームに「入力を受け付ける」「エラーを表示させながら再度入力を受け付ける」「確認画面から戻りながら再度入力を受け付ける」という3つのルートがある。コントローラーはそのルートを別扱いで判断をするが、ユーザから見える画面はほぼ同じものなのだ。

さらに、PCとスマートフォンの両方をカバーするようなプログラムになると、同じURLで別のHTMLを表示するようになる。この場合はcontrollerが同じでviewが違うというケース。

これがフレームワークで最も必要な機能。

処理の分岐で別画面を表示するときに、リダイレクトを使うという手もあるが、リダイレクトはGETリクエストなので、ユーザが入力したPOSTデータを引き継げない。さらにhttpヘッダの出力で画面を切り替えるために、うっかりデバッグ用の出力をすると機能しない。

モデルの抽象化

モデルという概念がある。大概の場合には,データベースに対する接続を抽象化したものである。モデルの処理は、必ずしもデータベースに実在するものでなくともよく、
 「従業員クラス」の「男女」メソッドは、DB上は、1,2という数字で入っているものを、メソッドでは「男、女」と返すみたいなことをしてもいい。
 ただ、そこまで使いこなしている人も一部で、単にデータベースの接続便利ツールとして使ってる人も多い。

「このテーブルを更新するときには、かならずこのテーブルも更新しとく」みたいなデータの整合性も、モデルが担保しておくといいが、その処理をコントローラーに書いちゃう人もいる。「必ずやってほしいこと」はモデルのクラスでカプセル化して欲しいが、このあたりは保守性の問題であって、ロジックの大きな違いにはならない。

まとめ

ということで、Webアプリケーションフレームワークでいろいろありがたいことはあるが、その価値のかなりの部分をcontrollerとviewの分離が教授しているということ。逆にcontrollerとviewが分離できないフレームワークは、結構しんどい。

2013年1月5日土曜日

授業をクイズ番組にする

学生の時に塾講師をしていた。個人で経営されている塾で、割と自由にやらせてもらえた。

最初は普通に授業をしていたのだが、中学生にもなるとなめてかかってくる。宿題もやってこない。宿題をやってこない子には居残りをさせいてたが、敵もさるもので、適当な答えを埋めて「やってきたふり」をする。

ゴリゴリの進学塾ではないので、中くらいの成績から高校進学から悩んでいる子まで来ていた。

基本的には勉強をする気はない。ちょうど稲中が全盛期だったので、キャッキャしながら休憩時間に卓球をしていた。私も変に卓球は上達した。

そんな塾とはいえ、親御さんは成績アップを願ってお金を払ってくれている。成績の下降を食い止めなくちゃいけない。

最初は宿題の不正解数に応じた居残りをやらせていた。やってこなかった場合も、適当な答えを書いていた場合も居残り対象。

しかしその居残り勉強も、6割の正答率でよしとする子が結構いた。逆に、中くらいの塾にきてる賢い奴ほど、プライドが高いので、知らない問題に取り組まない。6割の理解でよしとしてしまう。因数分解で解ける方程式はやるけど、解の公式は彼の美学に反するのでやらない。共感はできるが、それではギリギリ合格しない。

その対応策として、居残り勉強も、連続で3問正解しないと終われないようにした。途中からは居残りではなく全員が参加にした。要は小テストなのだが、クイズ番組のフォーマットにしている。


  1. 黒板に全員の名前を書いて、ポイントを書く
  2. 一問出す。1分まつ(それくらいの小さな問題)
  3. 10秒前からコールする
  4. 回答を発表する
  5. 正解するとポイントが上がり、間違うとゼロに戻る
  6. 1分間の復習タイム
この繰り返しで、3問連続正解すると、一抜けになる。一抜けのファンファーレはアメリカ横断ウルトラクイズ。

こうすることでいろいろ効果が出てくる。
  1. 見直しをするようになった
    • 「見直し」は苦痛でしかない。その気持は分かる。しかしながら、「一問でも間違うとリセット」なら、見直す方が得なのだ
  2. 途中計算を書くようになった
    • 賢い奴ほど途中の計算を書かない。ただそれだと見直しがしんどい。だから途中計算を書いた方が有利になる
  3. 苦手を放置しなくなる
    • 2問までとんとんといくと、3問目は彼が苦手としている分野を出す。彼がそこで問題を捨てたとしても、次の3問目も同じ問題をだす。本人は気付いてないだろうが、こちらは全員の苦手を知ってる。言われなくても、このパターンを克服しないとダメだなってことに気付く。
    • 回答を出した後の復習タイム(と言っても1分で十分だが)で正しい解き方を覚えてもらう。
  4. 下克上が起こる
    • 子供達にもヒエラルキーがある。成績の序列はみんな分かってる。ただ、連続三問方式は、ケアレスミスも命取りになる。低位安定していたコツコツタイプがトップに立つこともある。天才タイプは負けると悔しい。中学生と言えど、「賢くありたい」という気持はあるのだ。かけっこが楽しいのと同様に、テストを通じて一番を決めるのは楽しい。
  5. 緊張する
    • 普通、塾でまず緊張はしないのだが、一問ずつ時間制限があって、一問ずつ答え合わせをするので、数分ごとに結構な緊張感が出てくる。それを乗り越えて、小さく勝ち負けが決まり、ランキングがダイナミックに変わる。賢くてなめてる奴も、賢くなくて諦めている奴も、そこではプライドをテーブルの上にBETしているのだ。
そんな感じ。

まとめると、「頻繁なフィードバック」が超大事。ゲームで言えば、プレーヤーが死ぬ場面。スポーツで言えば勝ち負け。学習においても「僕って賢いの?」という問いに頻繁に答えることができる場作りが大事。