[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 メーリングリストの案内