わさっきhb

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

ここが変だよC言語 (続き)

ここが変だよC言語〈上〉』と『ここが変だよC言語 下』の書評の続きです.
この本を通じて「Cの厄介なところ」を学んで,その後どんなところに生かせるかについての言及がほとんどありません.それは著者の意図でないのは十分に理解できます.だからこそ,学生には勧められないのです.
学生には,授業を見聞きするとともに,良質の入門書*1を読み通して文法や基本的な技法を習得してもらい,その後,さまざまなプログラム作成をしてその技能を定着してほしいものです.しかし,「文法」と「実用」の間にはギャップがあます.それを埋めるのが,先生や先輩のアドバイスであったり,書籍やオンラインの情報だったりするわけです.
本から具体例を挙げてみましょう.ポインタのポインタを学んで何に使えるか(上pp.210-211),ですが,これはコマンドライン引数を使ったプログラミングで不可欠です.分野によって使われない*2こともありますが,文字列処理という面でも,システムへの入力の与え方という面でも,コマンドライン引数の取扱いを,入門のどこかの段階で学ぶべきでしょう.私の授業では,配列,文字列,ポインタと説明したあと,ポインタのポインタを説明し,コマンドライン引数を入力にとるプログラムの実例を挙げています.
もう一つ.下の最初の章は構造体ですが,その実用性についての言及が抜けているほか,自己参照構造体の説明がありません.文法上の疑問を重視した,ということでしょう.となるとますます,学生には勧められません.
もちろん文法を間違えて覚えると,正しいプログラムは作れません.ですが文法については,困ったときに参照できるような情報源を持っておけばよく,次のステップの学習で望まれるのは,「どのように書いていいのか,悪いのか」の例*3,そしてそれを教えてくれる教師*4でしょう.
ここで「書いていい/悪い」について,掘り下げておきます.学生が書いたソースファイルを「教師」が見て指導するという状況で,文法的におかしい(コンパイルエラーになる)のは明らかに「悪い」ですが,文法的には問題なくても,実行時にうまく動かないとか,きれいな書き方でないのでそのままでは将来損をするようなものも,「悪い」ということになります.どのような理由で悪いのかが言えること,代替コードを提示できることが,「教師」に要請されます.
そう考えると,プログラミングを英会話に対比することも可能かもしれません.文法書もあれば,実用書もあるし,町に出れば少人数指導の英会話学校があちこちにあるし,そして巷には「生きた」プログラム例や英文例があふれているわけです.今回取り上げた2冊は,「文法の解説書」といったところでしょうか.

*1:この本のあちこちに,K&Rで学ばれた際の苦労が記されています.あれが入門書としてはよくない点には同意します.当学科でも,プログラミング授業に関わる複数の教員が多数の本を読み比べて検討し,授業用の教科書を選定しています.それと,Webの情報源では法大奥山研究室C言語が抜群にいいですね.

*2:組込みではまず使わないでしょうね….

*3:例えば,sizeof演算子について,「オペランドがオブジェクトのときはカッコがあってもなくてもいい,型名のときは必須」という覚え方ではなく,「sizeofは,変数名か型名をオペランドにとって,カッコで囲って関数呼び出しのように書く.ただし…」と理解するほうが実用的ということです.人のコードで,sizeofの後にカッコがない場合に,文法書に立ち返ればいいのです.

*4:職業としての先生・教員に限りません.先輩でもいいし,年齢が下でも技術を持っている人でもいいでしょう.