パスワードを忘れた? アカウント作成
238057 story
プログラミング

C言語(C90/C99~)の教科書・関数辞典でお勧めは?(ただし日・英両方あるもの) 46

ストーリー by hylom
MSVCのドキュメントとか? 部門より

あるAnonymous Coward 曰く、

今月、私の下に初めての部下がつくことになりました。ただし、日本語は「コニチワ」レベル、英語は何とかしゃべれる東南アジアからの留学生です。やることはC言語によるコード書きとバグ修正で、彼(留学生)はプログラムの基礎(ロジック・構造)は他の言語で既習で、C言語の鬼門であるポインタについては昨週1週間かけた講義で理解できたようです。ちなみに私の英語力は「ゆっくりなら読める・書ける・リアルタイムにしゃべるのは苦手」の典型的日本人英語です。(コミュニケーションは互いの片言以上会話以下の英会話(w)かe-mailで)

今後、コード書きをさせるのに「そこはstrtok使って。使い方はテキスト・関数辞典見て調べて」等の指示で仕事をまわしたいのですが、その『テキスト』を何にするかで躓きました。いままで私がC言語を学んだのは日本語で書かれたテキスト・関数辞典でした。これらは留学生の彼には参考になりません。英語で書かれたC言語の名著で私の知るものといったらK&Rですが、内容が古すぎてとても「これを参考に」とはいえません。米Amazonあたりで評価の高いC言語のテキストを紹介するのがいいのでしょうが、その内容について私に質問されることを考えると、(上述のようにコミュニケーションに時間がかかるので)ちょっと戸惑いを感じます。

こう考えると、ベストなのは「日本語で書かれたC言語の良書が英訳された」かあるいはその逆で、日・英双方がそろったC言語の基本的な関数・アルゴリズムを記述したテキストではないかと考えています(質問されたら、私は日本語版を読んで解釈できる)。特殊な分野で言えば、Numerical Recipesが日・英双方そろっているようなものです。ご存じないでしょうか?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • man (スコア:3, 参考になる)

    by manmos (29892) on 2010年07月14日 17時48分 (#1795175) 日記

    「漢なら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で読み取れない細かい部分は、有名はオープンソースソフトウエアのソースですかね。

  • 「そこはstrtok使って。使い方はテキスト・関数辞典見て調べて」

    よけいなお世話ですが、初心者にstrtokを教えるのは、あまりよくないと思います。行儀の悪い破壊的パース、なおかつ設計に由来する非スレッドセーフで、正しく使うことが難しい上に、それほど強力な機能でもありません。Linuxのman [linux.or.jp]でも、慎重に吟味した上で、注意して用いるよう呼びかけられています。

  • 親切なK&Rとして (スコア:2, 参考になる)

    by Anonymous Coward on 2010年07月15日 17時41分 (#1795861)

    C: A Reference Manualでどうでしょう。
    http://www.amazon.co.jp/Reference-Manual-Samuel-P-Harbison/dp/01308959... [amazon.co.jp]

    • by homoludens (40431) on 2010年07月15日 17時56分 (#1795870)

      補足します。日本語版もでてます。
      S・P・ハービンソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル
      なる怪奇的なタイトルになってしまってますが。
      英日両方買っても1万円弱ですC99まで押さえてるのがいいとこです。

      親コメント
  • by ikotom (20155) on 2010年07月15日 18時18分 (#1795889)

    おすすめのC言語本でググっていっぱい出てくる中で、作者の名前がカタカナだったら英語版はあるよ、ほぼ間違いなく。
    そんなことより、留学生で、日本語もC言語もスキルがないって、それは仕事として成り立つのか不思議。ボランティア的な何かなの?

    留学って事は、何年かしたら帰っちゃうんだよね?
    当人は留学するぐらいだから優秀なのだろうけど、
    多少ましになったところでサヨナラ、にならないのかな?

    最近のフィリピン看護師の問題とか見てると、仕事を覚えながら同時に日本語を覚えるのって相当大変なんだろうと思う。
    # やっぱり日本語ってのが難しすぎるのだろうか

    二兎を追わないで、まずは日本語を覚えさせるか、もしくは彼はC言語に専念して上司のあなたが英語を覚えるか、
    どっちかに集中したほうがいいのでは。余計なお世話かもしれないけど。

    • 最近のフィリピン看護師の問題とか見てると、仕事を覚えながら同時に日本語を覚えるのって相当大変なんだろうと思う。

      職場の環境にもよるのでしょうね。
      外国人力士の日本語習得の速さ [gsjal.jp]は有名ですし。

      親コメント
      • by Anonymous Coward

        あれは医療用語が日本人でも難しいような用語がいっぱいあるからたと思います。

        日常会話程度なら比較的容易なんだろうけど、国家試験に出てくるような用語はあえて難しい言い回ししているようなのばっかりだし。

    • 日本語が難しすぎるというのは日本人特有の幻想ですよ。(言語学的には「特別に」難しい言語はないそうで)
      でもまぁ、英語と中国語どちらが取得しやすかったかと聞かれれば、英語のほうが楽だったかなぁ。

      あと、たしかに中国人とは、漢字を使えばそこそこまでは意思疎通できるけど、「あるていど」以上の話
      (たとえば仕様のHOWではなくWHYを伝える場合)なんかはブリッジさんが必要だったりしました。

      親コメント
  • 時代が変わったなぁ (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2010年07月15日 18時55分 (#1795911)
    > 英語で書かれたC言語の名著で私の知るものといったらK&Rですが、内容が古すぎてとても「これを参考に」とはいえません。

    それこそ大間違いですね。
    MS Windows のライブラリしか使わないとかいうのであれば別ですが、まだまだ古くないですよ。
    ある意味、C のプリミティブな部分は、この本で言い尽くされていると思います。
    この本ぐらい読めないでどうするの? レベルかな。
    この本読んでも不明な部分は、<a href="http://www.kouno.jp/home/c_faq/">C FAQ</a> を参考にしました。
    (私自身は、fj で配布されたものですが。)これは、C 言語の曖昧な部分について、結構利用させて
    頂きました。

    後は、使う C コンパイラの C 言語の仕様マニュアルですね。
    C は、コンパイラ依存の部分が多いので、こればっかりは、マニュアル見ないことには、
    どうしようもありません。

    ソースがあれば、ヘッダファイルとその実装に書かれたコメントを読んだりすることも必要だったりします。
    (typedef や #define にどんだけ泣かされたことやら。)

    あと、本(もしく事典らしいもの) を使ったのは、アルゴリズム関連かな。今は良質なライブラリがあるから、
    自分で書くより性能が良かったりしますが、知ってるのと知らないとでは違いが出ますからね。

    とまあ、古い人間の戯言でした。
    # 時々必要だったものとして、ニーモニック表と各命令のクロック数の書かれたデータシート、
    # というのがあったけど、今は使うことはないよね。
    • Re:時代が変わったなぁ (スコア:3, すばらしい洞察)

      by O1iver (31019) on 2010年07月15日 19時09分 (#1795925) ホームページ 日記

      私も親コメの意見に全く同感です。

      思想的に相容れないという人はいるかもしれませんが、そうでなければそんなに変な事は書いてないですし、下手な選択肢に悩むより良い選択だと思いますよ。

      個人的に思う事ですが「K&RがC言語の元の仕様になった」といった話が昔話のように語られている事がK&Rに対する敷居を上げたり、
      (古くて普通の用途には使えないといった)勝手な思いこみを助長しているのではないかと思います。

      親コメント
      • by Anonymous Coward

        いやぁK&Rって他言語を一応習得しているくらいじゃ読めない事ないですか?
        日本語訳がひどいっていう話もありますが。

        こういう古典的な名著薦めている人って、K&R読みこなせる凄い人なんだと
        思いますが、解り易いとは言いがたいと思うんですけどね。

        学校の授業で最初にK&Rでさっぱり理解できず、結局「C実践プログラミング」
        読むまで基礎すらおぼつきませんでした。

        • いやぁK&Rって他言語を一応習得しているくらいじゃ読めない事ないですか?
          日本語訳がひどいっていう話もありますが。

          こういう古典的な名著薦めている人って、K&R読みこなせる凄い人なんだと

          K&R(プログラミング言語C)って読み物じゃないよ。あれは、参考書付きの問題集だと思わないと意味がない。
          ちゃんと演習問題を前から順番に解いていった?

          名著と呼ばれる本は、殆ど例外なく練習問題を解かないと意味ないのばっかりだよ。
          「珠玉のプログラミング」「プログラミング作法」どっちも読むだけなら苦痛で、解くと判りやすくて面白い。

          # どっちかというと「エキスパートCプログラミング」とかを進めてる方が良く分からない。あれこそ面白オカシイ読み物だと思う:-P

          親コメント
          • by Anonymous Coward

            > 殆ど例外なく練習問題を解かないと意味ないのばっかり
            数学の本と一緒ですね。演習問題が付いてない本は面白おかしい読み物にすぎないという点も。

        • そうかなぁ?
          って思ったけど、いきなり出てくるprintf()関数の奇怪さはビックリだなぁ。
          親コメント
        • by Anonymous Coward

          なんでそこを逆にしちゃうんだろう
          CのプログラマをやりたいならK&Rを最低限読めるのが当然じゃないですか?

          • by Anonymous Coward

            CのプログラマをやりたいならK&Rを最低限読めるのが当然じゃないですか?

            俺もそう思う。K&Rを読みこなせない奴がCプログラマを名乗ってはいけない。でも、理解をチェックしたり、深めたりするのにはいいけど、さっぱり理解していない状態から読むのは辛いんだと思います。

            • by Anonymous Coward

              別に幼稚園児が読むって話じゃないんだよ?
              仕事ってのは人であるのは自明で、最初から読めるほどの発想力が備わってない奴にはいつまでかかっても理解は無理

        • by Anonymous Coward
          他言語もだけど、文法理論の知識もある程度ないと、型の記法のところはなかなか理解しづらいと思いますよ。なにゆえこう変態なのか(しかしそれなりの合理性もある)。
    • by Anonymous Coward

      おっしゃるとおり,K&R第2版しか有り得ないでしょう。
      この本で基礎を固めて、C90/C99なところはmanで補完すればよろしいかと。

    • by Anonymous Coward
      > MS Windows のライブラリしか使わないとかいうのであれば別ですが、まだまだ古くないですよ。
      > ある意味、C のプリミティブな部分は、この本で言い尽くされていると思います。

      C言語は一時期すごく流行ったお陰で、いっぱい参考書が出てます。
      で、挫折者もいっぱい出たし、質問者にありがちな疑問もいっぱい飛び交ったので、後のほうに出た
      参考書は、読者が転びそうなところに配慮したり、学び易い順番を考えて章立てしてますよね。

      K&Rは情報は網羅されてるかも知れないけど、そういった配慮は微塵もないです。
      その当たりが、他の本と比べて「(記述スタイルがとっても) 古い
      • by Anonymous Coward

        たとえば元記事の留学生は、他言語が扱えてポインタもすぐ理解できたわけですから、K&Rでいいでしょう。
        まさにそういう、コンピュータを理解している人向けの本です。

        >学びやすい今時の参考書があるなら、無理して険しい登山コースを選ばなくてもいいと思います。
        登れるなら、冗長な説明のないK&Rのほうが速くていいんじゃないですか。

    • by Anonymous Coward
      いまさらK&Rは古すぎる. C言語に明確な規格が存在せず処理系ごとに仕様の曖昧性があった太古の時代にはオリジナルの設計者による解説としてK&Rの価値があったが、今は他のANSI Cに基ずく良著を選べばよい.
      K&Rは記述の仕方が初心者向けの丁寧な解説でもなく厳密なリファレンスでも無いので、今や歴史的文献としての評価しか出来ない.
      (他に良いものがあるのに初心者にわざわざ古いものを推奨する必要は無い)
    • by Anonymous Coward
      このところ暫くC言語から離れていたので、
      リハビリも兼ねて、この夏のテーマを決めた。

      「K&Rからもう一度、はじめてじゃないC」
  • 標準C言語辞典 (スコア:2, 参考になる)

    by eternaleisure (4682) on 2010年07月15日 21時10分 (#1795988) ホームページ

    標準C言語辞典 http://www.amazon.co.jp/dp/4894713985 [amazon.co.jp] はいかがでしょうか。
    教科書ではなくリファレンスに徹していますが、まともな辞典だと思います。
    例えばNULLの項には空ポインタの内部表現が0とは限らないと記述されています。

    • by Anonymous Coward
      同じページに出てくる下記がお勧め。

        CユーザのためのANSI C言語大辞典 [単行本]
      マーク・ウィリアムズ社 (編集), 坂本 文 (翻訳), 今泉 貴史 (翻訳)
  • そう何度も聞かれても
    http://srad.jp/submission/39249/CTEnglish [srad.jp]

  • by Anonymous Coward on 2010年07月15日 17時30分 (#1795852)

    T/O

  • 目標も環境も良く分からないので、ぼんよりと挙げてみる。
    リファレンス
    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]

    コンパイラのマニュアルもお勧め。

  • 空気読まずに行ってみます!

    そこは無言でHR2 [sakura.ne.jp]を渡しだな、
    爽やかに"Enjoy!"とだけ言ってみるというのはいかがだろう。

    #問題はPC98の入手なわけだが・・・

    --
    Youthの半分はバファリンでできています。
    • by Anonymous Coward

      無言で(対価なしで)渡していただけるのでしたら
      ありがたくいただきます。

      # PC-98もメディアも手元にあるつもりだったけど
      # Disc1だけ無くて起動できない・・・

  • by Anonymous Coward on 2010年07月15日 17時21分 (#1795847)
    アメリカに行って、日本語の教科書が提供されるだろうか?
  • by Anonymous Coward on 2010年07月15日 17時31分 (#1795854)
    日本語版があるものなら英語もあると思うけど。
  • あえて言おう (スコア:0, 参考になる)

    by Anonymous Coward on 2010年07月15日 18時15分 (#1795886)

    くだらない質問だと。

    わざわざ和訳される程度の原著なら、ある程度の質は保証されてるよ。
    こんなところで聞いてないでとっとと本屋行って来い。

    初心者なら「独習C 改訂版」
    中級以上なら「エキスパートCプログラミング」だ。

    • by Anonymous Coward

      > 中級以上なら「エキスパートCプログラミング」だ。
      「エキスパートCプログラミング」は読み物として名著だけど,教科書にはならないと思うな.

  • by Anonymous Coward on 2010年07月15日 18時16分 (#1795887)
    教科書で生兵法を身につけ、関数辞典とやらを見ながら愚かな自分の頭でコードを考えるのは、時間の無駄だよ。
    自分よりも遥かに優れた技術のある人が書いた良質なコードの山から検索して、適切な使い方を学ぶべきだよ。
    • by bitterbeer_sweetwine (37563) on 2010年07月16日 6時04分 (#1796108)

      >自分よりも遥かに優れた技術のある人が書いた良質なコードの山から検索して、適切な使い方を学ぶべきだよ。

      良質であるか?を判断するための知識/素養の問題だと思うな。
      まずは、それの端緒となる基本的な知識をどこで求めるか?についてを、
      このトピックでは求めている様に見えるのだけどね。

      親コメント
  • by Anonymous Coward on 2010年07月15日 18時19分 (#1795891)
    ASSERT, makeとか含めて開発サイクルをきっちり抑えてる良書って。
    「現実的なCプログラミング」がいい線行ってたけど情報量的には全然足りてないしC99にももちろん非対応。

    というわけで2,3冊適当に並行して読むのが無難だな。

    valueof(このレス) == 0
  • by Anonymous Coward on 2010年07月15日 21時30分 (#1796001)

    アルゴリズムを学ぶのはソースからでいいと思う(あまり酷いソースはなしで)
    関数の使い方がわかれば大抵読めるようになるし

  • by Anonymous Coward on 2010年07月15日 21時53分 (#1796011)
    T/O
    • 中国人同僚の新人プログラマーが簡体中文版のVCの本買ってきて「これ読んで勉強します」とかで,見せてもらったことがあるんだけど。簡体だとさすがにわかんなくて,日本語版探したことがあります。んで,日本語版はなかったんだけど英語版はあるのがわかったんで,チョイ調べようとおもってググってみた。著者はヤングという人だった。

      キーワードはこう:

      「Young Visual C ...」

      ・・・いや,英語版ならなんとかなりますって。

      --
      斜点是不是先進的先端的鉄道部長的…有信心
      親コメント
  • by Anonymous Coward on 2010年07月16日 9時35分 (#1796137)
typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...