センス・オブ・プログラミング!
−抽象的に考えること・データ構造を理解すること
−抽象的に考えること・
2004年11月6日紙版発売
前橋和弥 著
A5判/308ページ
定価2,178円(本体1,980円+税10%)
ISBN 4-7741-2173-8
ただいま弊社在庫はございません。
書籍の概要
この本の概要
プログラミングを身につけるには,経験から学んだ言わば「センス」ともいうべきものが重要です。それは「抽象的なレベルで考えること」と「データ構造の重要性を認識すること」。絶妙な語り口で人気の前橋氏による,初心者脱却のための実践的読み物です。
こんな方におすすめ
- 初心者脱却を目指すプログラマー
- まだ経験が浅く、抽象的思考が苦手なプログラマー
- データ構造の設計が苦手なプログラマー
目次
第0章 はじめに――本書のねらいと構成
- 0-1 本書のねらいと対象読者
- 0-1-1 本書のねらい
- 0-1-2 対象読者
- 0-1-3 本書の構成
- 0-2 準備運動
- 0-2-1 プログラミング言語について
- 0-2-2 「動くプログラム」と美しいプログラム
- 0-2-3 プログラムのサイズと難易度
- 0-2-4 「初心者」脱却のために
第1章 プログラムの基礎
- 1-1 プログラムとは
- 1-2 hello, world.
- 【補足】コンソールアプリケーション
- 1-3 逐次実行
- 1-4 計算する
- 1-5 変数と入力
- 【補足】代入の記号
- 【補足】変数は「箱」じゃない?
- 1-6 条件分岐
- 1-7 ループ
- 【補足】後判定型のループ
- 1-8 配列
- 1-9 サブルーチン・関数
- 1-10 イベントドリブン
- 1-11 まとめ
第2章 プログラムが動作する仕組み
- 2-1 デジタル回路
- 2-1-1 なぜ低レベルな話が重要なのか
- 2-1-2 電気で数を表現する
- 2-1-3 2進数とは
- 2-1-4 論理回路
- 2-1-5 足し算を考える
- 2-1-6 16進数とは
- 2-1-7 メモリ
- 【補足】「RAM」とは?
- 2-1-8 ストアドプログラム方式
- 【補足】世界初のコンピュータとは?
- 2-2 OSとは何か?
- 2-2-1 資源管理の例――ファイルシステム
- 2-2-2 カーネルとは
- 2-2-3 仮想記憶
- 2-3 プログラミング言語について
- 2-3-1 コンパイラとインタープリタ
- 【補足】インタープリタのいろいろ
- 【補足】インタープリタは「翻訳」しない
- 2-3-2 リンクとライブラリ
- 2-3-3 変数
- 2-3-4 数値と文字列
第3章 きれいなプログラムを書くために
- 3-1 スタイル
- 3-1-1 鉄則――目的を理解すること
- 3-1-2 書くときのことよりも,読むときのことを考えよう
- 3-1-3 たとえ愚直でも,読みやすいほうがよい
- 3-1-4 インデント
- 3-1-5 コメント
- 3-2 構造化プログラミング
- 3-2-1 BASICの時代
- 3-2-2 フローチャート
- 3-2-3 なぜフローチャートを書いてはいけないのか?
- 3-2-4 去勢されたgoto――break,continue,中途return
- 3-2-5 gotoを上手に使う
- 【補足】末尾でまとめてfree()
- 3-2-6 例外処理機構
- 3-2-7 例外は,本当に例外的な場合だけに使うこと!
- 3-3 名前の話
- 3-3-1 なぜ名前が重要なのか
- 3-3-2 命名についての一般論
- 3-3-3 省略するな
- 【補足】ループカウンタ
- 【補足】単語の区切り方
- 【補足】ハンガリアン記法
- 3-3-4 Javaの命名規則
- 3-4 同じことを書くな
- 3-4-1 なぜ同じことを書いてはいけないのか?
- 3-4-2 copy&pasteをやめよう
- 3-4-3 同じことを書いてはいけないということは
- 3-5 関数分割について
- 3-5-1 関数の平均的な長さは?
- 3-5-2 なぜ関数に分けるのか?
- 3-6 デバッグについて
- 3-6-1 コンパイルエラーについて
- 3-6-2 「机上デバッグ」は時間の無駄だ
- 【補足】ソースコードレビュー
- 3-6-3 どのようにバグを潰すか
- 【補足】デバッグライトではバッファリングに注意
- 【補足】アサーションはいつ抑止すべきか
- 3-6-4 バグのあるプログラムには生きる価値はない
- 3-6-5 バグありプログラムを一刻も早く殺すためには
第4章 データ構造――基礎編
- 4-1 データ構造とは
- 4-1-1 なぜデータ構造が重要なのか?
- 【補足】データ構造とオブジェクト指向
- 4-2 ケーススタディ――名簿
- 4-2-1 構造体(レコード)
- 【補足】ポインタと可変長配列――Cに特有の話
- 4-2-2 Cの配列
- 4-2-3 Javaの配列
- 4-2-4 キーとソート
- 4-2-5 列挙型
- 4-2-6 配列の利点・欠点
- 4-3 データ構造とポインタ
- 4-3-1 連結リスト
- 4-3-2 ポインタと動的メモリ確保で連結リストを実現する
- 【補足】Javaの場合――参照とポインタ
- 4-3-3 動的メモリ確保の裏側
- 【補足】構造体のメリット
- 4-3-4 連結リストの欠点
- 4-3-5 二分探索
- 【補足】gapped list
- 【補足】データをやたらに書き換えるな
- 4-3-6 木構造
- 4-3-7 木に対する走査
- 4-3-8 再帰呼び出し
- 4-3-9 スタック
- 4-3-11 キュー
- 4-3-11 二分探索木
- 4-3-12 ハッシュ
- 【補足】ハッシュテーブルの要素数
- 4-4 テクニック
- 4-4-1 削除フラグ
- 4-4-2 ダミーノード
- 4-4-3 番兵
- 4-4-4 こういったテクニックは本当に使うべきか?
- 4-5 アルゴリズム
- 4-5-1 ソート
- 4-5-2 O記法
- 【補足】ビンソート
- 4-5-3 ワーストケースを考える
- 4-5-4 その高速化には本当に意味があるか?
- 【補足】アルゴリズムは暗記しなくてもよい
- 4-6 ケーススタディ――カーナビの経路情報
- 4-6-1 ノードとエッジ
- 4-6-2 構造体・クラスで表現する
- 4-7 リレーショナルデータベース
- 4-7-1 データベースとは何か?
- 4-7-3 リレーショナルデータベースとは
- 4-7-4 リレーショナルデータベースとポインタ
第5章 モジュール分割
- 5-1 ワープロを作る
- 5-1-1 何を作るのか?
- 5-1-2 どう作るのか?
- 5-2 画面表示
- 5-2-1 Javaの座標系
- 5-2-2 ワープロ側の都合
- 5-2-3 座標・文字サイズの変換
- 5-3 モジュール化
- 5-3-1 「モジュール」とは何か?
- 5-3-2 モジュール化によるメリット
- 5-3-3 実装の隠蔽
- 5-3-4 モジュール化によるデメリット
- 5-3-5 マルチプルインスタンス
- 5-3-6 Javaにおけるモジュールの作り方
- 5-3-7 Cにおけるモジュールの作り方
- 【補足】Cにおける命名規則
- 【補足】ヘッダファイルの書き方
- 【補足】オブジェクト指向におけるインタフェース
- 5-4 モジュールの見つけ方
- 5-4-1 トップダウンアプローチとボトムアップアプローチ
- 5-4-2 最良のアプローチは?
第6章 データ構造――応用編
- 6-1 ワープロのデータ構造
- 6-1-1 ワープロとは何か?
- 6-1-2 機能制限
- 【補足】YAGNIの原則
- 6-2 「文書」とは何か?
- 6-2-1 文書とは
- 6-2-2 「段落」とは何か
- 6-2-3 UMLによるデータ構造の表記
- 6-2-4 クラス図をプログラミング言語に落とす
- 【補足】アクセス制御とカプセル化
- 【補足】実体を使うかポインタを使うか
- 【補足】継承の利点
- 6-3 表示用データ
- 6-3-1 表示用データの必要性
- 【補足】ワードラップ
- 6-3-2 表示用データを保持することによる弊害
- 6-3-3 表示用データをどこに保持すべきか
- 【補足】直列化
- 6-3-4 表示用データの実現
- 6-3-5 再計算の方法
- 6-3-6 コードに落とす
- 6-4 カーソル
- 6-4-1 カーソルを表現する
- 6-4-2 カーソルと情報隠蔽
- 6-5 まとめ――データ構造の重要性
第7章 X-Word
- 7-1 X-Wordのモジュール構造
- 7-1-1 X-Wordをモジュールに分割する
- 7-1-2 パッケージの依存関係
- 7-1-3 interfaceで依存関係を断ち切る
- 7-1-4 documentの変更通知
- 7-2 各パッケージの概要
- 7-2-1 documentパッケージ
- 7-2-2 drawパッケージ
- 7-2-3 layouterパッケージ
- 7-2-4 applicationパッケージ
- 7-2-5 検討――他の設計は考えられなかったのか?
- 7-2-6 まとめ
この本に関連する書籍
-
できるプログラマになる! "伝える"技術
―「単なる」プログラマと「できる」プログラマの違いは? プログラマという頭脳労働者には特別な仕事術が必要なのでは?― プログラミングの指導を通して著者がたどり着...
-
Java謎+落とし穴 徹底解明
Javaの理解を妨げる謎な仕様,わかりにくい機能に鋭く切り込み,ではどう実践的に使っていけばよいのかを徹底的に解説しています。Javaに挫折した人,今ひとつ理解があ...