入門 コンピュータ科学 ITを支える技術と理論の基礎知識
- KADOKAWA/アスキー・メディアワークス (2014年2月18日発売)
- Amazon.co.jp ・本 (608ページ)
- / ISBN・EAN: 9784048869577
作品紹介・あらすじ
きわめてオーソドックスなコンピュータ科学の教科書。コンピュータ科学が抽象化ツールの階層構造になっているという視点で統一的に記述されている。
感想・レビュー・書評
-
コンピュータサイエンスの必読教科書。
私が学生の頃はこの本が無かったが、「コンピュータサイエンスを学ぶならまずはこれを読め」という本としては間違いなく1番の本だと思う。非常に幅広く学べる。詳細をみるコメント0件をすべて表示 -
【メモ】
※2017年に再刊されている。
→〈https://booklog.jp/item/1/4048930540〉
【書誌情報】
原題:Computer Science: An overview (11th edition)
著者:J. Glenn Brookshear(1944-)
訳者:神林 靖[かんばやし・やすし] (1958-) 日本工業大学 情報工学科 准教授。計算理論、分散システム。
〈https://www.nit.ac.jp/gakka/subject/kyoin7/cie_kambayashi.html〉
訳者:長尾 高弘[ながお・たかひろ] (1960-) ㈱ロングテール 社長。翻訳業。
定価: 4,104円(本体3,800円+税)
発行:KADOKAWA
プロデュース:アスキー・メディアワークス
発売日:2014年02月19日
判型:B5変形判
商品形態:単行本
ページ数:608
ISBN:9784048869577
Cコード:C3004
米国大学の教養課程で使用されているコンピュータ科学の定番教科書。これからコンピュータ科学を学ぼうとしている学生および大学でコンピュータ科学を学ばなかった社会人プログラマのための独習書として最適です。
〈https://www.kadokawa.co.jp/product/311735300000/〉
【目次】
コロフォン [004]
まえがき(J.G.B.) [005-010]
読者対象
第11版で加えたもの
本書の構成
先生方へのメッセージ
教科書としての特徴
学生へのメッセージ
謝辞
訳者まえがき(2013年10月 訳者代表 神林靖) [011-012]
目次 [013-022]
第0章 序章 023
0.1 アルゴリズムの役割 024
0.2 計算の歴史 026
0.3 アルゴリズムの科学 030
0.4 抽象化 032
0.5 本書の構成 032
0.6 社会的影響 034
社会問題 036
参考文献 037
第1章 データストレージ 039
1.1 ビットとその格納 040
1.1.1 プール演算
1.1.2 ゲートとフリップフロップ
1.1.3 16進記法
1.2 メインメモリ 046
1.2.1 メモリ構成
1.2.2 メモリ容量を計る
1.3 マスストレージ 048
1.3.1 磁気システム
1.3.2 光学システム
1.3.3 フラッシュドライブ
1.3.4 ファイルの格納と取出し
1.4 ビットパターンとして情報を表現する 054
1.4.1 テキストを表現する
1.4.2 数値を表現する
1.4.3 画像を表現する
1.4.4 音声を表現する
1.5 2進数の体系 060
1.5.1 2進記法
1.5.2 2進加算
1.5.3 2進法による小数(分数)
1.6 整数を格納する 065
1.6.1 2の補数記法
2の補数記法による加算 オーバーフローの問題
1.6.2 エクセス記法
1.7 小数を格納する 070
1.7.1 浮動小数点記法
1.7.2 打切り誤差
1.8 データ圧縮 074
1.8.1 汎用データ圧縮技法
1.8.2 画像を圧縮する
1.8.3 音声とビデオを圧縮する
1.9 通信エラー 079
1.9.1 パリティビット
1.9.2 エラー訂正符号
演習問題 083
社会問題 087
参考文献 088
第2章 データ操作 089
2.1 コンピュータアーキテクチャ 090
2.1.1 CPUの基本
2.1.2 コンピュータの概念
2.2 マシン語 093
2.2.1 命令の種類
データ転送命令 算術・論理命令 制御命令 マシン語の例
2.3 プログラムの実行 098
2.3.1 プログラム実行の例
2.3.2 データとしてのプログラム
2.4 算術論理命令 105
2.4.1 論理演算
2.4.2 ローテーションとシフト演算
2.4.3 算術演算
2.5 他の装置との通信 109
2.5.1 コントローラの役割
2.5.2 ダイレクトメモリアクセス
2.5.3 ハンドシェーキング
2.5.4 よく使用される通信経路
2.5.5 通信速度
2.6 他のアーキテクチャ 113
2.6.1 パイプライン
2.6.2 マルチプロセッサマシン
演習問題 115
社会問題 120
参考文献 121
第3章 オペレーティングシステム 123
3.1 オペレーティングシステムの歴史 124
3.2 オペレーティングシステムのアーキテクチャ 128
3.2.1 ソフトウェア
3.2.2 オペレーティングシステムの構成要素
3.2.3 オペレーティングシステムを起動する
3.3 マシンの動作を調整する 135
3.3.1 プロセスの概念
3.3.2 プロセス管理
3.4 プロセス間の競合を調整する 138
3.4.1 セマフォ
3.4.2 デッドロック
3.5 セキュリティ 143
3.5.1 外部からの攻撃
3.5.2 内部からの攻撃
演習問題 145
社会問題 148
参考文献 149
第4章 ネットワークとインターネット 151
4.1 ネットワークの基礎 152
4.1.1 ネットワークの分類
4.1.2 プロトコル
4.1.3 ネットワークを組み合わせる
4.1.4 通信を処理する手法
4.1.5 分散システム
4.2 インターネット 161
4.2.1 インターネットアーキテクチャ
4.2.2 インターネットアドレッシング
4.2.3 インターネットアプリケーション
電子メール ファイル転送プロトコル telnetとセキュアシェル VoIP インターネットラジオ
4.3 ワールドワイドウェブ 170
4.3.1 ウェブの実装
4.3.2 HTML
4.3.3 XML
4.3.4 クライアントサイドアクティビティとサーバサイドアクティビティ
4.4 インターネットプロトコル 178
4.4.1 インターネットソフトウェアの階層的アプローチ
4.4.2 TCP/IPプロトコルスイート
4.5セキュリティ 184
4.5.1 攻撃の形式
4.5.2 保護と予防
4.5.3 暗号
4.5.4 ネットワークセキュリティへの法的アプローチ
演習問題 192
社会問題 194
参考文献 195
第5章 アルゴリズム 197
5.1 アルゴリズムの概念 198
5.1.1 インフォーマルな復習
5.1.2 アルゴリズムの形式的定義
5.1.3 アルゴリズムの抽象的性質
5.2 アルゴリズムの表現 201
5.2.1 基本命令
5.2.2 擬似コード
5.3 アルゴリズムの発見 208
5.3.1 問題解決の技法
5.3.2 足がかりを得る
5.4 繰返し構造 214
5.4.1 逐次探索のアルゴリズム
5.4.2 ループ制御
5.4.3 挿入法による整列アルゴリズム
5.5 再帰構造 223
5.5.1 二分探索アルゴリズム
5.5.2 再帰制御
5.6 効率性と正当性 230
5.6.1 アルゴリズムの効率性
5.6.2 ソフトウェアの検証
演習問題 239
社会問題 243
参考文献 244
第6章 プログラミング言語 245
6.1 歴史的展望 246
6.1.1 初期世代
6.1.2 マシン独立
6.1.3 プログラミングパラダイム
6.2 伝統的なプログラミング概念 254
6.2.1 変数とデータ型
6.2.2 データ構造
6.2.3 定数とリテラル
6.2.4 代入文
6.2.5 制御文
6.2.6 コメント
6.3 手続きユニット 265
6.3.1 手続き
6.3.2 引数
6.3.3 関数
6.4 言語の実装 272
6.4.1 翻訳プロセス
6.4.2 ソフトウェア開発パッケージ
6.5 オブジェクト指向プログラミング 280
6.5.1 クラスとオブジェクト
6.5.2 コンストラクタ
6.5.3 追加の機能
6.6 並行動作のプログラミング 286
6.7 宣言型プログラミング 288
6.7.1 論理推論
6.7.2 Prolog
演習問題 294
社会問題 298
参考文献 299
第7章 ソフトウェア工学 301
7.1 ソフトウェア工学という学問 302
7.2 ソフトウェアライフサイクル 304
7.2.1 サイクル全体
7.2.2 伝統的な開発フェーズ
要求分析 設計 実装 テスト
7.3 ソフトウェア工学の方法論 308
7.4 モジュール性 310
7.4.1 モジュールによる実装
7.4.2 結合度
7.4.3 凝集度
7.4.4 情報隠蔽
7.4.5 コンポーネント
7.5 ツール 317
7.5.1 伝統的な技法
7.5.2 統一モデリング言語
7.5.3 デザインパターン
7.6 品質保証 324
7.6.1 品質保証の範囲
7.6.2 ソフトウェアテスト
7.7 ドキュメンテーション 327
7.8 ヒューマンマシンインタフェース 329
7.9 ソフトウェアの所有権と責任 332
演習問題 333
社会問題 336
参考文献 337
第8章 データ抽象 339
8.1 基本データ構造 340
8.1.1 配列
8.1.2 リスト、スタック、キュー
8.1.3 木
8.2 関連する概念 343
8.2.1 抽象化再訪
8.2.2 静的構造と動的構造
8.2.3 ポインタ
8.3 データ構造の実装 345
8.3.1 配列と構造体を格納する
配列 構造体
8.3.2 リストを格納する
8.3.3 スタックとキューを格納する
8.3.4 二分木を格納する
8.3.5 データ構造を操作する
8.4 ケーススタディ 358
8.5 データ型をカスタマイズする 363
8.5.1 ユーザ定義のデータ型
8.5.2 抽象データ型
8.6 クラスとオブジェクト 366
8.7 マシン語におけるポインタ 368
演習問題 370
社会問題 374
参考文献 375
第9章 データベースシステム 377
9.1 データベースの基礎 378
9.1.1 データベースの重要性
9.1.2 スキーマの役割
9.1.3 データベースの管理システム
9.1.4 データベースモデル
9.2 関係モデル 382
9.2.1 関係設計の問題点
9.2.2 関係演算
9.2.3 SQL【Structured Query Language】
9.3 オブジェクト指向データベース 392
9.4 データベースの完全性を保つ 394
9.4.1 コミットとロールバックのプロトコル
9.4.2 ロック法
9.5 伝統的ファイル構造 398
9.5.1 順編成ファイル
9.5.2 索引ファイル
9.5.3 ハッシュファイル
9.6 データマイニング 405
9.7 データベース技術の社会的影響 407
演習問題 409
社会問題 413
参考文献 414
第10章 コンピュータグラフィックス 415
10.1 コンピュータグラフィックスの範囲 416
10.2 3Dグラフィックスの概要 417
10.3 モデリング 419
10.3.1 個別オブジェクトのモデリング 419
形状 表面特性 リアリズムの追求
10.3.2 シーン全体のモデリング 425
10.4 レンダリング 427
10.4.1 光と表面の相互作用 427
反射 屈折
10.4.2 クリッピング、走査変換、隠面消去 429
10.4.3 シェーディング 433
10.4.4 レンダリングパイプラインのハードウェア 434
10.5 グローバルライティングの処理 436
10.5.1 レイトレーシング
436
10.5.2 ラジオシティ 438
10.6 アニメーション 439
10.6.1 アニメーションの基礎 439
フレーム 絵コンテ 3Dアニメーション
10.6.2 運動学と動力学 441
10.6.3 アニメーションのプロセス 442
演習問題 443
社会問題 445
参考文献 446
第11章 人工知能 447
11.1 知能とマシン 448
11.1.1 知的エージェント
11.1.2 研究方法
11.1.3 チューリングテスト
11.2 認識 452
11.2.1 画像理解
11.2.2 言語処理
11.3 推論 458
11.3.1 プロダクションシステム
11.3.2 探索木
11.3.3 ヒューリスティック
11.4 その他の研究領域 468
11.4.1 知識の表現と操作
11.4.2 学習
11.4.3 遺伝的アルゴリズム
11.5 人工ニューラルネットワーク 473
11.5.1 基本的性質
11.5.2 人工ニューラルネットワークを訓練する
11.5.3 連想記憶
11.6 ロボット工学 480
11.7 社会的影響を考える 482
演習問題 484
社会問題 488
参考文献 490
第12章 計算の理論 491
12.1 関数とその計算 492
12.2 チューリングマシン 494
12.2.1 チューリングマシンの基礎 494
12.2.2 チャーチ=チューリングマシンの提唱 497
12.3 万能プログラミング言語 497
12.3.1 Bare Bones言語
12.3.2 Bare Bones によるプログラミング
12.3.3 Bare Bones 言語の万能性
12.4 計算不能関数 503
12.4.1 停止問題
12.4.2 停止問題の解決不能性
12.5 問題の複雑さ 508
12.5.1 問題の複雑さを計測する
12.5.2 多項式問題対非多項式問題
12.5.3 NP問題
12.6 公開鍵暗号 515
12.6.1 剩余記法
12.6.2 RSA 公開鍵暗号
演習問題 519
社会問題 522
参考文献 523
付録A ASCII 525
付録B 2の補数表現を扱う回路 527
付録C 単純なマシン語 531
マシンアーキテクチャ/マシンの言語
付録D 高レベルプログラミング言語 533
Ada/C/C++/C#/Fortran/Java
付録E 繰返し構造と再帰構造の同等性 535
付録F 練習問題解答 537
著者・訳者紹介 [577]
索引 [578-607]
奥付 [608]
【抜き書き】
□pp. 482-484
>>
◆11.7 社会的影響を考える
人工知能の進歩が人類にとって潜在的に利益になることは疑いない。そしてその潜在的利益に熱狂するのは容易である。しかしながら危険も潜んでいることを忘れてはならない。技術が派生する効果には、利益になることもあれば破壊的なこともある。その差異は単なる視点の違いのこともあるし、社会的地位の違いによることもある。つまりだれかの利益は、だれか他の人々の損失につながることがあるのだ。したがってここで立ち止まって、進歩する技術について、別の視点から眺めることは有益だろう。
技術の進歩を人類への貢献として見る視点がある。技術とは、平凡で退屈な日々の営みから人類を解放し、より喜びに満ちた生活様式への道を拓くというわけである。しかしこの同じ現象を、人々から職を奪い取り、富を権力者へ集める災いであると見る視点もある。実際これは、インドの献身的な人道主義者マハトマ・ガンディーのメッセージである。彼は、大規模な織物工業を小作人の紡ぎ車で置き換えるべきだと繰り返し主張していた。このように彼は、少数しか雇用しない中央集権的大量生産システムを分散型の生産システムで置き換えることにより、社会的利益は拡大すると主張したのだった。
歴史は、富と権力の偏在に端を発する革命に満ちている。今日の先進技術が貧富の差を固定化するのであれば、破滅的な結果をもたらすかもしれない。
しかし高度に知的なマシンを構築することによる結果は、社会の単なる階級闘争よりもより微妙でより根本的である。これは、人類の自己イメージの革新を突く問題なのだ。19世紀にチャールズ・ダーウィンの進化理論と人類が劣った生命体から進化したという考えは、社会を震撼させた。人間精神に匹敵する知的能力をもつマシンが活躍するような事態に直面したときに、社会はどのように反応するだろうか。
かつて技術の進歩は緩慢であったので、知性に対する概念を変化させることでわれわれの自己イメージを保つことができた。古代の人々が 19 世紀の機械装置を見たならば、超自然な知性をもつと解釈しただろうが、現代人はそのようなマシンに知性を感じることはない。しかしマシンが真に人間の知性に挑戦するようになったら、あるいはむしろ、われわれが適応する以上の速さでマシンの能力が進歩してしまったならば、人間社会はどのように反応するだろうか。
人間の知性に挑戦するマシンにどのように人々が反応するかは、20世紀半ばにIQテストが導入されたとき社会がどのように反応したかを考えることでヒントを得られる。IQテストは、子供の知的レベルを特定するものと考えられたのだ。アメリカ合衆国で子供たちは、IQテストの結果によって分別されて、それに応じた教育機関へと送られた、つまりテストの成績のよかった子供たちにはすぐれた教育機会が開かれたのだが、成績の悪かった子供たちは、特別支援学校へ送られてしまった。端的にいうと、個人の知性を計る尺度が与えられると社会は、その尺度上で低いほうの人々の能力を無視する傾向にある。それではマシンの“知的な”能力が人間のそれに匹敵するようになったとき、社会はどのようにその状況に対処するだろうか。社会は、マシンの知性より劣る”ように見える人々を切り捨てるだろうか。もしそうするならば、社会の構成員にとってどのような結果になるだろうか。人間の尊厳とは、マシンとどのように比較されるかによって条件づけられてしまってよいのだろうか。
特定の分野で人類の知的能力が、マシンによって脅かされる事例をすでに見た。今日コンピュータは、チェスのチャンピオンを負かすまでになっている。エキスパートシステムは医診断の助言を与えるまでになっているし、投資ポートフォリオを管理する単純なプログラムは、投資の専門家よりパフォーマンスがすぐれていたりする。このようなシステムは、個人の自己イメージにどのような影響を与えるだろうか。マシンの能力が個人の能力を多くの分野で凌駕し始めたとき、自隊心にどのような影響がでるだろうか。
マシンが知性をもつと言っても、人間のそれとは根本的に異なると主張する人々も多い。なぜなら人間は生物であり、マシンは機械だからである。つまりマシンは、人間の意思決定プロセスを再生産することはできないというわけだ。マシンも人間と同じ決定に達するかもしれないが、そのような決定は、人間によるものと同じには立っていないというわけだ。それでは、どの程度異なる種類の知性が存在するのだろうか、そして人間以外の知能が提案した決定に従うことは倫理的だろうか。
『コンピュータ・パワー:人工知能と人間の理性』の中でジョセフ・ワイゼンバウムは、人工知能の無間な適用に対して、次のような反対の主張をしている。
>>
コンピュータには、司法的決定を下すことや、精神医学上の判断を下すこともできる。それらは、もっとも我慢強い人間がするより、はるかに複雑な方法で硬貨を投げ、その裏表により決定を下せる。論点は、コンピュータにこういった仕事をさせる“べきではない”ということである。ある場合に、コンピュータが正しい決定を下すこともあろうが、それは常に、かつ必然的に、人間が喜んで受け入れるべきではない根拠によっている。
「コンピュータと精神」についての多くの論争が行われた。ここで私が結論することは、真の論点は技術的なものではなく、また数学的なものでもなく、倫理的なものなのだということである。それは、何々が、「できるか」といった問によって答が得られる性質のものではない。コンピュータを応用する上の制限は、究極的には、何をなすべきかという観点からのみ述べることができる。
これから生じるもっとも初等的な見識は、今日、コンピュータに思慮分別を与えることは不可能であるから、コンピュータに思慮分別を必要とする作業を与えるべきではないということである。
秋葉忠利訳、「コンピュータ・パワー 人工知能と人間の理性」、サイマル出版会、1979年
<<
読者は、この節がコンピュータ科学というよりも空想科学ではないかと思うかもしれない。しかしながら”コンピュータが社会を乗っ取ったらどうなるか”という疑問に対して、そんなことは起きっこないという態度で考えることを拒否していたのは、そう遠い昔の話ではない。しかし多くの点で、その日は到来してしまっている。コンピュータ化されたデータベースが、劣悪な信用情報を報告したら、犯罪歴があると、あるいは当座預金口座が借越しになっていると報告したら、コンピュータの出力とあなたの主張とどちらを人々は信用するだろうか。航空管制システムが動作して、霧のかかった滑走路の位置を誤って示したら、航空機はどこに着陸するだろうか。さまざまな政治的決定にどのように世論が反応するかを予測するのにコンピュータが使われるようになったとしたら、どの決定を政治家は採用するだろうか。読者は、“コンピュータがダウンしているので対応できません”と事務員が言うのを、何回くらい聞いたことがあるだろうか。そのとき責任は、だれに(何に)あるのだろうか。われわれは、すでにコンピュータに取り囲まれた社会に住んでいるのではないだろうか。
<< -
【推薦コメント】
シス科1年の時に読みたかった.ハーバード,UCバークレイでも採用されている定番教科書.人によっては物足りないかもしれないが必ず学びがある.章ごとに知識を確認する演習問題と考える力をつける社会問題がある.
<情報学部 Sさん>
企画コーナー「企画本棚2015-後輩に贈る本」は(2Fカウンター前)にて展示中です。どうぞご覧下さい。展示期間中の貸出利用は本学在学生および教職員に限られます。【展示期間:2015/4/13〜】
湘南OPAC : http://sopac.lib.bunkyo.ac.jp/mylimedio/search/book.do?target=local&bibid=1657745 -
貸し出し状況等、詳細情報の確認は下記URLへ
http://libsrv02.iamas.ac.jp/jhkweb_JPN/service/open_search_ex.asp?ISBN=9784048869577