イルカの肌はナスのよう

おいでくだすった あなたへ キス を

CS関連の本をいろいろ読んだ(2022年度)

2022年度は、コンピュータサイエンス(以降CS)の理解を深めるために、何冊か書籍を読んできました。 理由としては、エンジニアとして今後も生きていくうえで、CSを勉強しておきたいと考えたためです。 学びたい分野としては、CPU、コンピュータの動作原理、アルゴリズムとデータ構造などです。
本日紹介する中には途中までしか読めていないものもあり、不完全燃焼ではあるのですが、一旦の区切りとしてそれぞれの感想を記載します。  

読んだ本の感想

コンピュータはなぜ動くのか

  • タイトル:コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~
  • 著者:矢沢久雄
  • 発売日:2003/6/2
  • ISBN-10:4822281655

IT業界に身を置く方であれば皆さんご存じの「○○はなぜ動くのか」シリーズです。こちらの「コンピュータはなぜ動くのか」は、CSを学ぶ一冊目として非常に有名な本です。 この本は、コンピュータに関わる広い分野を説明しています。

CPUやアセンブリの部分などは読みやすくも重厚であり、読んでよかったと思いました。
コンピュータについて学びたいと思ったすべての人におすすめです。

コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~

プログラムはなぜ動くのか

  • タイトル:プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識
  • 著者:矢沢久雄
  • 発売日:2007/4/1
  • ISBN-10:4822283151

こちらも「○○はなぜ動くのか」シリーズですが、プログラムの動作についての本です。 2進数、誤差、メモリ、ディスク、コンパイル、OS、シミュレーション、アセンブリなどについて記載されています。

特にアセンブリの章は内容が濃く、とても読み応えがありました。 「低レイヤについて学びたい」と思っていた私にとってはピッタリの本でした。読んでよかったです。

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

思考する機械 コンピュータ

  • タイトル:思考する機械 コンピュータ (草思社文庫)
  • 著者:ダニエル ヒリス
  • 発売日:2014/6/3
  • ISBN-10:4794220588

こちらもCSに関して有名な書籍です。 ブール代数から始まり、論理回路、オートマトン、情報理論、並列回路、遺伝アルゴリズムなどが説明されています。
「コンピュータをコンピュータたらしめるのはその理論である」といった主張のもと、理論的な側面について深く書かれています。
この本を読むと、著者の主張が伝わってきますし、著者のコンピュータへの愛と理解がすさまじいことが分かります。

しかし、私にとっては難しかったです。あくまで文字ベースなので、結果的にフワっとした理解で終わってしまった感じがしました。
まだ勉強を続けて、自分の理解が深まった後で読み直してみたいと思っています。

思考する機械 コンピュータ

揚げて炙ってわかるコンピュータのしくみ

  • タイトル:揚げて炙ってわかるコンピュータのしくみ
  • 著者:秋田純一
  • 発売日:2020/8/19
  • ISBN-10:4297116014

こちらは別のブログ記事でまとめました。 さらっと楽しく読めるよい本です。 https://jigokukamakiri.hatenadiary.com/entry/2023/02/06/212838

コンピュータシステムの理論と実装

  • タイトル:コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
  • 著者:Noam Nisan(著), Shimon Schocken(著)、 斎藤康毅(翻訳)
  • 発売日:2015/3/25
  • ISBN-10:4873117127

この本も言わずとしれた本です。 こちらは通称「Nand2Tetris」と呼ばれていますが、その名のとおり、NAND回路から始まって、一つ一つコンピュータの構成要素を組み立てていき、 作成したコンピュータの上でアプリを動作させる、という内容の本です。

私は2章の途中で挫折してしまいました・・・。本当に自分でひとつひとつを組み立てていくので、かなりの時間がかかります。 業務で忙しいときもある中で、モチベーションを保ってこの本をやりとげるのは難しかったです。 しかし、この本をやりとげたらエンジニアとして世界が変わるだろなとは思いました。とりあえず、今は本棚に置いておきます。

コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~ | 久雄, 矢沢, 日経ソフトウエア |本 | 通販 | Amazon

動かしてわかる CPUの作り方10講

  • タイトル:動かしてわかる CPUの作り方10講
  • 著者:井澤 裕司
  • 発売日:2019/8/21
  • ISBN-10:4297108216

こちらもCPUを構築することでその原理を学ぶための本です。 この本の特徴ですが、アーキテクチャを決定し、論理回路から初めてCPUを作成していくボトムダウン方式ではなく、 ソフトウェア側を作成してからハードウェア側を作るトップダウン方式を採用しています。 それによって、CPUの全体像が把握しやすくなっています。 最終的にはパイプライン処理も実装し、かなり高度なCPUが作成できます。

私が読んだ感想として、必要な知識の一つ一つをごまかさず丁寧に説明されていると感じました。 私としては、上記の「コンピュータシステムの理論と実装」よりも取り組みやすいと思いました。 今この本の2週目を読んでいるところなのですが、この本の内容が理解できれば、低レイヤについて詳しくなったと自身を持って言えると思っています。 2月~3月中でやりとげたいと思います。

動かしてわかる CPUの作り方10講 | 井澤 裕司 |本 | 通販 | Amazon

独学コンピュータサイエンティスト

  • タイトル:独学コンピューターサイエンティスト Pythonで学ぶアルゴリズムとデータ構造
  • 著者:コーリー・アルソフ(著)、清水川貴之(翻)他
  • 発売日:2022/8/26
  • ISBN-10:4296070347

アルゴリズムを勉強するためにLeetCodeを進めていたのですが、その副読本として買いました。 アルゴリズムとデータ構造という広い分野の中で、重要な内容をピックアップして丁寧に解説しており、必要十分な内容だと思いました。 コードもpythonで書かれているので、とっつきやすいです。おすすめです。

独学コンピューターサイエンティスト Pythonで学ぶアルゴリズムとデータ構造 | コーリー・アルソフ, 清水川 貴之, 新木 雅也, 大村 和子, tell-k |本 | 通販 | Amazon

最後に

何冊か読んできた感想ですが、まだまだ長い道のりだなと思います。 しかし、これからも自分で考えて手を動かすことをコツコツ続けていれば、チョットデキルと言えるレベルまではいけそうな手ごたえは感じました。 先人たちの叡智に触れられることを感謝して楽しみたいと思います。

「揚げて炙ってわかるコンピュータの仕組み」を読んだ

  • タイトル:揚げて炙ってわかるコンピュータの仕組み
  • 著者:秋田純一
  • 技術評論社

どんな本

コンピュータを「揚げて」「炙って」、解析、再構築することでコンピュータの仕組みに迫ろうという本です。 一般向けの図書なので、コンピュータに関心がある中学生~高校生なら読めそうな難易度だと思いますが、一部難しい部分もあります。

私はコンピュータを一般向けに分かりやすく説明しようと試みる本が好きで良く読んでいます。 この本はタイトルに惹かれて購入しましたが、 揚げて炙るという発想が面白いですし、 著者のコンピュータや半導体業界への考え方はとても勉強になりました。

1章ソフトウェアとハードウェアの世界の境界

コンピュータが進化していき、ソフトウェアとハードウェアの両方が複雑化してきた。
ソフトウェアとハードウェアは知識体系としても学問としても独立してきた。両方を完全に理解するのは非常に難しい状況になっている。
しかし、一つのメリットとして、ハードウェア、ソフトウェアの専門家はそれぞれの分野に専念できるため、より効率的に目標を達成できる。 ソフトウェア屋はソフトの振る舞いだけを考えればよい(ブラックボックス)。

ここで、ブラックボックスの中身を知ればいいことがある。

コンピュータの中身=集積回路 。 集積回路の原料はシリコンである。 シリコンは地球上に大量に存在するためすぐに手に入る。
シリコンから半導体の性質をもつ材料を作ることができる。

コンピュータの回路の性質

集積回路のサイズを小さくしても機能は変わらないので、 同じシリコン材料にたくさんの機能を入れられる。
同じ機能を小さなシリコン材料で実現できる。

サイズが小さくなりすぎると、量子力学的な現象が見られる。
トンネル効果・・・電流を絶縁体で止めているはずなのに、一定確率で電流が流れてしまう現象。

ムーアの法則(ざっくり)

半導体チップの中の回路を半分の大きさで作ると

  • 回路の動作速度が2倍になる
  • 同一価格で機能が4倍に上昇する
  • 同一機能ならば価格が1/4に下がる

2章 ソフトウェアから近づいてみる

内容

  • インターネットでどのように情報を通信するのか
  • コンピュータは受取った情報をどのように処理するか
  • マイコン

私が知りたかった「低レイヤ」的な話から離れていると感じたので、2章は割愛します。

3章ハードウェアから近づいてみる

半導体=導体と絶縁体の中間 導体になったり絶縁体になったりする。 半導体を3つ組み合わせることで、トランジスタをつくる。

トランジスタはコンピュータの最小単位である。
半導体を組み合わせることで、論理回路が作れる(AND回路、OR回路 etc.)。
論理回路を作るとき、トランジスタを配線するのはすごく大変。   

回路素子と配線を一緒に半導体材料の中に作りこんだものを「集積回路」という。 集積回路は、半導体材料の上に印刷に似たような加工を行うことで簡単に製造できる。

論理回路を組み合わせれば、演算回路が作成できる。

例:メモリAとメモリBの値を取得してメモリCに格納
演算回路を使用し、データの流れを回路で作ればよい。これを順序回路というが、コンピュータは順序回路という論理回路だと言える。

プログラム=命令に応じてどことどこをつなぐかを制御している。 プログラムの実行に従い、順番に命令を一つずつメモリから読みだし、それに合わせて全体を制御(つまり実行)していく。

4章 揚げて炙って中身を覗く

プリント基板を揚げる

電子機器を分解してみる・・・プリント基盤、集積回路をはじめとするさまざまな電子部品がある。
電子部品をプリント基板から取り出す簡単な方法として、「油であげる」。
基盤を油に沈め、200度まで熱する。基盤をお箸でつつくと部品が外れる。

集積回路を炙る

半導体チップは、プラスチック部品の中に入っているため直接確認できない。
半導体チップを見るために集積回路を炙る。集積回路を鉄皿の上におき、ガスバーナーで炙る。 取り出したICはキラキラして綺麗 w。

5章 取り出したチップを解析してみる

安価なチップと高価なチップを顕微鏡で確認して比較する。
純正のチップとニセモノのチップの比較などもしている。

実際のチップと見ると、「ムーアの法則」を肌で感じることができる。

6章 コンピュータの再構成

命令

RISC-Vの命令フォーマットについて詳細な説明が記載されている。(この本の中でも一番難しい部分)。

CPUの動作

CPUの動画については、YouTubeなどにわかりやすい動画があったのでこちらを参考。 参考: 基本情報技術者試験対策 2 CPUの働き CPU、レジスタ、CPUの命令サイクル - YouTube

  1. フェッチ:プログラムカウンタに記憶しているアドレスから命令を取得し、命令レジスタにセットする(命令とオペランドをそれぞれセットする)
  2. デコード:デコーダが、命令レジスタの命令部のコードを解読する
  3. 対象データの読み出し:処理の対象(命令レジスタのオペランド部で指定されるアドレス)のデータを読み込む
  4. 実行段階:命令を実行する(必要に応じてALUで演算などを行い、汎用レジスタに記憶する)。
  5. プログラムカウンタの更新:命令の実行が更新したら、プログラムカウンタを次の命令が格納されたアドレスに送信する

レジスタの役割

名称 場所 役割
プログラムカウンタ 制御装置 次に実行する命令のアドレスを記憶
命令レジスタ 制御装置 実行する命令を一時的に記憶
インデックスレジスタ 演算装置 命令のアドレスを修飾する番地を記憶
ベースレジスタ 演算装置 プログラムの先頭のアドレスを記憶
アキュムレータ 演算装置 演算をする際の演算件アの一時的な記憶
汎用レジスタ 演算装置 さまざまな用途でデータを記憶

7章 物理世界とコンピュータの境面

Lチカで感じるパラダイムシフト

Lチカ・・・電子回路の定番で、LEDをチカチカさせる回路のこと。 昔は発振回路を使用していたが、今はマイコンで作るのも一般的になっている。 発振回路でLチカをつくるよりも、マイコンを作った方が部品数が少なくなり安くなる。

これはコンピュータが安く小さくなったことによるパラダイムシフトである。

個人の半導体製造

半導体は設備だけで1億円ほどかかる。設計に必要な情報も機密情報のため一般公開されていない。
そのため、半導体は買うものであり、作るものではないという考えがふつうである。

著者はLチカを作るための半導体チップを作成して動画を公開したところ、「もったいない、無駄遣い」などのコメントをたくさんもらったそうである。 www.youtube.com

しかし、半導体製造が一般人でもできるようになれば、あきらめていたことが実現できたり、新しいプロダクトやビジネスになるかもしれない。 著者は「集積回路の民主化」を目指す「MakeLSI」というプロジェクトを進めているそうである。

FrontPage - PukiWiki

「情熱プログラマー」を読んだ

情熱プログラマー ソフトウェア開発者の幸せな生き方 | Chad Fowler, でびあんぐる |本 | 通販 | Amazon

  • タイトル:情熱プログラマー ソフトウェア開発者の幸せな生き方
  • 著者:Chad Fowler
  • 監修:でびあんぐる

著者について

Chad FowlerさんはプロのJAZZミュージシャンであり、ソフトウェア開発者であるというめずらしい経歴をお持ちの方です。 下記はインタビュー記事がありました。 magazine.rubyist.net

ざっくりとした感想

本の構成としては、各項目ごとに2~3ページに分かれていて読みやすかったです。
また、「今すぐ始めよう!」という項目があり、読者が初めに行うべき実践的な内容が書かれているのがよかったです。
定期的に読み返したくなるような、熱いメッセージがある本でした。

印象に残った内容

4. 一番の下手くそでいよう

一流のプレイヤーが集まる環境に身を置けば、自分が変化していきだんだんとなじむことができる。方法としては、OSSの参加などがある。

8. スペシャリストになろう

何かのスペシャリストであるということを、単にほかのことを知らないという意味で使わないこと。

自分も最初の案件に配属されるときに「Javaプログラマーです」と名乗ったことを思い出します。単に他を知らなかっただけですね。
今後はテクノロジについてコツコツ学んでいき、スペシャリストに近づいていきます。

9. 自分の人生を他人任せにするな

特定の会社によって作られた特定のテクノロジ上にキャリアを築こうとしないこと。
通常、実装の詳細は秘密になっているので、学んでいったときに必ず壁に行きついてしまう。
どうしても何かの1つのテクノロジに注力したいのであれば、オープンソースを選ぶ。

私はAWSを業務で使用しているのですが、書かれていることについてとても共感しました。最終的には問い合わせるしかない・・・ということがとても多いです。
ベンダや製品などにとらわれない、広い意味での技術力が大切なのだと思いました。

15. 一に練習、二に練習

実務で練習するという考えは捨てる。
自分の時間を投資して練習し、実務でアウトプットする。
自分になにが必要かを見極め、自分の力を伸ばすような練習をする。

仕事の取り組み方について

11. 魚の釣り方を学ぶ

自分の仕事の中で完全に理解していないことについて、深く掘り下げて考える。難しくても考えることそのものが大事。
これ以上掘り下げできないところまで進める。そうすれば十分理解できたと言える。

12. ビジネスの仕組みを学ぶ

利益を上げるか費用を削減することでビジネスに貢献するのが自分たちの役割である。
しかし、エンジニアはビジネスのことを理解しようとしない人が多い。
まずは、ビジネスの基本に関する書籍を1冊読むことから始めるといい。

23. 今の職務を全力で

目の前の一つ一つの仕事に注力する。そうすれば、日々の小さな成功を感じることができ、ビジネスの重要な問題に関わっている実感が得られる。
大きな夢ばかりを追いかけず、自分の仕事に価値を照らしてくれる小さな幸せを感じよう。

28. 8時間燃焼

どう頑張っても8時間以上働くのは無理なくらい容赦なく働くべき。
仕事には8時間しか使えない、「やって、やって、やるしかない」という気持ちで仕事に取り組む。

このような考えで仕事に望めたことは今までなかったです。生産性が上がるので全てにおいてプラスになりそうです(ただしめちゃめちゃ疲れそう)。

「応用情報技術者試験」に合格した(2022年秋)

応用情報技術者試験に合格しました。
自分はIT業界歴4年目だったので、そろそろ応用情報でも受けようかということで受験しました。
私の勤める会社は毎年目標設定があるのですが、「応用情報技術者試験合格」を目標に設定したので、負けられない戦いになりました。

これから受ける人へのメッセージ(簡単版)

  • とにかく、一度過去問を午前、午後通しで解いてみましょう
  • 午後試験の準備をしっかりやりましょう

試験日時、場所

  • 日程:2022年10月9日(日)
  • 場所:日大キャンパス(神保町)

勉強期間

3か月前に勉強開始。実際の勉強期間は1か月半くらい。

勉強内容

  • 初めの1か月間は「情報処理教科書 応用情報技術者 テキスト&問題集 2022年版」をだらだら進めた
  • そのあとの1か月半ほどは業務が忙しかったり、試験までまだ余裕あるなと思ってモチベーションが下がってサボった
  • 試験2週間前となり慌てて勉強再開。「令和04年【秋期】応用情報技術者 パーフェクトラーニング過去問題集 (情報処理技術者試験)」を開始した
  • 演習量が不安だったため、追加で5回分の過去問と解いた

情報処理教科書 応用情報技術者 テキスト&問題集 2022年版 | 日高 哲郎 |本 | 通販 | Amazon

令和04年【秋期】応用情報技術者 パーフェクトラーニング過去問題集 (情報処理技術者試験) | 加藤 昭, 高見澤 秀幸, 矢野 龍王 |本 | 通販 | Amazon

書籍のレビュー

情報処理教科書 応用情報技術者 テキスト&問題集 2022年版

かなり分厚い本で、試験内容全体が網羅されていると感じました。 こちらは辞書的に使うのがよいかと思います。

令和04年【秋期】応用情報技術者 パーフェクトラーニング過去問題集 (情報処理技術者試験)

こちらの本はとてもおすすめです。 午前問題は左側に問題、右側に解答が書かれているので、その場で解答をチェックしながらどんどん進めることができました。解答もとても丁寧です。

試験前の心持ち

午前試験は問題なさそうだが、午後試験が厳しいと思ってました。過去問を解いた感じだと40点取れればいい方だと思っていました。
しかし、「できるだけのことはやろう」という思いで試験前日まで過去問に食らいつきました。

受験後

受験直後の感想としては午後試験が易化していると感じました。もしかしたらいけるかも!と思いました。
試験の問題冊子を持ち帰ることができますので、解答した箇所を印しておき自己採点をしました。
午前試験は当日解答例が発表されるので採点しましたが、問題なしという感じでした。
午後試験は公式解答が発表されるまでかなり期間が空くので、過去問道場で他の方の解答を見たり、予備校?が出している解答例をみて採点しました。
部分点を一切無しにして厳しく解きましたが58点くらいでした。合格は厳しいかなと思いました。

試験自己採点

  • 午前:78点くらい
  • 午後:58点くらい

合格発表

12/22(木)となり合格発表の日になりました。 受験票に記載された番号をサイトに入力してみると、なんと合格していました。

試験結果
推測ですが、ちょうど自己採点では部分点無しにしていた箇所で、部分点がもらえたのかと思います。

午後試験の取捨選択について

午後試験は、「情報セキュリティ」のみが必修で他4つは選択方式になります。
応用情報試験で必ず話題になるのが、どれを選択するのか4つとも決めておくか、その場で決めるかという話ですが、これはどっちもどっちだと思います。

自信がある方、時間に余裕がある方は4つを事前に決めて準備するのがいいと思います。 無駄がないですし、知識を深めることができるので良いと思います。 しっかりと点数が取れるのであれば、「他の方が簡単だったのか、くやしい」ということはないですからね。

しかし、時間も自信もがない方は、試験問題を取捨選択する練習をするといいです。 過去問演習をする段階で、どれが点数を取りやすいのかランクを決めておきましょう。 準備したのに当日選択しないという場合もあると思いますが、これは資格試験合格という意味では無駄な勉強になってしまいます。 それなので、Dランクとして絶対に解かない問題も決めてしまうと良いです。

  • Aランク:絶対に解く
  • Bランク:この中でどれかを選ぶ
  • Cランク:Bランクがどうしても難しかったら選ぶ
  • Dランク:絶対に解かない

私の場合は下記でした

「午後試験はガチャだ」とおっしゃる方もいましたが、当日自分が解けそうなものを選ぶようにしましょう。 22年秋試験でいうと、「組込みシステム」がかなり簡単だったらしいです。私は解きませんでしたし見る余裕もありませんでした。

反省点

はじめの1か月間ダラダラとテキストを進めたこと

私が使用したテキストはかなり分厚かったのですが、テキストを進めているうちに初めに勉強したことを忘れるというバカな勉強の仕方をしてしまいました。 過去問演習を中心にして、テキストは辞書的に使えばよかったと思いました。

始めに午前、午後通しで過去問を解いてみるべきだった

勉強開始時に一度通しで過去問を解いてみれば、どんな知識が必要になるのかがわかるため、試験のためにがやるべきこと明確になってモチベーションも保てたかなと思いました。

午後試験の準備

応用情報は「午後が鬼門」と言われますし、どんなものなのか早めに体感しておけばよかったです。 午後問題を解くのは根気がいりますし、できないのが怖くてどんどん後回しにしていました(病気だったら怖いから健康診断を受けない心理)。
試験日の2週間になってようやく午後試験過去問と解いてみたのですが、想定よりも解けずとても焦りました。
午後試験の対策は余裕をもって進めておいたほうが良かったです。

ブログ始めます

初めまして。本日からテックブログをはじめます。

自己紹介

このブログには、私が勉強したことをまとめていきます。 はじめは書籍のまとめが多くなりそうですが、将来的には皆さんの役に立つようなナレッジなど記載していきたいです。