わさっきhb

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

いける学生・あかん学生2012

いきなりですが問題です.

次の各文について,適切な行動には○,不適切な行動には×を答えなさい.

  • 一つのファイルにつき一つのemacsコマンドを起動する.
  • インデントの空白を律儀に打ち込む.
  • 1行以上の不要なコードは,BackSpace長押しで削除する.
  • コンパイルエラーが大量に出たら,エラーメッセージの先頭から読み,順にバグ退治をする.
  • プログラム作成で困っているとき,先生から「紙に書いてみるといいよ」と言われ,プログラムコードを手書きする.
  • プログラミングについて友人から相談を受けたとき,会話を通じて自分の考えの正しさを確認し,ときには自分の誤解を修正する.

「授業は本日でおしまいです.これからのみなさんのプログラミング技能向上を願って,スクリーンに出した,6つの文を贈りたいと思います.
といっても,すべてその通りにしなさいというものではありません.上に,問題文を書いておきましたが,プログラマとして適切な行動,不適切な行動があります.
順に見ていきましょう.まずは,『一つのファイルにつき一つのemacsコマンドを起動する』です.これですが…×です.一つのemacs*1で,複数のファイルを切り替えながら編集することを,習慣としてほしいものです.
まず最初に,引数なしで,emacsを起動します*2.メニューから,マウス操作でかまいません.ターミナルから実行するときは,最後に&を忘れずに.そしてログアウトまで,そのemacsは終了させないようにしましょう.
別のファイルを開きたいときは,C-x C-fです.emacsのメニューからでもできます.
2つのファイルを別々のウィンドウで見たいときは,まずC-x 5 2とします.これで,emacsの用語を使うと,新しいフレームが作られます.とはいえ2つとも同じファイル,同じ内容ですので,一方を別のにします.新規に開くなら,C-x C-fですし,すでに開いているファイルを見るなら,C-x C-bとすれば,一覧が出ますので,マウス操作で選択しましょう.
2番目の文に,行きましょう…『インデントの空白を律儀に打ち込む』です.これも,×ですね.字下げの空白は,emacsほかテキストエディタに任せましょう
なお,何かあってインデントのなされていない,もしくはおかしいファイルを,emacsで編集するとなったら,おかしな行のところでTabキーを押すと,ちゃんと字下げしてくれます.カーソルキーの下,Tab,下,Tab,…の繰り返しで,1行1行,インデントすることができます.まあそうなると,領域選択してコマンド一発*3でインデントさせるほうがいいのですけどね.
3番目は…『1行以上の不要なコードは,BackSpace長押しで削除する』ですが,どうでしょうかみなさん.はい,これも×です.こういうのは,領域を選択してからカット,emacsだとC-wです.
長いコードはですね,そこに書くのは間違いだけれど,あとで使いたいということがよくあります.BackSpace長押しで削除すると,その再利用ができなくなるのです
と,ここまで全部,×でした.4番目の文はどうでしょうか.コンパイルエラーが大量に出たら,エラーメッセージの先頭から読み,順にバグ退治をする』.ちょっと長くなりましたが,これは,○です.エラーがどこの行にあるか,事前に分かっている場合を除き,先頭から一つ一つというのが,コンパイルエラーの対応の基本です.
例えばですね.ちゃんと動くCのコードから,mainの次の行の「{」を除くと,たったこれだけで,コンパイルエラーがわんさと出てきます.
デバッグの勘所を,押さえておきます.まず,ターミナル上でマウスのホイールを使うと,出力がさかのぼれます.そして…ここにあるように『ファイル名:行番号』に着目しましょう.あともう一つあって,その行番号だけでなく,一つ前の行やプログラムコードにも注意して,原因を探すことです.
コンパイルエラーで出る何行目は,『その行の中に間違いがある』ではなく『コンパイラがその行まで解析したんだけど,うまくいかなくなった』という意味であることも,合わせて知っておきましょう.
5番目です.『プログラム作成で困っているとき,先生から「紙に書いてみるといいよ」と言われ,プログラムコードを手書きする』は…×です.何が良くないのかですが,先生から言われて行動する,というところではありません.『プログラムコードを手書きする』ところです.
紙に書くのは,プログラムコードにするための方針です*4
もっと具体的に,何を書けばいいのかといいますと,一つは『データ構造』です.プログラムの内部でどのような値を持たせるかです.配列や構造体にするほうが,いいかもしれませんね.
もう一つあって,プログラム実行による『値の変化』です.処理をしていきながら,もともとの値がこうこうこうなって,最終的にはこんな値にしたい,ということを,目に見える形にします.数値を丸・四角といった図形に入れ,矢印でその移り変わりを書くのが一般的ですし,私の授業でも,そのようにスライドでお見せしてきたわけです.
6番目,最後の項目を見ましょう.『プログラミングについて友人から相談を受けたとき,会話を通じて自分の考えの正しさを確認し,ときには自分の誤解を修正する』…どうでしょうか.何かあるなと思いましたか.
○か×かで言うと,こちらの用意している解答は,○です.プログラミングについて,相談を受けるというのは,素晴らしいことです.あなたがアテにされているわけです.あなたの中に何かを,持っているのですね.
で,会話を通じて,あなたの持つ何か,すなわち知識や考え方を,相手に伝わるよう答えながら,良きにつけ悪しきにつけ,あなたの内面を,整備していきましょう.それを言葉で表したのが,『会話を通じて自分の考えの正しさを確認し,ときには自分の誤解を修正する』です.
それにしても最後の文は,後味が悪いのです.そんなこと,ないですか?
実はこの文には,試験の○×に限らない『問題解決』についてのメッセージを含ませています.
何かというと,×,ダメ,それをやってはいけないというのは,比較的簡単に分かるのです.しかし,○,おっけー,そのやり方で行こうというのは,ある限定された状況,言い換えると適用条件のもとでの○なのです
今回はCのプログラミング,またemacsを用いたソースファイルの作成や編集を,前提としました.他のプログラミング環境,あるいは共同作業のワークスペースのもとで,活動するときには,また別の『○の集合』があると思ってください.そして『○の集合』を頭の中に作るのが,新人と言われる人の活動であり,『○の集合』を新たに構築し,みんなと共有しようというのが,リーダーの行動となることも,知っておいて損はないでしょう」

*1:Emacs」と「emacs」の使い分けにはこだわらず,本日のエントリは「emacs」で統一します.

*2:実際の授業でも,「問題文のスクリーン表示」と「emacs・ターミナルによる実演」を行い,その都度,画面を切り替えていました.

*3:C-M-\,もしくはM-x indent-region.

*4:プログラムコードのほかに,もう一つ,手書きを勧められないものがあるのですが,どうやら学生は他の科目で学習しているようなので,名称を挙げるのは避けることにします.