![]() |
書名 | やさしいCプログラミング |
---|---|---|
著者 | 仲川勇二 | |
発行日 | 1996年2月15日 初版第1刷 | |
発行元 | 株式会社朝倉書店 | |
サイズ | A5判、162ページ | |
定価 | 2300円(本体) | |
ISBN | 4-254-12109-1 |
ひょんなことから 「やさしいCプログラミング」というのを見つけた。
とにかく面白いCのソースが並んでいた。やさしいというより、面白いというか、 恐ろしいというか、その手のCのソースのオンパレードである。是非、御一読を。
----まえがきより
という表現があり、これは本になっているのかと指が震えながら検索したら、 出版物として出ていることが判明した。そして、好運にもこの本を入手することが できたのである。
もう、とても素晴らし過ぎて、 『Cプログラミング診断室』 第8章 を上回る秀作であることが判明した。 この本をネタに、1章書き上げることはできるであろうが、著作物にまでなっ ているソースプログラムを引用するのは難しいのではないかと思う。
まだ、ぱらぱらと見ただけである。これから、じっくり、皆で飲み屋に行って、 この本を肴に一杯やらないと、これ以上の感想は書けそうにない。
2000年2月25日
今日、やっと斜め読みを済ませたところである。しかし、1日で書き切れない ほどの絶品なので、今日は、編集、レイアウト的な面について書こうと思う。
まず、右の図を見て欲しい。
プログラムは、右のような、黒く太い枠の中に入っているのである。
わたしゃ、プログラムよりも、この黒く太い枠の方が強力に目に飛び込んで
きて、なかなかプログラムを味わえないのである。 これほどまでに、はっき
りとプログラムの存在というか、枠の存在を示した例を見たことがない。
実際には、この図の中に矢印が多数入っており、こまかく解説が書かれている。 矢印は、グレーで、ちょっとだけ弱くなっている。プログラムの枠は、ページの 横幅の約半分程度で、その右に説明が並び、矢印が飛んでいるのである。
さて、次に、ページがどういう構成になっているかについてである。 本文があり、このようなプログラム例があり、そして、このプログラム例で使われている マクロも同様に極太影付枠で示されていたりする。 もし、俗世で使っているような書き方をするとこうなるというC言語版というのは、 ちょっと強調を弱めて、普通の極太枠になっている。実行例も、普通の極太枠 である。その他、多くのものが枠で囲まれている、それも太い枠で。どうも枠が 好きなようである。
プログラムとその参考のためのディスプレイ例、マクロなどは、見開きで見 られるようにまとまっている。通常は、見開きの2ページで終るが、ちょっと 長い場合には4ページになることがある。
で、本文を読み進んでいると、この見開きにぶつかることがあり、次ページではなく、 3ページ先、あるいは5ページ先に続くのであるが、これが、文の途中で発生 したりして、ほとんど思考がぶったぎられてしまった。 この本で授業をやられたらたまらないですな。まして、本書のようなレイア ウトを参考にして、生徒が論文、レポートなどを書き出したら、もうパニック ではないだろうか。少なくとも、私のところにそんなものが来たら、読まずに ゴミ箱行きにせざるを得ない。あるいは、反面教師用として大切に保存するか であり、中身を読むことは永久にないし、読めない。
この本、最初に見た時、「なんでこんなに汚いんだ」というのが第一印象である。 同人誌だって、もっと奇麗ではないか、と思ったのである。もしかして、もの凄く 古い本を、どんどん増刷しているので、元は非常に古いのかと思って、奥付けを 見た。そうしたら、初版が1996年とある。そんな馬鹿な。
まえがきの最後に、
この本は、著者自身の手でマッキントッシュを用いて作成されたプリントアウトを, そのまま版下として使用し印刷されました.とあって、納得というか、複雑な気分になった。これでは、マックが可哀想である。 マックは、実際に出版社で編集用として最も広く使われている。
どんな道具も、使う人によって、どうにでもなる‥‥‥ということかな。
2000年2月29日
やっと、最も重要な内容についての感想である。Cプログラミング診断室の 第8章を上回るということを説明していこうと思う。 しかし、私の能力、筆力でそこまでできるとは思えないので、最初に断って おく。
どうも、「Cは難しいもの」という先入観というか、固定概念を植えつける ために第1章があるようで、Cは駄目で、Modula-2が優れた言語との説明が しっかり行なわれている。それなら、C言語などやめて、Modula-2を使えばと 思うのは私だけだろうか。
初学者が、Modula-2風C言語を使用する利点は
(1) プログラムを読みやすくし、文法を覚えやすくする,
(2) C言語特有のわかり難くさを緩和する,
(3) C言語特有のエラーを未然に防ぐ,
(4) C言語特有の落し穴をふさぐ,
(5) C言語特有の曖昧な制御構造を避ける,
ということらしいんだが、まるで私にはチンプンカンプンである。 C言語は、C言語を知っている、使いこなしている人間が教えれば、それほど 難しい言語とは思えないのであるが。
まず、疑似Modula-2風にするために、pseudo.h という怪しいヘッダーファイル が用意されているのである。それを見ると、
となっているのである。もちろん、実際の pseudo.h にはもっと多数の#define があるので、もっと興味のあるひとは、是非 本家を訪れて欲しい。#define FUNCTION #define Main() void main(void) #define VARIABLE { #define BEGIN #define END }
さて、これを見てすぐ分かるのは、FUNCTION と BEGIN は、書いても無くなるだけなので、 書いてもいいし、書かなくてもよい。さらに、幾つ書いてもいいのである。だから、 当然のことであるが、BEGIN と END の対応など無視されるのである。 つまり、コンパイラのチェック機能などないわけであるから、間違ったことを書いても、 C言語のコンパイラにとってOKであればエラーは出ないので、間違いは見つけられないのである。 なんだか、これでは、著者が言わんとしていることの正反対のようなものが出来上がっている だけだと思うのだが。
さらに、これでは、C言語と、Modula-2風言語の2つを覚えないといけなくて、 負担というか、混乱が増えるだけだと思うんだけど。
制御構造のところまでいくと、forなんか、
となっていて(どう#defineされているかは、勝手に考えてくれ!)、もう増 加か減少しながらループを回ることしか許されないのである。それに、INC, DEC それぞれの FOR なんて、全然嬉しくないのである。#define FORINC( n,fst,lst,step) #define FORDEC( n,fst,lst,step)
こういうことだから、当然、増加、減少のための
もある。これでは、++ や -- が目に飛び込んでこないので、もうCとは全然関係ない 言語にしか見えなくなる。まあ、結局は、どこまでCらしくなくできるかに挑戦している ような気がする。もちろん、ポインタだって、* ではなく、POINTER なんてものが用意され るのである。とにかく、そういうのが延々と続くのである。#define INC(v) (v)++ #define DEC(v) (v)--
書くべきことは、もっともっとあるだろうが、後は勝手に調べて欲しい。 できることなら、書籍を是非入手して、味わって欲しい。 しかし、その結果については責任持たないので、自己責任で読むように。
さて、驚くべきことは、これが教科書だったことである。なぜ知っているかというと、 一応私は西の方の出身なんで、あっちの方にはちょっぴり詳しいだけである。でも、今は もうこの教科書は使われていないので、一応安心してよいかも知れない。
本書のまえがきには、
Fortranでは十数年かかっても完成できなかった, 技術計算を中心とした複雑で 大規模なプログラムを, Modula-2風のCを用いてやっと完成することができました. そのときの経験をもとにこの本を書きました.とある。ちゃんと、実際にModula-2風にプログラムをすることにより、今まで 全く不可能だったことができたのであるから、それは確かに素晴らしいことである。 そういう実績に基づいている訳だから、書籍にもなり、授業にも使われたのであろう。
でも、私には納得いかない。 10年以上前に、Fortranで、3Dグラフィックス(曲面処理)、構造解析、 その他かなり複雑な処理をやっていた人を多数知っているが、もっともっと複 雑なことをやろうとしたのであろうか。
Modula-2風に書いて、どうやってデバッグとかソースの管理をするのか、考 えただけで頭痛がしてくる。普通に書けば、エディタの機能や、デバッガの機 能が使えて開発も効率的だと思うが。それとも、始めから、Modula-2のソースが 大量にあって、それをできるだけ少ない労力で移植しようとしたのなら、私にも 何とか分かるんだが。。。。
一番不安に思うのは、授業に熱心な学生が、このようなプログラムをCのプ ログラムと思い込んでしまうと、とっても不幸だということである。こういう Cのプログラムを書くプログラマなど、死んでも雇えないのである。
もちろん、どんな授業をされようと、こういうプログラムはおかしいと気が つく程度の能力は、学生は持つべきであろう。良いか悪いか、変か、異常か、 狂っているか、そういう判断を養うのが大学というところである。 Modula-2風のプログラムを書くという知識(?)よりも、この授業大丈夫か、 はたまた、この大学大丈夫かとか、そういう勉強はしっかりして欲しい。就職 先が、就職前に倒産するなどということがないように、ちゃんと選ぶのも勉強 のうち。
全然まとまらない文章になってしまったので、このへんでやめた。
2000年3月4日