Entry

C言語の入門書を書いているの話

2012年04月02日

ちょっと野暮用で,最近C言語の入門書を書いています。そのうちどこかに公開するかもしれないけれども,ぼちぼちと書いている。

書くことになったきっかけはいろいろとあるんだけれども(社内研修用なんだが),そのひとつは,市販の入門書が役に立たないというもの。先日ある新人君が使っていたC言語の入門書を読んだことを書いたんだけれども,それとは別に他の新人君が読んでたものも読ませてもらったのでした。前回紹介した柴田望洋氏のは,嘘をかいてないだけまだマシだったのだけれども,もうひとつの方(書名は明かさないが)は本当にひどくてちょっと参ってしまった。

例えば,この本は「入門者は malloc(3) を使う必要はない」とか言う。その理由は,大量にメモリを取得する必要がないからなのだそうです。しかし,malloc(3) を使う理由は,大きな領域を使うこと以外にも,動的にデータ構造を作る必要があることも挙げられるわけで,むしろそっちが主たる理由のはずです。まともなプログラムを作るなら,小規模でも普通は malloc(3) を使えなければ書けない。入門者は金を払ってるのに,まともなプログラムひとつ作れない。スタックを無駄に食いつぶす作れない子を育ててどうするんだ。

また,この本は,プログラム内の定数にマクロ定数を使えと言う。今でもそゆ古典的なことを勧めてる人がいるのかと,ちょっとびっくりしたんだけれども,何も知らない子に変なこと教えるなといいたい。

なんつかこの本は,C言語のプログラミング作法の中でもダメな方ダメな方に偏ってる。これを読んだ人は,スキルが身に付かないどころか,ダメになる。

けどこの本,なぜか Amazon レビューの評価は高めです。なんでなんだろう。不思議。多分,(書名とは裏腹に)躓きやすいところをうまく端折ってるからなのだと思う。躓かないんだから読みやすい。でも,それではモノは作れない。

で,C言語の入門書を書いているわけですけれど,C言語は文法事項を覚えてもそれですぐ使えるようにならないのが,ネックだったりします。仕様書の薄さからして分かると思うけれども,C言語の言語仕様はとても簡素にできているので,文法事項を習得するのに時間はそれほどかかりません。問題は,その言語仕様から作法を組み立てるところです。構造体とポインタのような文法事項を知っていても,動的なデータ構造(例えばリスト構造)を作るには定石やイディオムと呼ばれるようなお約束があります。C言語のプログラマとしては,仕様を知っているのは当たり前として,そっちの方が重要だったりする。

そこで,今書いてるものでは,ある文法事項が実際のコードでどのように使われるかを示すつもり。構造体だったら,ハンドラの作り方まで言及するし,関数ポインタだったらコールバック関数の作り方に言及する(「関数ポインタは配列で管理すると便利」みたいな話がなぜかたくさん載っているんだけれども,そんな例は現実のコードでほとんど見ることはない)。そこまで知らないと,なぜ構造体や関数ポインタが言語としてサポートしているのか分からない。関数ポインタを使ったコールバックなんて qsort(3) はもちろん,あちこちの API で当たり前のように使われているのに,入門者にはマニアックでマイナーな文法事項として埋もれてしまう。

とりあえず,書いてるとこ。書けたらどこかに売り込もうかしらん(嘘)。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN