[sugj-free:3257] Re: Fwd: C言語入門からそれなりまで手頃なテキストを教えてください

Kenichi Okuyama okuyamak @ dd.iij4u.or.jp
2007年 7月 31日 (火) 00:45:01 JST


奥山です。

>>>>> "奥原" == 奥原@埼玉県  <okuhara.h @ gmail.com> writes:
奥原> 情報工学系の学部1年に所属しているOBから
奥原> 「C言語の適当な教科書、解説書はないですか?」
奥原> と聞かれました。和書、洋書を問わず、
奥原> 定番・必読の書を教えていただけるとありがたいです。

まずもって、
「計算機の基本動作原理」が判っていない人なのか、
「C 言語」を教えれば間に合うのか、
「プログラムを組む、とはどういうことなのか」まで踏み込むべき人なのか、
で推奨する本が変わります。

「C言語」だけでいいなら *2 へ go!
「プログラムを組む、とはどういうことなのか」から後 *3 へ go!


*1) 計算機の基本動作原理

構造化コンピュータ構成(4版)
by Andrew S. Tanenbaum
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-89471-224-5

からまず始まります。論理回路がどのように組みあがってCPUになり、さら
にOSがどういう役割をするのかを説明してくれます。これが判らないと、
プログラミング言語に何を期待していいのかわかりません。


UNIX という考え方
by Mike Gancarz
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-274-06406-9

次に、プログラムを書くのが「非常事態である」事を理解してもらいます。
そのために一度この本を読んでもらう。

今の職場で、Ruby 好きのイギリス人がいるんですが、こいつの悪い癖が
「全機能を1つのプログラムに押し込もうとする」
所。Ruby で書けるレベルなので、スピードが要求されるわけではありませ
ん。であれば、step by step で小さなモジュールを書いて、それを pipe
で繋ぐほうが(デバッグサイクルを考慮に入れると)効率が良いわけです。

また、pipe で繋いでいた小さなコードを組み立てて大きな1つのプログラム
に直す前に、各モジュールの段階でアルゴリズム選択の最適化などを行うこ
とができるわけですが、「なぜそれができるのか」「なぜ大きなプログラム
を一度に組んで、それから直しにかかってはいけないのか」
# 厳密に言えば、そりゃどうやったっていいんですが、初心者は
# pipe という「制限」が付いてたほうがやりやすい
その理由がこの本で判ります。




*2) 「C言語」

K&R は「聖書」。「聖書を持っていないキリスト教徒なんぞいない」のと同
じように、「K&Rを持っていない C言語書きなんていない」ってことで、こ
れは省くとして。

C Primer Plus
by Stephen Prata
http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=pd_bbs_sr_1/104-1497560-8619969?ie=UTF8&s=books&qid=1185808653&sr=8-1

C++ にあって、なぜ C にないのかとお嘆きの貴兄。ありますとも。
C にだって Primer が。
個人的には結構良い本だと思います。
もちろん、細かいところをつつきだすと問題はあるんでしょうが、
入門にはぴったりかと。


C Programming FAQ
by Steve Summit
http://www.geocities.jp/kenichiokuyama/own-computer/index.html#ISBN4-8101-8097-2

C言語の落とし穴はこれで完璧! と言っても良いぐらいの本です。
これは5回ぐらい読み、新しいプログラムを書くときは必ずもう一度読み直
すべき本。



*3) 「プログラムを組む」とはどういうことなのか

この辺になってくると、説明が面倒なので、私の説明が書いてある URL を
書いてお茶を濁します:p

Joel on Software
by Joel Spolsky
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-274-06630-4



プログラミングの壷(I)ソフトウェア設計編
by 	P.J.Plauger
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-320-02755-8

もちろん、II, III も大事。


ソフトウェア開発55の真実と10のウソ
by Robert L. Glass
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-8222-8190-6


省メモリプログラミング
by James Noble & Charles Weir
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-89471-408-6



GNU Make -第3版-
by Robert Mecklenburg
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-87311-269-9

これと、その次は説明が必要かも。

プログラムを大規模に作るようになると、make が絶対必須です。なので、
これを読みましょう。C 言語以外にも使えて便利。


ハッカー・プログラミング大全
by UNYUN
http://www.geocities.jp/kenichiokuyama/read-computer/index.html#ISBN4-88718-633-9

あるポイントまで来ると、C言語がどのようなマシン語を吐くのか理解する
必要が出ます。その場合に良いお手本になるのが
	「君の書いたそのプログラムを、どうやって crack するのか」
という手順集を読むこと。ここに書いてあることから、逆に機械語とかを理
解するようになると、立派な hacker か、立派な cracker の出来上がりで
す。



上記 URL は基本的に私の蔵書一覧へのリンクなので、他にもこれはという
本が見つかるかもしれません。

が、推薦するとなると、上記の通りでしょう。
12冊あるので、4万円ぐらいは軽くかかるのが弱点でしょうか。
# でも、そんなの、私が読んだ本の総額に比べたら…比べたら… orz
---- 
奥山 健一[煤背会:No.0x00000001]
#URL http://www.dd.iij4u.or.jp/~okuyamak/
#    http://developer.osdl.org/dev/doubt/
#今日のお言葉『ZARD』:しまった。初期の曲のいくつか、森高千里と
# 勘違いしていた…。



sugj-free メーリングリストの案内