見出し画像

コンピュータサイエンスの教科書

1990年代後半のアメリカ留学時に大学で使用したコンピュータサイエンスのテキストです。 思い出せる範囲内で。 大学はIowaの田舎にあるMorningside Collegeってところです。 副専攻をComputer Scienceにしていました。

ここからの移転です。 以下のような授業に対する教科書のリストとなっています。
・プログラミング言語 (C++言語)
・ソフトウェアエンジニアリング
・データ構造 (教科書名忘れました、が日本語による代替本あり)
・ハードウェア
・データベース (忘れました)
・システムアナリシス (忘れました)
・離散数学 (忘れました)
・オペレーティングシステム
・コンパイラ
・アルゴリズム (教科書名忘れました、が日本語による代替本あり)
・計算理論

プログラミング言語 (C++言語)

日本語翻訳版



最初のコンピューターサイエンスの授業としてとったC++の授業で使用。 1回パスした同じクラスを、先生と教科書が変わったあとに受けなおした時の教科書です。 1回目はパスはしたけれど、ほぼ理解できていなかった気がしたので取り直しました。 その時の教科書。 先生も変わったけれども、教科書も変わり1回目のものより3倍ほどの厚さがありビビってました。 実際は3倍厚いかわりに3倍理解しやすい教科書となっていて(←自分の体感より)、自分の中で「いいね」していた記憶があります。 結局教科書の最後のほうまでは行かなかったし。 

日本語翻訳版は読んだことがないです。 なんか3冊になってるし。。。


ソフトウェアエンジニアリング

日本語翻訳版

Windowsプログラムムズィ~ってなった本。 そのまんまですが、Windowsプログラミング(Win32プログラミングとかの呼び名も)というものについて書かれています。 実際のアプリケーションを作るときの内容がほぼWindowsのネイティブアプリを作る、と同義だった時代かー、そして隔世の感ってこうゆうのかー、って思いながらこの文書いてます。 ウィンテル時代。 今なら開発の内容がスマホ開発やWebシステムの開発になっているかも。 本自体は著者の名前からとって「ペゾルド本」と呼ばれ、Windowsプログラミングのバイブル的な本だったように記憶しています。

もう一冊ソフトウェアエンジニアリングの組織や運用についての本がありましたが名前は忘れました。 ソフトウェアやシステムの開発プロジェクトを滞りなく進めていくために考慮するもろもろの事柄について書かれていたような記憶がありますが、はっきり覚えておらず。。。 もろもろ過ぎる本だったのでほとんど覚えていないのかも。 
 その中で覚えている内容が1つ。 それは、絶対にミスのできない&バグ等不具合を出してはいけないプロジェクトの架空の設定が、原子力潜水艦の弾道ミサイル制御システムの開発設定だったことです(←少し設定うろ覚えですが)。 日本にはないアメリカならではの設定だなー、と感じた記憶が残っています。

そしてクラスはかなりギリギリでパスした記憶。


データ構造

忘れました。。。

 忘れましたが、自分が最初に挫折しそうになったコンピュータサイエンスのクラスだったような記憶があります。 後に優秀な成績で卒業、コンピュータサイエンスの有名な大学院に進学していった他の学生達の間でさえも、このクラス受講後のしばらくは、他のコンピュータサイエンスのクラスで「データ構造(Data Structures)」の名前が出るたびに「Oh, Data Structures」「 Data Structures, Oh My God」と、残念なものを見る風、ガクブル風、といった基本ネガティブな雰囲気で言及するのが流行っていましたw。 

 まだ1つ前のクラスで初めてプログラムを習ったばかりで、そのすぐ後にこのクラスを受講した学生には、自分含め、コンピュータといえば処理(CPU)、データ容量(メモリ・ストレージ)じゃね~んだよ、みたいな理解だったのかもしれません。 データ構造とか意味ね~、興味ね~、そしてそれ故地味すぎ~、俺はコンピュータで何かを処理したいんだ、だからCPUの扱いだけ教えろ、メモリ・ストレージの扱いとかいらね~、みたいな。 少なくとも自分はそんな程度の理解だったよーな記憶。

 後にプログラム経験も増え、ハードウェアの授業も取ってコンピュータの理解なんかも進むと、処理(CPU)と容量(メモリ・ストレージ)の切っても切り離せない関係の理解やその実感もわいてきましたが、このクラスを最初に取ったころは、あまりのデータ構造への興味・理解のなさから、この「データ構造」のクラスかなり苦痛でしたw。 

 先生が、あまりにも「データ構造」に興味や理解を示さない学生のために、「処理・CPU・アルゴリズム」 と 「データ容量・メモリ&ストレージ・データ構造」の関係を「Time and Space(時間と空間)」になぞらえて説明しつつ、それはまるで実際の物理の世界と変わらないように、コンピュータの半導体チップの中に独自の宇宙の法則、すなわち「時間と空間」があるようなものだ、みたいな壮大な話で盛り上げようとしてくれたりしましたw。 壮大すぎたのか、そんなに盛り上がりませんでしたがw。 先生ありがとうございました。 

 授業の課題には習ったばかりのC言語(含むC++)による、リストや2分検索木の実装もあり、自分にはかなりハードでした。 まだ、あの頃、あの部屋で、あのPCで、ひとりで実装に苦しんでいた自分の姿が、かなりはっきり思い出せますw。

データ構造おそるべしw。

上記のデータ構造のクラスはなんとかパスすることはできましたが、実際には授業の内容がほとんど理解できなかったので、後で日本でこの本を購入してほぼほぼ独学し直しました。 おかげで、この本は途中までしか読みませんでしたが、データ構造の授業の範囲の内容は理解できたと思います。 

タイトルにあるようにデータ構造とアルゴリズムがセットになっていて、アルゴリズムの計算量の視点も入っているので、(まだ処理・CPUの視点寄りな)自分としては大学の「データ構造」クラスより興味を持ちやすかったのかと思います。


ハードウェア

日本語翻訳版



授業で使った名著とされる上記の教科書「Computer Organizetion and Design(邦訳名:コンピュータの構成と設計)」にはほとんどついていけなかったので、大学卒業の数年後にこの本でハードウェアのことを少し復習して、チンプンカンプンだったハードウェアの理解も少しは進んだ、かも。

授業で使った名著とされる上記の教科書「Computer Organizetion and Design(邦訳名:コンピュータの構成と設計)」にはほとんどついていけなかったので、大学卒業の数年後にこの本でハードウェアのことを少し復習して、チンプンカンプンだったハードウェアの理解も少しは進んだ、かも、その2。


ネットワーク

忘れました。。。

大学で使用したテキストは忘れましたが、ネットワークのクラスの副読本にと日本で買ったこの本を併読しながクラスの授業受けていました。 本の版は、第2版だったかと記憶しています。

このネットワークの授業で習ったネットワークのメディアが現在ではほぼ残っていないのが印象的です。 昔すぐる。。。 唯一、まだまだ実用化は先そうだからテストには出さないかも~、的に紹介された光ファイバーだけがすっかり定着している今。。。 そして5Gからさらにその先の無線時代へ。 なかなかの未来だな今w。

そして逆に、TCP/IPの理論的・理屈的なことは今もほぼ変わらず残り続けているのはスゴイかも。 副読本のほうも改訂版が出続けてるし。 

ネットワークの授業自体は適度な難度で、いい感じでパスできたように記憶しています。 まぁ、そのころ使われてた(兼テストで覚えた)ネットワークメディアほぼ全て消えましたがねw。


データベース

忘れました。。。


システムアナリシス

忘れました。。。

が、内容が思いっきりウォーターフォール型モデルの開発の流れについてのものだったことを覚えています。 あふれでる座学感ありました。。。 システム開発を経験した今なら、あ~アレのことか~、と実感しながら読めるかもですが(ウォーターフォールより後の開発手法は載ってないですが。。。)。 

先生はいい感じの人で、授業も適度な難度だったように記憶しています。 


離散数学

忘れました。。。

忘れましたが、授業で使用していた離散数学のテキストはなかなかいい内容だったと記憶しています。 印象に残っているのは、数学の公式や定義の説明のときに、生徒が先生の説明に納得いかずめっちゃ議論していたことです。 あ~、これができた公式を覚える・使うだけでなく、そもそもの公式を作っている国の文化なのかな~、とうっすら思っていた記憶。 まぁ、実際には英語あまり聞き取れていなかったのでたいした内容ではなかった and/or 日本も大学レベルではそのように議論してます、なのかもしれないですが。 テストの内容もオープンテキストでしたが公式の成り立ちを証明せよ的な問題が出て最も手強かったように記憶しています。  

この離散数学のクラスは2クラス分あったので、ここで稼がせてもらった単位で理学士(Bachelor of Science)もどきになれた希ガス。 

たま~に本の内容を振り返ってみたくて、本の題名を思い出せないか、ネットを使って探し出せないか、とチャレンジするのですが、やはり思いだせず。。。 なんだったかな~? 茶色っぽい装丁だったように記憶しています。


ここより下はコンピュータサイエンス専攻の場合に履修するクラスのテキストです。 自分はこのすぐ下のOSのコースをドロップして、コンピュータサイエンス専攻は挫折。。。


オペレーティングシステム

日本語翻訳版

Linuxの誕生のきっかけともなった本。 著者とLinus氏は後に論争を繰り広げたりもしたようですが。

今なら以下の本あたりが新しい翻訳版でしょうか? なんだか片方プレミアム付いてるのかめっちゃ高いw



コンパイラ

自分は授業を取らなかったですが、コンパイラの授業で使われていた教科書です。 本の装丁の「虎」から、通称「タイガーブック」と呼ばれていた記憶。 本の装丁の「竜」から、同じように通称「ドラゴンブック」と呼ばれていたこちら日本語翻訳版)の本と一緒に紹介や比較されていることもありました。 コンパイラ教科書の竜虎相搏つの図か~、と思ってちょっと楽しんでいたりしましたw。 最後に確認したころの記憶では「ドラゴンブック」のほうに軍配上がりがちだったようですが。

で、こちらの日本語の本は、授業は取らなかったけれど、コンパイラには興味があったので独学しようとかつて購入したものです。 その時はほぼ読まずに一度売却。 最近になって中古本として出回っているものを発見したので再び購入してみました。 改めて購入して少し読み進めたり概要確認等してみると、最初に買ったころから何度も何度も版を重ねていたり、内容もコンパクトにまとまっている上にソースコードまで付いていたりで、この分野のいい入門書なのかと思うように。


アルゴリズム

忘れました。。。

授業はとっていませんでしたが、アルゴリズムについては知りたいと思い買った本です。 ほぼお守りと化していました。 ほとんど読んだ記憶ありません。 いつか読むぞ、読むぞとだけ思って持ってました。 意識だけ高い人でした。。。 結局アルゴリズムのほうも、データ構造のところで出てきた「定本 Cプログラマのためのアルゴリズムとデータ構造」での独学がメインとなりました。

ゲームを作りたいと思い、内容もロクに確認せず間違えて買った本です。 この本ではゲームは作れませんでした。。。 この本以降は、タイトルだけでなくしっかり内容も確認してから書籍を購入するように(あたりまえ。。。)。 ゲームは作れませんでしたが、チェス、将棋、囲碁といったゲームをプレイするアルゴリズム・AIについての考えを知ることができ、結果的に今になって最近流行のディープラーニングにも興味を持つきっかけを作ってくれました。 この書籍を購入したころの考え・技術によるアルゴリズム・AIでは囲碁における上位の人間にはほぼ勝てないという話だったので。 この本での収穫は、以後、購入前の書籍はしっかり確認するようになったことと(あたりまえ。。。)、ディープラーニング含む機械学習への興味をつなげてくれたことです。


計算理論

↑大学で売られていたこの本の内容をチラ見したら数式だらけで、まるで読める気のしない本でした。。。

↑自分は読んでいませんが、日本語に翻訳されている「計算理論」の本のなかで評判よさそうなのを一冊。 


見返すとほとんどまともに理解できてなくてワロタw。 だいたい後で日本語の本で補完してるパターンですねー。 これは(専攻挫折して)副専攻になるっすわーw。

ちなみにコンピュータサイエンス専攻の生徒は、副専攻に数学や物理が強く推奨(Strongly Recommended)されていました。 優秀な学生の中にはコンピュータサイエンス専攻に加えて、そういった科目をさらに副専攻から専攻(メジャー)に格上げして、ダブルメジャー、トリプルメジャーといった構成にして学位取得している強者もいました。 そのころ(1990年代後半)に、まだ今ほどの経済力・政治力ではなかった中国やインドから、学力の優秀さで(国から選抜されて奨学金で?)留学してきていた学生さんにそうゆう人多かったイメージです。

で、自分の場合は上記にも書いたように、最終的にはコンピュータサイエンス専攻はあきらめて、コンピュータサイエンス副専攻(Computer Science Minor)、アート専攻(Studio Art Major)として、どうにかこうにか、なんとかかんとか(←ホントこんなアップアップな感じw)、で卒業しましたw。

関連note
コンピュータサイエンスが学べる動画
コンピュータ本のメモ
Naverまとめからの移行 その2

この記事が気に入ったらサポートをしてみませんか?