やさしいコンピュータ科学 (アスキーブックス)

  • アスキー
3.32
  • (4)
  • (4)
  • (30)
  • (0)
  • (0)
本棚登録 : 160
感想 : 6
本ページはアフィリエイトプログラムによる収益を得ています
  • Amazon.co.jp ・本 (495ページ)
  • / ISBN・EAN: 9784756101587

作品紹介・あらすじ

コンピュータ科学における最も刺激的かつ深遠な概念を解りやすく解説。

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • 図書館で借りた。
    コンピュータサイエンスの名著であり黎明期のバイブル的な教科書。どんな内容なのか、図書館の書庫から掘り出してもらい、読んでみた。
    目次のバランスは、「コンピュータサイエンスの大枠は今も昔も変わらない。大事な事は大事なんだ」「私が習ったものより、ハードウェア・電気科学的な側面が多少強いかも」という2点を感じ取った。
    中を読み進めると、ソフトウェア・アルゴリズムといった章は、具体的なプログラム言語がPascalだったりして、さすがに令和の現在で実用するには向かないと思った。特に人工知能は、あくまで当時を知る古典でしかない文章だ。
    それに対し電気回路・トランジスタなどの章は、個人的に学び足りないとも感じているので貴重。電気系を専門としている人には物足りない内容だろうが、電気系を大学でほぼ学ばずに騙し騙しメーカーでエンジニアをやっている私にとっては、読み重ねても価値がある章だと思った。コンピュータサイエンスとして必須かと言われれば…、微妙だが。

    総じて、名著であることは確かだが、例えばこれから学ぶ大学1年生に勧めるかと言うと、「他に読むべき本はたくさんある」であって、「昔有名だった本」でしかないと思った。

  • # 1周目読み終えた 2022-11-28
    原題は「Geat Ideas in Computer Science」という。「Great Ideas」は「重要概念」という意味。訳された「やさしい」というのもまずまずだけど、どちらかというと原題の方がこの本の特性をよく表している。

    まずプログラミングに触れてみることから始まる。対象読者はおそらく、プログラミングの経験が一切ない人も想定されている。現代なら、ググってPascalの環境を揃えることができる程度ののスキルがある人なら誰でも読める、というと言いすぎかもしれない、一応、大学の教養過程で使われる(た)テキストのようだ。最初のいくつかの章で、Pascalで初歩的なプログラムを書きながら、基本的なルールを学ぶことになる。ルールを全部学ぶのではなく、一部分しか学ばない。あまりに簡単だったので、最初は物足りないなと思っていた。しかし、ここで学んだことは余計なものが一切なく、のちの章で重要な意味を持ってくるように構成されている。どこをとっても無駄がなく、章の区切りに気の利いたマンガも入っていて、親しみが湧く。

    素晴らしい内容だった。ここ数年で読んだ本で、最も良かった。

    ## 14章を読み終えた
    人工知能の章。もしかしたら、これまで学習してきたことはここに収束するのかもしれない。人工知能は、今コンピュータに関する最もホットな話題でもある。何か革新的な技術が現れて、突然出てきたように捉えられている傾向があるかもしれない。その技術はもしかしたらディープラーニングなのかもしれないが、この本の当時1990年代にも、それよりずっと前の60年代から研究が続けられてきて、それが実を結んだと考えるほうが良いように思える。今の人工知能を取り巻く状況は、社会現象や企業による商業的な利用などから、直接生活スタイルを変えてしまう側面が注目されている。現代のプログラマーは、このホットな話題に無関心でいることはできないだろう。この本はコンピュータサイエンスの本なので当然かもしれないが、表面的な現象の観測だけにとどまらず、その基礎理論や概念の中へ入っていこうとする。人工知能に関する章で総括されるというのは、なかなか今の時代にあって理想的ではないかと思う。Pascalでよちよち歩きのプログラミングから、コンピュータやプログラムの仕組みを学んで、最後に人工知能ですべてをまとめ上げる、という壮大な本だった。

    ## 13章を読み終えた
    計算不能性の章。現実のプログラミングの役に立つのかどうかという視点では微妙なところだけど、興味深い。ここまで読み進めてきた読者なら大抵は面白いと感じるだろう。これも著者の手腕によるところが大きい。オライリーの「計算できるもの、計算できないもの」という本を持っているので、それもまた読んでみようと思う。

    ## 12章を読み終えた
    並列計算の章。システムを並列化しても、最初は高速化が見込めるが、入力や計算対象が増えてくるに従い、効果は薄れていく。前章のハノイの塔がいい例で、円盤の数が増えればやはり現実的な時間で解くことはできなくなる。コネクショニストアーキテクチャは、これまででの話題の中で一番難解かもしれない。ディープラーニングとの考え方が似ていて、何かしら関連があるのかもしれない。

    ## 11章を読み終えた
    プログラムの実行時間の章。単に効率の良いプログラムを書きましょうとか、アルゴリズムを選択しましょうというものではない。まだアルゴリズム(計算方法)が存在しない問題をどうするかという課題について。計算方法が存在しないとは、現実的な時間内に完了することができないことを意味する。ちょっとした計算対象の数が増えると、計算が完了するまで、数年、数100年、数億年とまたされることになる。前の章にも出てきた、ハノイの塔がそうなる。これらの計算オーダーは指数関数になっていて、計算困難と呼ばれる。逆に、計算容易と呼ばれる問題もある。計算オーダーがnの多項式になっているもの(n、n^2、n^3なども含める)は、計算容易と呼ばれるらしい。プログラミングの常識では、n^2は遅いし、n^3は遅すぎるとされるだろうから、これを容易と呼ぶのは意外かもしれない。この章では、効率的なプログラムを書くのが目標ではなく、現段階で不可能とされている問題を可能とすることで、計算機科学が飛躍的に発展する可能性、あるいは諦めを説いている。

    ## 10章を読み終えた
    言語の翻訳の章。Pascalで書かれたプログラムをアセンブリ言語に翻訳する仕組み。扱うのはごく一部で、代入、加算、乗算、ループのみ。実際に翻訳を行うプログラムが書かれているわけでもなく、仕組みを解説するというところにとどまる。また、ここで採用されている方法が唯一の方法というわけでもないだろう。yaccを使った〜というようなものでなく、一からその手法の解析を始める。巧みな展開で、一つ進むごとに頭の中のもやもやが少しずつ晴れていくようだ。そして、6章からこの10章までで、プログラムが動く仕組みが本当につながった。この本はたまたま店頭で中古で見かけてなんとなく買ったものなのだけど、手にすることができて本当に運が良かった。

    ## 9章を読み終えた
    マシンアーキテクチャの章。ほぼアセンブラ・マシン語入門と言った感じ。Intel 8088の一部を模倣した、P88という架空のアーキテクチャで、プログラミングする。実マシンにしろ仮想マシンにしろ動かすことができないので、直接的な経験値は得られない。しかし、それを補うくらい理解しやすい内容になっている。これまでの章とつながっていて、アセンブリ言語で書かれたプログラムがどのように解釈されて、電気的な出力に変わるかをイメージできるようになっている。これまで見たどんなアセンブラ入門の本よりも分かりやすい。次の章で、高級言語をアセンブラに翻訳することとなり、日常的なプログラミングが一つにながることとなる。

    ## 8章を読み終えた
    超大規模集積回路の章。前章のトランジスタを発展させて、チップに数100万個のトランジスタを詰め込めるようになる技術の解説。この本が書かれた当時、1993年ごろは100万個くらいだったようだが、現代のCPUは10億個以上になっている。例えば、Ryzen 9 3700Xは、9,890,000,000個らしい。

    + [Transistor count - Wikipedia](https://en.wikipedia.org/wiki/Transistor_count)

    トランジスタの製造工程
    完全に理解できたわけではないけど、ずっと不思議だった、もやもやしていたことが解消していくようだった。

    ## 7章を読み終えた
    トランジスタの章。原子の構造から始まる。シリコンに燐あるいはホウ素を添加して半導体を作る。これがトランジスタのP型とかN型の材料になる。電子工作でPNPとかNPNとか言われたとおりにやってたけど、少し理解が進んだかもしれない。NAND回路の有用性も見ることができた。

    ## 6章を読み終えた
    電気回路の章。単純な電池と電球からなる回路からスタートして、加算を行う回路まで。これ以上ないくらいシンプルな作りになっている。頑張れば足し算をするCPUが作れそうな気にもなる。一応は理解して読んだつもりだけど、練習問題をスキップしていることに不安を覚える。

    ## 5章を読み終えた
    ソフトウェア工学の章。短い章で、中身がぎゅっと詰まっている。これまでの初歩的な乱雑なコードとは打って変わって、高い目標を掲げている。このような段階でこれほどの理想を掲げるのはどうなのだろうか、という気がしないでもない。でもこれは我々の理想ではない。ソフトウェア工学が目指しているところを紹介しているだけであると考えればよいだろう。

    ## 4章を読み終えた

    ### プロシージャ
    プロシージャが導入される。すべての引数にvarをつけて参照渡しとしている。そして、出力をすべてそれらの引数から得るようにしている。このスタイルには賛同できない。

    ### データベース
    現代のデータベースと認識されるものとは異なっている。原始的なデータベースということなのだろうか。データベースの議論において、普及している考え方なのだろうか。このデータベースが、RDBMSに発展していくのかどうかは興味がある。

    ### ハノイの塔
    まずは、再帰を使わずに実現している。これはかなり込み入っている。関心の高い問題なので、一度ちゃん追いかけて完全に理解してしまいたい。普通とはちょっと違う視点から解決しているのだが、こういうのもありだ。いろいろなやり方があっていい。

    #### クイックソート
    再帰の例ということで扱われている。これはそんなにおかしな感じではない。よくあるやり方で、特別に変なところはない。

    ## 3章を読み終えた
    「関数」とタイトルにあるが、Pascalの関数はまだ登場しない。概念的なツール、考え方としてのみ関数を導入している。Pascalに関しては、配列が登場している。結構荒っぽい使い方をしている。初歩的とも言える。練習問題は全てスキップしている。これでいいんだろうかという不安がよぎる。

    ## 2章を読み終えた
    練習問題は全てスキップ。文字列関連の関数が出てくる。

    + copy
    + length
    + pos

    文字列は + で連結できる。整数型も登場する。とてもやさしい内容だった。

    ## 1章を読み終えた
    Pascalを始めよう、といった感じの内容。決定木(decision tree)というあまり聞き慣れないプログラムを作成する。難しそうに聞こえるかもしれないが、何ということのない、ただifで分岐して質問に答えるだけのもの。そのプログラムのために、以下が導入される。

    + プログラムの構造
    + writelnとreadln
    + 変数
    + if-then-else

    冗長過ぎるくらい長々と解説されている。練習問題はなかなか厄介というか面倒だ。
    一部を除いてほぼスキップした。そんなに今後に影響しないとは思っている。しかし、学習効果は少し下がるかもしれない。

    ## はじめにを読んだ
    読みやすい。気分を上げてくれる。わくわくする。どこから読んでもいいらしいけど、最初から通して読む。

  • コンピュータはあまり好きじゃないので(嘘)、コンピュータ関連の本についてはあまりコメントしたくないのですが、まぁ、そこそこ読んで来たものを紹介しましょう。
    いろいろと紹介したいところですが、専門のCS(Computer Science)の本を一冊だけ選べ、と言われたらこれをあげるしかないでしょうね。ほんとは、Aho さんや Wirth さんのデータ構造の本をあげたいのですが、それらはデータ構造とアルゴリズムに限定した本なので、「一冊だけ」と言われると、やっぱりこの本でしょうか。
    ただし、注意しておきますが題名が大ウソです(笑)。ぜんぜんやさしくなんかありませんよ、この本は。MIT の教科書ですからね。
    ですので、これからコンピュータのことを「ちゃんと」勉強しようと思っている人、または、ちゃんとした技術者になりたいと願っている人はトライして下さい。1、2年では歯が立たないとは思いますが、この本を理解できたら現場の3~5年生の実力があると思って良いと思います---あくまで、基礎技術についてですけど。
    時代は変わっても基礎は変わらない---と私は信じているのですが---そう思う方にお薦め。

  • 学生時代教科書として購入した書籍。近いうちに読み返そうと思う。

全6件中 1 - 6件を表示

和田英一の作品

  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×