プログラミング文体練習 ―Pythonで学ぶ40のプログラミングスタイル

Book description

レーモン・クノーの『文体練習』から着想を得て執筆された本書は、1つの課題を異なるプログラミングスタイルで実装し、さまざまなスタイルの特性やスタイルが生まれた歴史的経緯などを解説します。本家の『文体練習』は、「バスの中で起きた諍いと、その張本人を後で目撃した」という内容を、公的文書風、宣伝風、業界用語風など、99の異なる文体で表現したものですが、本書は、「単語の出現頻度をカウントして多いものから出力する」という課題を、40のスタイルで実装しています。リソース制約が大きかった時代の方法から、オブジェクト指向、純粋関数型、リフレクション、並行処理、ニューラルネットワークまで幅広いスタイルを扱い、マルチパラダイム言語Pythonの威力と魅力を感じられる構成となっています。

Table of contents

  1. 表紙
  2. 大扉
  3. 原書大扉
  4. クレジット
  5. 献辞
  6. 訳者まえがき
  7. 第2版 まえがき
  8. 第1版 まえがき
    1. コード
    2. 想定される読者
    3. 執筆に至る経緯
    4. 謝辞
  9. 序章
    1. 単語頻度(term frequency)
    2. 索引
    3. 単語の文脈
    4. Python主義(Pythonisms)
    5. 本書の表記法
    6. 連絡先
  10. 第I部 歴史的スタイルHistorical
    1. 1章 古き良き時代――アセンブリ言語Good Old Times
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    2. 2章 Forthで行こう――スタックマシンGo Forth
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    3. 3章 配列プログラミング――ベクトル演算Arrays
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  11. 第II部 基本スタイルBasic
    1. 4章 一枚岩――モノリスMonolithic
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 参考文献
      6. 用語集
      7. 演習問題
    2. 5章 クックブック――構造化プログラミングCookbook
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 6章 パイプライン――関数型プログラミングPipeline
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    4. 7章 コードゴルフ――ワンライナーCode Golf
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  12. 第III部 関数合成Function Composition
    1. 8章 合わせ鏡――再帰Infinite Mirror
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    2. 9章 継続――継続渡しKickForward
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 10章 単子――モナドThe One
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
  13. 第IV部 オブジェクトとオブジェクトの相互作用Objects and Object Interaction
    1. 11章 モノのプログラム――オブジェクトThings
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    2. 12章 レターボックス――メッセージパッシングLetter Box
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 13章 閉写像――プロトタイプClosed Maps
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    4. 14章 抽象的なモノ――抽象データ型Abstruct Things
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    5. 15章 ハリウッド――制御の反転Hollywood
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    6. 16章 掲示板――pub/subBulletin Board
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  14. 第V部 リフレクションとメタプログラミングReflection and Metaprogramming
    1. 17章 内省性――イントロスペクションIntrospective
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインに対するスタイルの影響
      5. 用語集
      6. 演習問題
    2. 18章 自己反映性――リフレクションReflective
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 19章 横断的関心――アスペクト指向Aspects
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    4. 20章 プラグイン――依存性注入Plugins
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  15. 第VI部 異常事態Adversity
    1. 21章 構成主義――防御的プログラミングConstructivist
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 演習問題
    2. 22章 癇癪持ち――契約による設計Tantrum
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 参考文献
      6. 用語集
      7. 演習問題
    3. 23章 受動的攻撃――例外Passive Aggressive
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    4. 24章 意図の宣言――型注釈Declared Intentions
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    5. 25章 検疫――純粋関数と不純関数Quarantine
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  16. 第VII部 データ中心Data Centric
    1. 26章 データベース――SQLPersistent Tables
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    2. 27章 スプレッドシート――リアクティブプログラミングSpreadsheet
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 28章 データストリーム――ジェネレータlazy Rivers
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  17. 第VIII部 並行性Concurrency
    1. 29章 アクター――スレッドActor
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    2. 30章 データ空間――並列処理Data Spaces
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    3. 31章 マップリデュース――MapReduceMapReduce
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    4. 32章 二重マップリデュース――HadoopDouble MapReduce
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 演習問題
  18. 第IX部 対話性Interactivity
    1. 33章 三位一体――MVCTrinity
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインにおけるスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
    2. 34章 レストフル――ステートレスRESTful
      1. 制約
      2. プログラム
      3. 解説
      4. システムデザインに対するスタイルの影響
      5. 歴史的背景
      6. 参考文献
      7. 用語集
      8. 演習問題
  19. 第X部 ニューラルネットワークNeural Networks
    1. 35章 浅いDense層のプログラム――ニューラルネットワークDense, Shallow, Under Control
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    2. 36章 学習する浅いDense層――学習Dense, Shallow, Out of Control
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    3. 37章 蝶ネクタイ――多層ネットワークBow Tie
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
    4. 38章 ニューロモノリス――シーケンスNeuro Monolithic
      1. 制約
      2. プログラム
      3. 解説
      4. 用語集
      5. 演習問題
    5. 39章 スライディングウィンドウ――畳み込みSliding Window
      1. 制約
      2. プログラム
      3. 解説
      4. 用語集
      5. 演習問題
    6. 40章 リカレント――回帰型ニューラルネットワークRecurrent
      1. 制約
      2. プログラム
      3. 解説
      4. 歴史的背景
      5. 参考文献
      6. 用語集
      7. 演習問題
  20. 著者・訳者紹介
  21. 奥付

Product information

  • Title: プログラミング文体練習 ―Pythonで学ぶ40のプログラミングスタイル
  • Author(s): Cristina Videira Lopes, 菊池 彰
  • Release date: June 2023
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400225

You might also like

book

大規模データ管理 ―エンタープライズアーキテクチャのベストプラクティス

by Piethein Strengholt, 村上 列

データ管理と統合が急速に進化する中、複雑で緊密に結合したアーキテクチャから、現代のビジネスに対応できる、より柔軟なデータアーキテクチャへの移行が求められます。 本書は、変化が激しい時代でも長期的に持続可能な方法で大規模なデータ管理を行い、さまざまなユースケースに対応できる統合アーキテクチャを紹介します。この統合アーキテクチャを構成する、膨大なデータ利用に向けた「読み出し専用データストアアーキテクチャ」、リアルタイムなアプリケーションのための「APIアーキテクチャ」、大容量のスループットを実現する「ストリーミングアーキテクチャ」を詳述します。また技術開発、法規制、プライバシーに関する懸念など、データ管理全体を説明し、データガバナンスとセキュリティ、マスターデータ管理、セルフサービスとデータマーケットプレイス、メタデータの重要性について解説します。 企業のデータ戦略にかかわる本書は、アーキテクトはもちろん、経営者、ガバナンスチーム、データ分析・エンジニアリングチーム必携の一冊です。

book

スクラム実践者が知るべき97のこと

by Gunther Verheyen, 吉羽 龍太郎, 原田 騎郎, 永瀬 美穂

アジャイル開発手法のなかで最もよく使われる手法の1つがスクラムです。スクラムは、複雑な問題に取り組むためのシンプルなフレームワークであり、シンプルであるがゆえに実践には要所を押さえるスキルが必要になります。本書は、世界中で活躍するスクラム専門家が自らの経験と知見に基づいて執筆したエッセイ集です。スクラム適用の戦略、スクラムで進める上での戦術やパターン、さまざまな職種のコラボレーション、組織への影響などについて幅広い視点で紹介します。日本語版では、及部 敬雄、小林 恭平(kyon_mm)、高橋 一貴、長沢 智治、平鍋 健児、安井 力(やっとむ)、和田 卓人、永瀬 美穂、原田 騎郎、吉羽 龍太郎による10本の書下ろしを収録。

book

マスタリング・ライトニングネットワーク ―ビットコインの迅速な支払いを実現するセカンドレイヤーブロックチェーンプロトコル

by Andreas M. Antonopoulos, Olaoluwa Osuntokun, René Pickhardt, 安土 茂亨, 中城 元臣, 深田 涼太, 鳩貝 淳一郎, 株式会社クイープ

ビットコイン上で機能するセカンドレイヤー(レイヤー2)技術である、ライトニングネットワークの本格的な解説書。トランザクションのコストを削減しながら速度とプライバシーを向上させることで、少額決済を素早く小さなコストで実現することができる注目の技術です。本書では、まずライトニングネットワークの基本的な仕組みを知り、ライトニングノードの実装や運用方法をくわしく紹介します。さらに、ライトニングネットワークの各アーキテクチャについても、体系的にわかりやすく解説しています。レイヤー2技術に興味を持ち、コミュニティに参加を考えているエンジニアにとって必携の一冊です。

book

ハンズオンNode.js

by 今村 謙士

Node.jsの入門書。対象読者は、フロントエンド開発の知識はあってもサーバサイド開発は知らないエンジニアや、他言語の経験はあってもNode.jsは触ったことがないプログラマー。本書ではターミナルのプロンプトにコマンドを入力してその反応を確認したり、簡単なスクリプトをNode.js環境で実行したりしながら、Node.jsプログラミングの基本からWebアプリケーションの開発、テスト、デプロイまでをハンズオン形式で学びます。また、コードの背景にある設計思想や、プログラムの挙動の仕組みについてもしっかり掘り下げます。本書のゴールは、読者がNode.jsの全体像を掴み、業務レベルでのアプリケーション開発に対応可能な知識を身につけることです。