C言語(C90/C99~)の教科書・関数辞典でお勧めは?(ただし日・英両方あるもの) 46
MSVCのドキュメントとか? 部門より
あるAnonymous Coward 曰く、
今月、私の下に初めての部下がつくことになりました。ただし、日本語は「コニチワ」レベル、英語は何とかしゃべれる東南アジアからの留学生です。やることはC言語によるコード書きとバグ修正で、彼(留学生)はプログラムの基礎(ロジック・構造)は他の言語で既習で、C言語の鬼門であるポインタについては昨週1週間かけた講義で理解できたようです。ちなみに私の英語力は「ゆっくりなら読める・書ける・リアルタイムにしゃべるのは苦手」の典型的日本人英語です。(コミュニケーションは互いの片言以上会話以下の英会話(w)かe-mailで)
今後、コード書きをさせるのに「そこはstrtok使って。使い方はテキスト・関数辞典見て調べて」等の指示で仕事をまわしたいのですが、その『テキスト』を何にするかで躓きました。いままで私がC言語を学んだのは日本語で書かれたテキスト・関数辞典でした。これらは留学生の彼には参考になりません。英語で書かれたC言語の名著で私の知るものといったらK&Rですが、内容が古すぎてとても「これを参考に」とはいえません。米Amazonあたりで評価の高いC言語のテキストを紹介するのがいいのでしょうが、その内容について私に質問されることを考えると、(上述のようにコミュニケーションに時間がかかるので)ちょっと戸惑いを感じます。
こう考えると、ベストなのは「日本語で書かれたC言語の良書が英訳された」かあるいはその逆で、日・英双方がそろったC言語の基本的な関数・アルゴリズムを記述したテキストではないかと考えています(質問されたら、私は日本語版を読んで解釈できる)。特殊な分野で言えば、Numerical Recipesが日・英双方そろっているようなものです。ご存じないでしょうか?
man (スコア:3, 参考になる)
「漢ならman」
#大阪人として、やや恥ずかしいです。
閑話休題。
libcの関数ならmanで十分でしょう。
むしろにsystem callならそのOSのmanしかありえない。Solaris/BSD/Linuxで、ちょっとずつ仕様が違うこともまれではないわけだし。
私はC言語歴25年ほどですが、未だにmanには頼りっぱなしですし、最近のmanは昔に比べてずっと親切だと思いますね。
#先ほどもstrptimeの変数とフォーマットが逆であることを教えられました。
まあ、libc意外だとmanに詳細が書いてなくてハマることも無いわけでは無いですが、そういうときは「ソース」ですね。
昔openssl(SSLeay)はmanが出来てなくて全部ソースでしたが。
下手に「嘘(もしくは古い情報)を書いた本」を使い続けるより、「その場その場でman」の方が将来的にも困らないですよ。
まあもちろんJISX 3010 : 2003(ISO/IEC 9899:1999)規格仕様書ってのもOKですが、私は関数リファレンスとしては使用していません。
manで読み取れない細かい部分は、有名はオープンソースソフトウエアのソースですかね。
Re: (スコア:0)
お代官様?
Re:man (スコア:1)
明示的に名乗ったことがあるかどうかは記憶にありませんが、
山吹色で召喚される [srad.jp]ぐらいですし、
部門名でネタにされる [srad.jp]程度には自明かと。
#/.Jでは、fjの人を結構見かける場な気がしてるのですが、こういうのは黒歴史?
#外野が勝手に同定なんてやってはダメだったかも…
strtokはやめた方が (スコア:3, 参考になる)
よけいなお世話ですが、初心者にstrtokを教えるのは、あまりよくないと思います。行儀の悪い破壊的パース、なおかつ設計に由来する非スレッドセーフで、正しく使うことが難しい上に、それほど強力な機能でもありません。Linuxのman [linux.or.jp]でも、慎重に吟味した上で、注意して用いるよう呼びかけられています。
Re:strtokはやめた方が (スコア:1)
親切なK&Rとして (スコア:2, 参考になる)
C: A Reference Manualでどうでしょう。
http://www.amazon.co.jp/Reference-Manual-Samuel-P-Harbison/dp/01308959... [amazon.co.jp]
Re:親切なK&Rとして (スコア:3, 参考になる)
補足します。日本語版もでてます。
S・P・ハービンソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル
なる怪奇的なタイトルになってしまってますが。
英日両方買っても1万円弱ですC99まで押さえてるのがいいとこです。
あきらめるのもビジネス (スコア:2)
おすすめのC言語本でググっていっぱい出てくる中で、作者の名前がカタカナだったら英語版はあるよ、ほぼ間違いなく。
そんなことより、留学生で、日本語もC言語もスキルがないって、それは仕事として成り立つのか不思議。ボランティア的な何かなの?
留学って事は、何年かしたら帰っちゃうんだよね?
当人は留学するぐらいだから優秀なのだろうけど、
多少ましになったところでサヨナラ、にならないのかな?
最近のフィリピン看護師の問題とか見てると、仕事を覚えながら同時に日本語を覚えるのって相当大変なんだろうと思う。
# やっぱり日本語ってのが難しすぎるのだろうか
二兎を追わないで、まずは日本語を覚えさせるか、もしくは彼はC言語に専念して上司のあなたが英語を覚えるか、
どっちかに集中したほうがいいのでは。余計なお世話かもしれないけど。
Re:あきらめるのもビジネス (スコア:2)
職場の環境にもよるのでしょうね。
外国人力士の日本語習得の速さ [gsjal.jp]は有名ですし。
Re: (スコア:0)
あれは医療用語が日本人でも難しいような用語がいっぱいあるからたと思います。
日常会話程度なら比較的容易なんだろうけど、国家試験に出てくるような用語はあえて難しい言い回ししているようなのばっかりだし。
Re:あきらめるのもビジネス (スコア:2)
日本語が難しすぎるというのは日本人特有の幻想ですよ。(言語学的には「特別に」難しい言語はないそうで)
でもまぁ、英語と中国語どちらが取得しやすかったかと聞かれれば、英語のほうが楽だったかなぁ。
あと、たしかに中国人とは、漢字を使えばそこそこまでは意思疎通できるけど、「あるていど」以上の話
(たとえば仕様のHOWではなくWHYを伝える場合)なんかはブリッジさんが必要だったりしました。
Re:あきらめるのもビジネス (スコア:1, 参考になる)
親コメントは別に日本語が他の言語に比べて難しすぎる特別な言語だと言ってるわけじゃないと思いますけどね。
また、確かに言語習得の難しさは母語からの相対的なものであるとは言え、
例えば英語を母語とする人にとっての最も難しい言語として日本語がよく名が上がるのも事実ではあります。
http://en.wikipedia.org/wiki/Most_difficult_language_to_learn [wikipedia.org]
時代が変わったなぁ (スコア:2, すばらしい洞察)
それこそ大間違いですね。
MS Windows のライブラリしか使わないとかいうのであれば別ですが、まだまだ古くないですよ。
ある意味、C のプリミティブな部分は、この本で言い尽くされていると思います。
この本ぐらい読めないでどうするの? レベルかな。
この本読んでも不明な部分は、<a href="http://www.kouno.jp/home/c_faq/">C FAQ</a> を参考にしました。
(私自身は、fj で配布されたものですが。)これは、C 言語の曖昧な部分について、結構利用させて
頂きました。
後は、使う C コンパイラの C 言語の仕様マニュアルですね。
C は、コンパイラ依存の部分が多いので、こればっかりは、マニュアル見ないことには、
どうしようもありません。
ソースがあれば、ヘッダファイルとその実装に書かれたコメントを読んだりすることも必要だったりします。
(typedef や #define にどんだけ泣かされたことやら。)
あと、本(もしく事典らしいもの) を使ったのは、アルゴリズム関連かな。今は良質なライブラリがあるから、
自分で書くより性能が良かったりしますが、知ってるのと知らないとでは違いが出ますからね。
とまあ、古い人間の戯言でした。
# 時々必要だったものとして、ニーモニック表と各命令のクロック数の書かれたデータシート、
# というのがあったけど、今は使うことはないよね。
Re:時代が変わったなぁ (スコア:3, すばらしい洞察)
私も親コメの意見に全く同感です。
思想的に相容れないという人はいるかもしれませんが、そうでなければそんなに変な事は書いてないですし、下手な選択肢に悩むより良い選択だと思いますよ。
個人的に思う事ですが「K&RがC言語の元の仕様になった」といった話が昔話のように語られている事がK&Rに対する敷居を上げたり、
(古くて普通の用途には使えないといった)勝手な思いこみを助長しているのではないかと思います。
Re: (スコア:0)
いやぁK&Rって他言語を一応習得しているくらいじゃ読めない事ないですか?
日本語訳がひどいっていう話もありますが。
こういう古典的な名著薦めている人って、K&R読みこなせる凄い人なんだと
思いますが、解り易いとは言いがたいと思うんですけどね。
学校の授業で最初にK&Rでさっぱり理解できず、結局「C実践プログラミング」
読むまで基礎すらおぼつきませんでした。
そりゃ「読んでる」からじゃないの?(Re:時代が変わったなぁ (スコア:3, 参考になる)
K&R(プログラミング言語C)って読み物じゃないよ。あれは、参考書付きの問題集だと思わないと意味がない。
ちゃんと演習問題を前から順番に解いていった?
名著と呼ばれる本は、殆ど例外なく練習問題を解かないと意味ないのばっかりだよ。
「珠玉のプログラミング」「プログラミング作法」どっちも読むだけなら苦痛で、解くと判りやすくて面白い。
# どっちかというと「エキスパートCプログラミング」とかを進めてる方が良く分からない。あれこそ面白オカシイ読み物だと思う:-P
Re: (スコア:0)
> 殆ど例外なく練習問題を解かないと意味ないのばっかり
数学の本と一緒ですね。演習問題が付いてない本は面白おかしい読み物にすぎないという点も。
Re:時代が変わったなぁ (スコア:1)
って思ったけど、いきなり出てくるprintf()関数の奇怪さはビックリだなぁ。
Re: (スコア:0)
なんでそこを逆にしちゃうんだろう
CのプログラマをやりたいならK&Rを最低限読めるのが当然じゃないですか?
Re: (スコア:0)
俺もそう思う。K&Rを読みこなせない奴がCプログラマを名乗ってはいけない。でも、理解をチェックしたり、深めたりするのにはいいけど、さっぱり理解していない状態から読むのは辛いんだと思います。
Re: (スコア:0)
別に幼稚園児が読むって話じゃないんだよ?
仕事ってのは人であるのは自明で、最初から読めるほどの発想力が備わってない奴にはいつまでかかっても理解は無理
Re: (スコア:0)
Re: (スコア:0)
おっしゃるとおり,K&R第2版しか有り得ないでしょう。
この本で基礎を固めて、C90/C99なところはmanで補完すればよろしいかと。
Re: (スコア:0)
> ある意味、C のプリミティブな部分は、この本で言い尽くされていると思います。
C言語は一時期すごく流行ったお陰で、いっぱい参考書が出てます。
で、挫折者もいっぱい出たし、質問者にありがちな疑問もいっぱい飛び交ったので、後のほうに出た
参考書は、読者が転びそうなところに配慮したり、学び易い順番を考えて章立てしてますよね。
K&Rは情報は網羅されてるかも知れないけど、そういった配慮は微塵もないです。
その当たりが、他の本と比べて「(記述スタイルがとっても) 古い
Re: (スコア:0)
たとえば元記事の留学生は、他言語が扱えてポインタもすぐ理解できたわけですから、K&Rでいいでしょう。
まさにそういう、コンピュータを理解している人向けの本です。
>学びやすい今時の参考書があるなら、無理して険しい登山コースを選ばなくてもいいと思います。
登れるなら、冗長な説明のないK&Rのほうが速くていいんじゃないですか。
K&Rは古い (スコア:0)
K&Rは記述の仕方が初心者向けの丁寧な解説でもなく厳密なリファレンスでも無いので、今や歴史的文献としての評価しか出来ない.
(他に良いものがあるのに初心者にわざわざ古いものを推奨する必要は無い)
Re: (スコア:0)
リハビリも兼ねて、この夏のテーマを決めた。
「K&Rからもう一度、はじめてじゃないC」
標準C言語辞典 (スコア:2, 参考になる)
標準C言語辞典 http://www.amazon.co.jp/dp/4894713985 [amazon.co.jp] はいかがでしょうか。
教科書ではなくリファレンスに徹していますが、まともな辞典だと思います。
例えばNULLの項には空ポインタの内部表現が0とは限らないと記述されています。
Re: (スコア:0)
CユーザのためのANSI C言語大辞典 [単行本]
マーク・ウィリアムズ社 (編集), 坂本 文 (翻訳), 今泉 貴史 (翻訳)
よっぽど困ってらっしゃるようで (スコア:1)
そう何度も聞かれても
http://srad.jp/submission/39249/CTEnglish [srad.jp]
その留学生の母国語で書かれた教科書がベスト (スコア:1, すばらしい洞察)
T/O
Re:その留学生の母国語で書かれた教科書がベスト (スコア:1)
昔、中国語版のK&Rを持ってた奴が身近に居たなあ…
よく分からないので (スコア:1)
目標も環境も良く分からないので、ぼんよりと挙げてみる。
リファレンス
C:A REFERENCE MANUAL/Cリファレンスマニュアル
UNIX環境
Advanced Programming in UNIX Environment/詳解UNIXプログラミング
FAQ
comp.lang.c Frequently Asked Questions [c-faq.com]/C言語 FAQ 日本語訳 [kouno.jp]
コンパイラのマニュアルもお勧め。
ここまでボケはなし (スコア:1)
空気読まずに行ってみます!
そこは無言でHR2 [sakura.ne.jp]を渡しだな、
爽やかに"Enjoy!"とだけ言ってみるというのはいかがだろう。
#問題はPC98の入手なわけだが・・・
Youthの半分はバファリンでできています。
Re: (スコア:0)
無言で(対価なしで)渡していただけるのでしたら
ありがたくいただきます。
# PC-98もメディアも手元にあるつもりだったけど
# Disc1だけ無くて起動できない・・・
逆に考えるんだ。 (スコア:0)
オライリーは? (スコア:0)
あえて言おう (スコア:0, 参考になる)
くだらない質問だと。
わざわざ和訳される程度の原著なら、ある程度の質は保証されてるよ。
こんなところで聞いてないでとっとと本屋行って来い。
初心者なら「独習C 改訂版」
中級以上なら「エキスパートCプログラミング」だ。
Re: (スコア:0)
> 中級以上なら「エキスパートCプログラミング」だ。
「エキスパートCプログラミング」は読み物として名著だけど,教科書にはならないと思うな.
教科書なんて糞食らえ (スコア:0)
自分よりも遥かに優れた技術のある人が書いた良質なコードの山から検索して、適切な使い方を学ぶべきだよ。
Re:教科書なんて糞食らえ (スコア:2, すばらしい洞察)
>自分よりも遥かに優れた技術のある人が書いた良質なコードの山から検索して、適切な使い方を学ぶべきだよ。
良質であるか?を判断するための知識/素養の問題だと思うな。
まずは、それの端緒となる基本的な知識をどこで求めるか?についてを、
このトピックでは求めている様に見えるのだけどね。
これといったものは意外とないんだよな (スコア:0)
「現実的なCプログラミング」がいい線行ってたけど情報量的には全然足りてないしC99にももちろん非対応。
というわけで2,3冊適当に並行して読むのが無難だな。
valueof(このレス) == 0
教則本より関数リファレンス本 (スコア:0)
アルゴリズムを学ぶのはソースからでいいと思う(あまり酷いソースはなしで)
関数の使い方がわかれば大抵読めるようになるし
はじめてのC (スコア:0)
Re:はじめてのC (スコア:2)
中国人同僚の新人プログラマーが簡体中文版のVCの本買ってきて「これ読んで勉強します」とかで,見せてもらったことがあるんだけど。簡体だとさすがにわかんなくて,日本語版探したことがあります。んで,日本語版はなかったんだけど英語版はあるのがわかったんで,チョイ調べようとおもってググってみた。著者はヤングという人だった。
キーワードはこう:
「Young Visual C ...」
・・・いや,英語版ならなんとかなりますって。
斜点是不是先進的先端的鉄道部長的…有信心
MSDN ライブラリでしょ。 (スコア:0)