わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

設計の手順

基本

  1. 目標,すなわちどのようにアウトプットするのかを,認識します.
  2. インプットand/orコンテキストを把握します.
  3. アウトプットに近い情報から作ります.
  4. 導入部を作ります.そして中間は順不同で作り,導入からアウトプットまでを,とりあえずつなげてみます.
  5. 通しで確認します.その結果をもとに,全体や細部を変更します.
  6. 目標に合っているか,通しで確認します.さらに全体や細部を調整します.
  7. 自分が納得できる状態に至るか,時間が来たら,作業終了です.

追加

  • 紙によるメモや記録
  • アドバイスをしてくれる人
  • 情熱をこめて作ったあとで,客観的に見直せるようになるための,冷却期間
  • 終わってからの反省会

応用例1: プレゼン

  1. 発表に関する情報を確認します.具体的には,発表する場所,年月日,予定開始時刻,持ち時間です.複数人が発表するなら,自分が何番目なのか,他にどんな人が発表するかも押さえておきたいものです.
  2. 聞き手を想定します.自分の発表で,何を知ってもらいたいかを決めます.さらに,自分の発表を始める前に,聞き手が何を知っていて何を知っていないかを洗い出します.
  3. PowerPointを開きます.「アウトライン」に切り替え,(全体の)タイトルと,各スライドのタイトルを並べます.「何を知ってもらいたいか」を意識し,タイトルの並びや,一つ一つの日本語表現をチェックします.
  4. 各スライドに,話すための情報を乗せていきます.使えそうな素材を調査し,図・写真・表などを入れます*1
  5. 全体ができたところで,通しでしゃべってみます.話しにくいところ,矛盾する箇所,重複する内容などが見つかれば,修正します.
  6. 改めて「聞き手が何を知っている/いないか」「聞き手に何を知ってもらいたいか」「持ち時間」を確認します.その観点で,不要な説明・図・写真・表を取り除きます.逆に,必要と感じたらスライドを追加して,情報を増やします.
  7. 通しでしゃべってみます.その際,スライド単位で時間を計ります*2.他と比べて時間の長いスライドは,スライドの内容and/or話すことを減らすか,スライドを分割します.修正したスライドだけでしゃべってみて,時間を計ります.
  8. リハーサルをします.実際の発表と同じPC,同じプレゼンマウスを使用します.ここでは通しの時間を計ります.しゃべったあとで,要修正箇所を紙に書き出し,修正します.
  9. 質問対策を考えます*3
  10. 前日の夜はぐっすりと眠り,本番へ!

応用例2: プログラミング

自由にプログラムを作るというよりは,授業など,かなりの制約のもとで書くことを想定し,手順を並べてみます.言語はCです.

  1. 課題文をよく読みます.テキストエディタを開いて,課題文*4全文をコピー&ペーストします.1行開けて,課題文の中の重要な語句を抜き出します(語句ごとに,改行します).
  2. 出力フォーマットを把握します.複数行からなる少々複雑なものは,やはりダウンロードして,単一のファイル(例えばoutput1.txtという名前に)としておきます.
  3. 入力方式を理解します.まず,どのようにして入力を獲得するか*5を知り,それに基づいて,入力例and/or実行コマンド例を書いたファイルを作ります.
  4. コーディングに取りかかります.まずは出力用関数とmain関数を定義します.
    • mainは,出力用関数の呼び出しとreturn 0;だけです.
    • 出力用関数は,printfまたはfprintfで並べて,先ほどの出力ファイルの内容をアウトプットするだけとします.
    • ソースファイルの先頭に,ファイル名・機能(目的)・作成者情報などをコメントとして書きます.
    • コンパイル・実行して,期待通りの出力になることを確認します.
  5. 入力用関数(入力を獲得するための関数)を定義します.そしてそれを,main関数から呼び出します*6.さしあたり,入力を受け取ったことが分かるような出力を書いておきます.コンパイル・実行して,入力に応じて期待通りの値を取得していることを確認します.
  6. 「課題文の中の重要な語句」を見直します.未知語は,書籍やWebで調査します.コーディングにおいてどのように取り入れればよいかを考え,実際にコードにします.ここでは,一つ以上の関数を新たに定義することになります.
  7. 関数をつなぎ合わせて(入力用・出力用関数の修正もしながら),「とりあえず動くプログラム」を完成させます.
  8. 動かしてみます.
    • まず,課題文の中にある入力例に対して,出力例の通りに出力することを確認します.違っていたら,期待する動作になるまで,デバッグします.
    • 少し入力を変えてみて,期待する出力になるか確認します.違っていたら,ここでもデバッグなのですが,入出力のペアが妥当なのかも検討するといいでしょう.
  9. ファイルを通して眺めます.コードが汚ければ,整理(リファクタリング)します*7
    • 適切なインデントにします.
    • グローバル変数を使って,関数間で値の受け渡しをしていたら,それぞれ,どこかの関数内に入れ,引数・戻り値を介してやりとりさせます.
    • 各関数にコメントをつけます.「1関数・1目的」*8とし,そうなっていなければ分割します.
    • 引数が多いときは,配列または構造体で受け渡しをしたほうがいいか,検討します.
    • 構造体名が長すぎれば,typedefを書き,テキストエディタの機能を使って一括置換します.
    • 関数プロトタイプを書いていなかったら,書きます.引数は,型名だけでなく,変数名も書きます*9
  10. ファイルを通しで見直します.
    • 呼び出しているライブラリ関数を一つ一つ点検し,課題で「使用してはならない」と書かれていれば,別のに変更します.対応するヘッダファイルをインクルードしていなかったら,します.
    • 課題で「〜を使用せよ」と書かれているのに使用していなければ,どこで使用すればよいかを検討してから,コードにします.
    • 再帰呼び出しや,静的変数を使用しているなら,その妥当性を確認します.それでもなお必要と判断したら,関数のコメントにそのことを書いておきます.
    • main関数が複雑になっていたら,「入力」「処理」「出力」の3つになるよう,呼び出し方(合わせて関数の定義)を再構成します.
  11. 再度いくつか実行し,課題文の中にある入力例に対して,出力例の通りに出力すること,また少し入力を変えてみて,期待する出力になることを,確認します.
  12. 入出力の仕様,コードの内容の両面で,これ以上改善のしようがないとなれば,提出します.

*1:Web上の情報を入れるときは,URLを,出典としてスライド上に書くか,(PowerPoint内の)ノートに記しておきます.

*2:zjsがおすすめです.ただし,PowerPointとzjsの両方を,1台のPCで操作するのは難しいので,2台使うか,スライドを6upカラーで印刷して見て話し,zjsを操作するといいでしょう.…主客転倒だなあ.

*3:発表のみで,質問の時間がない場合でも,考える時間をとりたいものです.「何は話さないか」が確認できるからです.

*4:Web上にあるものとします.

*5:標準入力=キーボードから/コマンドラインで/ファイルからの3通りが,基本でしょう.

*6:出力関数の呼び出しは,コメントにしておきます.

*7:一つ修正するたびに,コンパイル・実行をしていきたいものです.

*8:一つの関数が,複数の箇所から呼び出されるのは,特に問題ありません.

*9:仮引数と同じでかまいません.というか,関数定義のコードをコピー&ペーストして,ペースト先の行末にセミコロンを置くだけで,関数プロトタイプとなります.関数定義における「{」は,関数定義行に書くのではなく,その直後に独立した行として書くほうが,いいですね.強制はしませんが.