センス・オブ・プログラミング!
−抽象的に考えること・データ構造を理解すること

[表紙]センス・オブ・プログラミング!−抽象的に考えること・データ構造を理解すること

紙版発売

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 まとめ

著者プロフィール

前橋和弥(まえばしかずや)

1969年,愛知県生まれ。名古屋市内の某ソフト会社で俸禄を食んでいるプログラマー。著書に『C言語 ポインタ完全制覇』,『C言語 体当たり学習徹底入門』,『Java謎+落とし穴徹底解明』,『センス・オブ・プログラミング!』がある。

言語作りは昔から趣味で細々とやっていた。これがなければCの本を書いたりすることもなかったと思う。

著者ホームページ:http://kmaebashi.com