内容紹介
歴史あるITシステム開発をこれから学ぼうという人のために。
ITシステムの需要が高まり、その要求も高度化しています。かつては要求に応じた「ハードウェア」を設計し作っていましたが、近年では「ソフトウェア」開発の比率が(費用面・時間面ともに)どんどんと高まっています。では、ハードウェアに近い知識が不要かというと、少なくとも教養としては必要なものです。JavaやC#といった高級なプログラミング言語を用いた開発においても、そうした知識を持つ方が高品質なソフトウェアを作れます。
本書では、ソフトウェア・プログラミング分野におけるハードウェアに近い低級(low level)な概念から人の直観に近い高級(high level)な概念まで、全体を俯瞰しながら分かりやすく説明していきます。
1章ではまず、10進数や2進数など「数字の表し方」についておさらいします。
今主流となっているコンピューターは、突き詰めていくと半導体を使った電子回路です。2章では、半導体の物理的性質に関する知識がなくても電子回路設計ができるようになる「ゲート」の概念を解説します。
3章では「論理演算」という数学的理論を使って、ゲートの組み合わせを数式で表すことで回路設計する方法を、4章では「記憶素子」というものを導入し、さらに複雑な回路設計を行う手法を説明します。
5章からは「ソフトウェア」の話になります。5章ではソフトウェアを実行するための回路、すなわち「汎用コンピューター」の作り方と動かし方について説明します。6章ではハードウェアを「どう動かすか」ではなく、人が「何をしたいか」を直接記述できるようにするための仕組みとして「オペレーティング・システム」と「高級言語」について説明します。
7章以降はプログラミング言語の高級化の歴史を追うことになります。7章では最も基礎的な概念である「変数」モデル、8章では「構造化」の考え方、9章では「オブジェクト指向」を説明します。最後の10章では現代的なソフトウェア開発に必要となるいくつかの高級な概念について説明します。
プログラミング言語の進化は徐々に高級になっていく(徐々に人の直感に近づいていく)歴史といえます。本書ではこの歴史を追体験しながら、プログラミングに必要なITの知識を理解できる構成になっています。
書誌情報
- 著者: 岩永 信之
- 発行日: 2011-06-30 (紙書籍版発行日: 2011-06-30)
- 最終更新日: 2011-06-30
- バージョン: 1.0.0
- ページ数: 284ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: マイナビ出版
対象読者
著者について
岩永 信之
大阪大学 大学院 情報科学研究科 修了。
在学中よりコンピューターとプログラミングの研究・教育を通して、理工系ネタからプログラミング(主にC#)まで幅広い知識をウェブサイト「++C++; // 未確認飛行 C」で記事化。
++C++; // 未確認飛行 C http://ufcpp.net/
目次
第1章 数字の表し方
- 1.1 数字の表し方いろいろ
- 1.2 日常で使われる数字
- 1.3 桁上げの数学的表現
- 1.4 コンピューターでよく使う数字
- 1.5 1ビット、1バイト
- 扱える値の範囲
- 1.6 浮動小数点数
- 誤差 / 正規化 / 無限大 / NaN(Not a Number)
第2章 ゲート・レベル
- 2.1 アナログ回路とディジタル回路
- 2.2 ゲート回路
第3章 論理レベル
- 3.1 論理演算
- 3.2 論理演算とディジタル回路
- 3.3 組み合わせ回路
- 3.4 組み合わせ回路の設計
- 仕様例 / 入出力を0, 1で表現 / 加法標準形の論理式で表す / 論理式の簡単化 / 組み合わせ回路化 / ドント・ケア
第4章 レジスター転送レベル
- 4.1 順序回路
- 4.2 記憶素子の構成例
- 信号の伝播遅延と動作周波数 / パイプライン処理
- 4.3 順序回路の設計
- 仕様例 / 入出力と記憶素子の状態を0, 1で表現 / 論理式化と組み合わせ回路化 / 記憶素子との接続
第5章 汎用コンピューター
- 5.1 汎用コンピューターの構造
- ワード
- 5.2 CPUの制御
- 機械語とアセンブリ言語 / 命令の種類 / データの移動 / 演算 / 実行制御
- 5.3 メイン・メモリ
- 5.4 汎用コンピューターの作り方
- 演算回路 / ビットごとの論理演算 / 加算 / 2の補数(負の数の表現) / 減算 / シフト / 乗算 / 選択回路 / マルチプレクサー / デマルチプレクサー / 記憶素子
- 5.5 CPUの高度化
- パイプライン / 条件分岐とパイプライン・ストール / マイクロ命令 / キャッシュ・メモリ / 局所性 / その他
第6章 オペレーティング・システムと高級言語
- 6.1 APIとライブラリ、フレームワーク
- 6.2 オペレーティング・システムの提供する機能
- ハードウェア管理 / ハードウェア割り込み / マルチタスク / 仮想メモリ / メモリ領域管理 / スタック / ヒープ / ガベージ・コレクション / ガベージ・コレクションの方法 / ガベージ・コレクションの性能向上 / コンパクション / コピー方式ガベージ・コレクション / 世代別ガベージ・コレクション / 大きなデータ / 効率 / ガベージ・コレクションの限界
- 6.3 高級言語
- howからwhatへ / コンパイル / コンパイラーの作り方 / 正規表現 / 字句解析 / 構文解析 / スタック機械 / スタック機械の動作 / 機械語の生成
第7章 変数と式
- 7.1 変数
- 複雑な処理
- 7.2 型
- 数値 / 整数 / 浮動小数点数 / 10進小数 / 論理値 / 配列 / 添え字 / 文字 / 文字列 / 列挙型 / 複合型
- 7.3 スコープ
- 変数の宣言とスコープ / 型の確定 / スコープの明確化 / タイプミス
- 7.4 式
- 整数同士の割り算 / ビットごとの論理演算 / 整数と真偽値 / ショート・サーキット演算 / 演算子の優先順位 / 三項条件演算子
- 7.5 型変換
- 明示的型変換と暗黙的型変換 / 型の厳密さ
- 7.6 再代入
- 不変性 / 代入と結合
- 7.7 参照(ポインターの制限)
第8章 構造化
- 8.1 構造化制御
- フローチャートと実行制御 / 条件分岐(if-else) / 条件を満たす間繰り返し(while) / 数値の数え上げ(for) / 要素の列挙(foreach)
- 8.2 定数
- 8.3 処理をまとめる(メソッド)
- メソッド化 / メソッド呼び出しの内部動作
- 8.4 データをまとめる(クラス)
- クラス化 / 値型と参照型 / メモリの利用方法 / null / 代入 / 値型と参照型の使い分け / 値渡しと参照渡し / 値型の値渡し / 参照型の値渡し / 値型の参照渡し / 参照型の参照渡し / 参照渡しの用途 / 値の不変性
- 8.5 例外
- 構造化例外処理 / 後処理
- 8.6 名前空間
第9章 オブジェクト指向
- 9.1 データと、データに付随した処理
- クラスとインスタンス / クラス・メンバーとインスタンス・メンバー / メソッド内でのメンバーの参照 / コンストラクター / コンストラクターの定義 / 未初期化
- 9.2 カプセル化
- 公開範囲 / フィールドの隠ぺい / 値の検証 / 変更に強くする / プロパティ
- 9.3 継承
- 9.4 多態性
- 静的な型と動的な型 / 動的な型に基づくメソッド呼び出し / 仮想メソッドの内部動作 / 抽象クラスとインターフェイス / 抽象メソッドと抽象クラス / インターフェイス
- 9.5 総称
- コード展開 / 型消去
- 9.6 第一級オブジェクト
- 演算子のオーバーロード / コレクション(配列風のユーザー定義型) / さまざまなコレクション / インデックス参照 / 列挙子 / 列挙子の自動生成 / 第一級メソッド / デリゲート型 / デリゲートの内部動作 / オブジェクト指向とデリゲート / 匿名メソッド / 高階メソッド
第10章 用途に応じた高級化
- 10.1 実行時型情報
- ユーザー定義の追加型情報
- 10.2 開発ツールとの連携
- GUI / データベース参照 / サービス参照 / ツールが生成したコードとの競合回避
- 10.3 イベント駆動
- GUIアプリケーションの例 / イベント・ハンドラーの登録口
- 10.4 スレッド
- 同時実行 / I/O完了待ち / 同時実行制御
- 10.5 データ処理
- 選択 / 投影 / グループ化 / 集計 / 基本操作の組み合わせの例 / データ処理の実行方法 / 並列処理 / 外部サーバーへの問い合わせ / プッシュ型データ処理