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

著者 :
  • 日経ソフトウエア
3.70
  • (64)
  • (106)
  • (113)
  • (13)
  • (5)
本棚登録 : 1546
感想 : 107
本ページはアフィリエイトプログラムによる収益を得ています
  • Amazon.co.jp ・本 (296ページ)
  • / ISBN・EAN: 9784822283155

作品紹介・あらすじ

プログラムがメモリーにロードされ、CPUによって解釈・実行される仕組みをわかりやすく解説。

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • ある古本屋で初版を見かけ、面白そうだったのでネットで購入した一冊。プログラミングに触れる機会はあるけれど、仕組みは全然知らないことを改めて実感した。特に1章と10章、アセンブリ言語からみたプログラミングとレジスタの関係はこれまで触れたことのない興味深い内容だった。理解できたのは全体の3割くらいというところ。

    以下備忘録、
    ・CPUはマシン語にコンパイルされたプログラムを解釈・実行する装置(レジスタの集まり)
    ・アセンブリ言語:ニーモニック(英語に似た略語)を用いたマシン語と一対一で対応する低級言語,
    疑似命令(コメント)とオペコード(主語)とオペランド(述語)で構成,
    jumpを使ってifやloopを実行
    ・2進数で制御->電子回路(IC)のon,offを表現,
    2進数=binary digit=bit,byte=8桁の2進数(8bit),
    基数が2,重みをかけて足し算(10進数:基数が10),
    10進数<->2進数が必ず対応しない
    -> 二進数による近似を使う = 誤差が生じる,
    ・浮動小数点数:(符号)(仮数)(基数)(指数)
    例 +1.23*10^(-2) <-> 固定小数点数 0.0123
    ・1KB = 1024 Byte = 2^10 Byte
    ・API = Windowsが提供する関数セット
    ・ドライバ = ハードウェアとの基本的な入出力を行う(ハードウェアを制御する)プログラム,OSの一部

  • あるプログラムを起動してからの動きとかを知ることが出来て、非常にワクワクする内容でした。

    読み重ねる度に新たに発見がある内容かと思いますので、また読み直したいと思っております。

  • # 書評☆4 プログラムはなぜ動くのか 第2版 | CPUの動作,プログラムの動作がわかりやすく,できれば早く読みたかった

    ## 概要
    この本は,「[矢沢久雄セレクション アルゴリズム&デザインパターン](https://senooken.jp/blog/2018/09/05/)」で存在を知り,気になったので読んだ。

    書名通り,プログラムが動作する仕組みを解説している。具体的には,以下のような項目について解説されている。

    * CPUの動作内容
    * 2進数による演算
    * 浮動小数点の扱い
    * メモリーの仕組み
    * メモリーとディスク
    * データ圧縮アルゴリズム
    * アセンブリ言語
    * ハードウェアの制御

    IPAの情報処理技術者試験などでそれなりに情報の勉強をしていたつもりだが,この本で書かれている内容はあまり知らなかった。

    普通にプログラミングの勉強をしていたら,学ぶことはないが,しっておくことでプログラミングでも活かせることが多かった。できれば,もっと早くに読んでおきたかった。

    ## 参考
    特に有用だったのは,以下の章だ。

    * 第1章 プログラマにとってCPUとは何か
    * 第10章 アセンブリ言語からプログラムの本当の姿を知る

    第1章では,コンピューターの演算を担当するCPUの動作について解説している。

    どういうレジスターがあって,条件分岐や繰り返し,比較,関数呼び出しをどう実現しているのかを解説している。

    第10章では,C言語のソースコードをアセンブリに変換して,一行一行機械語との対応を示している。

    関数呼び出しに,スタックを使って,実行前のアドレスに移動したり,スタックを使うため,関数内の変数はスコープを持つなど解説している。グローバル変数とローカル変数のスコープがなぜ違うのかという理由を,メモリー上に格納される領域から理解できるようになった。

    ## 結論
    CPUやアセンブリ言語,機械語という視点から,プログラムがどういうしくみで動作しているのかをわかりやすく解説していた。

    こういう情報はなかなか触れる機会がない。できれば,プログラミングを学ぶ最初の方の段階で触れておくと,あとあと良いと思った。

    個人的には,もう少し詳しい内容が欲しくなった。アセンブリ言語についての知識があると,プログラミング言語の仕組みの理解が深まるように感じたので,アセンブリ言語についてもう少し勉強しても良いと感じた。

    * 読了日; 2018-06-28
    * パーマリンク: <https://senooken.jp/blog/2018/11/14/>

  • ITに関係する人も、関係ない人も一旦読んでおきましょう。
    色々なベーシックな知識が整理されて入ってきます。
    そして、その後に10年たったら再読しましょう。
    やはり、色々なベーシックな知識が整理されて入ってきます。

  • 【ざっくり概要】
    タイトル通り、プログラムがなぜ動くのかの解説が詳細に書かれている。

    【感想】
    ハードウェアの説明から細かに説明されているので、プログラムが動く仕組みを本質から学ぶことができる。
    ただ現代の技術を考えると、この本に記載されているプログラムの仕組み全てを理解していなくても、ある程度の開発は行うことができると思う。他の方のレビューにも書いてあるように雑学に近い部分も多い。(もちろん本来プログラムの仕組みについてはITエンジニアとして理解しておくべきことではあるが)
    正直なところ、読んだことでプログラミングが劇的に効率化されるというわけではない。しかし、駆け出しプログラマーのようなエンジニア歴が浅い方は、早いうちに読んでおき仕組みの部分を頭に入れておくと、将来的にデバッグ等で役立つ本なのではないかと感じた。

  • 新しい版で読むべきだったが、PCのローレベルでの動作が具体的に細かく解説されている。

  • 基礎からキチンと説き起こしたモノかと期待したが、雑学に、近い。それも古いWindows限定!知識の補完には役立った!

  • 第二版とはいえ情報は結構古いが、CSとか全くやっていない私には色々とためになることがあ多かった。
    特に前半の、符号、補数、基数とか小数の扱い、ICメモリの仕組みとかは知らなかったので面白かった。
    後半は意外と知っていることが多かった。

  • コンピュータサイエンスの基礎として非常におすすめ 2進数故の計算誤差やアセンブリ言語の読み方、コンパイラの概念、メモリ・スタック・レジスタの使い分けなど低レイヤーのことが詳しく書かれている
    C言語を前提に書かれているのでCでHello Worldや四則演算程度は書けるようになってから読み進めるといいかも アセンブリ言語の知識はほとんどいらない
    ITに携わるならほぼ必読といった印象を受けた
    特に、レジスタの種類やメモリの読み込みの挙動、APがHWを動かすためにどのようなものが挟まるかといった話が体系だって学べるのが良い


    1章
    コンピュータのハードの基礎
    CPUの構造(制御装置、演算装置、クロック、レジスタの4つ)とメモリの構造(8bitにつき1アドレスで)について説明され、CPUがクロックに合わせた制御装置によってメモリからデータを読み出したり書き込んだりしてる
    プログラマーはCPUの4つのうちレジスタを特に強く意識する必要がある(プログラムの対象となるため)
    レジスタにもいろんな種類がある(表1-1)この種類は全て大事
    CPUはプログラムの命令を1つ1つレジスタにいれ、順番に従って実行する(これは条件分岐やfor文にも適用、関数呼び出しも)比較演算用にフラグレジスタがある
    そもそもCPUの命令は4通り(データ転送、演算、ジャンプ(条件分岐や繰り返し)、関数呼び出しと戻り)しかない


    2章3章
    コンピューターが2進数だけでどうやって機能を実現させているか
    正整数は簡単だが負整数や少数はちょい難しい たとえば少数の計算は必ずしも現実と一致しないという問題も2進数故


    4章
    メモリについて
    データ型によって確保するメモリの大きさは異なる ポインタがあると便利
    配列やスタック・キューはメモリを効率的に使うためのもの
    リスト型(次の要素が書かれている配列)は更新や削除が用意


    5章
    メモリとディスクに関して
    ディスク→CPUは低速なので、ディスク→メモリ→CPUが効率的
    ディスクとメモリの中間にキャッシュがある
    その他効率的にメモリを使うプログラミング手法についても書かれている
    ディスクの物理的構造について(セクターなど)


    6章
    データ圧縮について
    ランレングス法(AAABB→A2B1)ってやつは場面によっては非効率な時もある
    文書はだめ EXEファイルや画像に効果的
    ハフマン法は登場頻度の多い値に低ビットを割り当てる ハフマン記号の作り方も簡単


    7章
    プログラムの動作環境(OS+HW)について
    最近はアプリケーションの違いにかかわらずOSがHWを制御してくれる そのOSのAPIにあわせて作られたプログラムならどのHWでも動かせる
    CPUが違うとマシン語が異なるのでその場合はコンパイラをなんとかしよう
    Java仮想マシンやエミュレータを使えば別OSをあるOS上に作れる
    BIOSは周辺機器やマシンの起動時制御用


    8章
    ソースファイル→実行ファイルまでについて
    どんな言語も翻訳してしまえば同じ言語のネイティブ言語になる
    コンパイラは元言語、CPU種類、OSの3つに依存
    コンパイル→リンク(参照関数とかライブラリファイルも込みにする)によって実行可能(EXE)ファイルになる
    EXEファイルは再配置情報、変数のグループ、関数のグループ、スタック、ヒープのメモリ領域が作られる 後ろ二つはファイル内でなくファイルロード時に確保される
    メモリ上のプログラムは変数、関数、スタック、ヒープの4つの領域からなる
    スタックは自動だがヒープはmallocなど明示的に確保する


    9章
    OSとAPについて
    OSは制御プログラム、言語プロセッサ、ユーティリティなどの集合体
    OSがHWを制御してくれるのでAP作成時はHWでなくOSを意識して作ればいい
    OSのHW制御機能は小さな関数の集合体(システムコール)AP作成時にシステムコールはあまり使わないし、使うと移植性が下がっちゃう
    ネットワークとかDBとかの機能はOSに近いけどOSではなくミドルウェア ミドルウェアはOSと違って交換が任意


    10章
    アセンブリ言語
    アセンブリ言語の文法について書かれている 構文は基本的にオペコード+オペランド


    11章
    HWの制御方法
    たとえばIN命令OUT命令はポート番号とレジスタ間でデータをやり取りする ポートを橋渡しにしてキーボードやディスプレイとやり取りする
    割り込み要求をうけたCPUはレジスタの退避などを行う
    ディスプレイの情報はVLAMに記憶し、GPUを使ってる
    結局のところHW制御とは入出力命令によって周辺装置とデータのやり取りをしてるだけ


    12章
    ソフトな内容
    乱数や条件分岐、データの蓄積を用いることでAIのようなじゃんけんプログラムが作れる

  • 1冊でプログラム知識がしっかりとまとまっている。ただし、決して初心者向けの本ではない。特に、第10章のアセンブリ言語関係は、ある程度プログラミングを経験した人が理解を深めるのに適していると感じる。記述が少し古い箇所もあるため、最新の言葉の定義はネット検索等する必要がある。

全107件中 1 - 10件を表示

著者プロフィール

1961年栃木県足利市生まれ。株式会社ヤザワ 代表取締役社長。グレープシティ株式会社 アドバイザリースタッフ。大手電機メーカーでパソコンの製造、ソフトハウスでプログラマを経験した後、現在は独立してパッケージソフトの開発と販売に従事している。本業のほかにも、プログラミングに関する書籍や記事の執筆活動、学校や企業における講演活動なども精力的に行っている。自称ソフトウエア芸人。【主な著書】『プログラムはなぜ動くのか 第3版』(日経BP)『コンピュータはなぜ動くのか 第2版』(日経BP)『情報処理教科書 出るとこだけ!基本情報技術者 テキスト&問題集』(翔泳社)『コンピュータのしくみがよくわかる! C言語プログラミングなるほど実験室』(技術評論社)『10代からのプログラミング教室』(河出書房新社)ほか多数

「2022年 『身近な疑問を解いて身につける 必修アルゴリズム』 で使われていた紹介文から引用しています。」

矢沢久雄の作品

この本を読んでいる人は、こんな本も本棚に登録しています。

有効な左矢印 無効な左矢印
ロバート キヨサ...
デールカーネギ...
有効な右矢印 無効な右矢印
  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×