索引 / 001 JA
Python Crash Course: A Hands-On, Project-Based Introduction to Programming(最短距離でゼロからしっかり学ぶ Python入門) cover

コンピュータサイエンス

コンピュータサイエンス

Python Crash Course: A Hands-On, Project-Based Introduction to Programming(最短距離でゼロからしっかり学ぶ Python入門)

Eric Matthes

英語原題: Python Crash Course: A Hands-On, Project-Based Introduction to Programming

元学校教員の著者がプログラミング未経験の読者のために書いた、Python による実践的なプログラミング入門書。前半では短い演習を通して言語の中核的な機能を学び、後半では簡単なアーケードゲーム、データ可視化、Django によるウェブアプリケーションという3つの大きなプロジェクトでそれらを応用する。

前提知識: 基本的なコンピュータ操作以外は不要で、プログラミング経験は前提としない。

難易度レベル
初級
学術レベル
学部
pythonprogramming fundamentalsprojectsbeginner programming教科書

01 / 読書ガイド

読書ガイド

引用

Matthes, E. (2022). Python Crash Course: A Hands-On, Project-Based Introduction to Programming (3rd ed.). No Starch Press.

章の要約

第3版は2部構成の20章、あとがき、5つの付録から成り、500ページを少し超える。第I部(第1–11章)は言語を教え、第II部(第12–20章)はそれを3つのプロジェクト、すなわちアーケードゲーム、データの可視化、ウェブアプリケーションで使う。各話題の後には、章ごとに番号の付いた短い「Try It Yourself(自分でやってみよう)」の演習が続く。この版についての著者の解説によれば、本書はPython 3.11を使い、エディタとしてVS Codeを推奨し、ファイルはpathlibモジュールで扱い、テストは標準ライブラリのunittestではなくpytestで教える。プロジェクトではDjango 4.1やBootstrap 5を含め、各ライブラリの最新版が使われている。

第1章:Getting Started(はじめに)

Windows、macOS、LinuxでのPythonとVS Codeエディタの準備、最初の「hello world」プログラムの実行、インストール時のトラブルシューティング、ターミナルからのプログラム実行。

第2章:Variables and Simple Data Types(変数と単純なデータ型)

プログラムを実行すると何が起こるか、変数(値に付けるラベルとして説明される)、文字列と文字列メソッド(接頭辞を取り除く新しいメソッドを含む)、整数と浮動小数点数、定数、コメント、そして「The Zen of Python」。よくある誤りの避け方が各話題に組み込まれており、この章ではPythonの改良されたエラーメッセージも紹介される。

第3–4章:Introducing Lists(リスト入門);Working with Lists(リストを使う)

リストの作成、インデックス参照、変更、並べ替え。続いてforによるループ、インデントの誤りの避け方、range()による数値のリストとリスト内包表記、スライスとコピー、タプル、そしてPEP 8を通じたコードのスタイルへの最初の手ほどき。

第5章:if Statements(if文)

条件テスト、if、if-else、if-elif-elseの連鎖、リストと組み合わせた条件分岐、if文のスタイル。

第6章:Dictionaries(辞書)

キーと値のペアの扱い、辞書のループ処理、リストと辞書の入れ子。

第7章:User Input and while Loops(ユーザー入力とwhileループ)

input()関数、フラグを使ったwhileループ、breakとcontinue、whileループによるリストや辞書の処理。

第8章:Functions(関数)

関数の定義、デフォルト値付きの位置引数とキーワード引数、戻り値、リストの受け渡し、任意個の引数、関数のモジュールへの格納とインポートの書き方。

第9章:Classes(クラス)

クラスとインスタンスの作成、属性の変更、継承とメソッドのオーバーライド、属性としてのインスタンス、モジュールからのクラスのインポート、標準ライブラリ、クラスのスタイル。

第10章:Files and Exceptions(ファイルと例外)

pathlibによるファイルの読み書き、try-except-elseによる例外処理、複数ファイルのテキスト分析、JSONによるデータの保存、リファクタリング。

第11章:Testing Your Code(コードのテスト)

pipによるpytestのインストール、関数に対する成功するテストと失敗するテストの作成、さまざまなアサーション、クラスのテスト、フィクスチャの利用。

第12–14章:A Ship That Fires Bullets(弾を撃つ宇宙船);Aliens!(エイリアン!);Scoring(得点)

「スペースインベーダー」に着想を得た、Pygameによる「エイリアン侵略」プロジェクト。読者はゲームを計画し、ウィンドウとキー操作に反応する宇宙船を作り、弾を発射し、エイリアンの艦隊を作って動かし、衝突を検出し、ゲームを終了させる。続いてPlayボタン、速度の上昇、スコアボード、ハイスコア、レベル、残りの宇宙船の数を加える。ヘルパーメソッドへのリファクタリングが全体を通じて実践される。

第15–17章:Generating Data(データの生成);Downloading Data(データのダウンロード);Working with APIs(APIを使う)

データ可視化のプロジェクト。第15章はMatplotlibで描画し(折れ線グラフ、散布図、ランダムウォーク)、Plotlyでサイコロ投げをシミュレーションする。第16章はCSVファイルの気象データとGeoJSON形式の地震データを読み込み、世界地図を描く。第17章はRequestsライブラリでGitHub APIからデータを取得し、最も人気のあるリポジトリを可視化し、Hacker NewsのAPIも紹介する。

第18–20章:Getting Started with Django(Django入門);User Accounts(ユーザーアカウント);Styling and Deploying an App(アプリのスタイル設定とデプロイ)

ウェブアプリケーションのプロジェクト「学習ログ(Learning Log)」。第18章は仮想環境とDjangoプロジェクトを準備し、モデルを定義し、管理サイトを使い、テンプレートでページを作る。第19章はデータ入力のためのフォーム、ユーザー登録とログインを加え、各ユーザーが自分のデータにしかアクセスできないようにする。第20章はBootstrapでサイトのスタイルを整え、Gitを使ってホスティングサービスPlatform.shにデプロイする。

あとがきと付録A–E

付録は、インストールとトラブルシューティング(Pythonのキーワードと組み込み関数の一覧付き)、テキストエディタとIDE、助けの求め方、Gitによるバージョン管理、デプロイのトラブルシューティングを扱う。

主要概念

第I部:基礎(第1–11章)

  • 変数とデータ型:文字列、整数、浮動小数点数などの値を指す名前。
  • リスト、タプル、辞書:Pythonの中心的なコレクションと、ループ、スライス、内包表記。
  • 制御フロー:条件テスト、if-elif-elseの連鎖、whileループ。
  • 関数とモジュール:柔軟な引数を持つ再利用可能なコードのまとまりと、それをインポートできるファイルに整理すること。
  • クラスと継承:現実世界のものを属性とメソッドを持つオブジェクトとしてモデル化すること。
  • ファイル、例外、JSON:データの読み書き、エラーへの適切な対処、実行をまたいだデータの保存。
  • 自動テスト:pytestのアサーションとフィクスチャによるコードの検証。

第II部:プロジェクト(第12–20章)

  • ゲームループとスプライト:Pygameのゲームのイベント駆動の構造。
  • データの可視化:生成したデータ、ダウンロードしたデータ、APIから得たデータを、MatplotlibとPlotlyでグラフや地図にすること。
  • ウェブAPI:オンラインサービスから構造化されたデータを取得すること。
  • モデル、ビュー、テンプレート:Djangoのウェブアプリケーションの構造。
  • ユーザー認証とデプロイ:アカウント、アクセス制限、アプリケーションのオンライン公開。

批判的分析

長所

  • 基礎とプロジェクトを1冊で。 InfoWorld のセルダー・イェグララプは、多くの本がPythonの基礎かプロジェクトのどちらか一方を提供するのに対し、本書は両方を提供すると評した。3つのプロジェクトは実際のライブラリ(Pygame、Matplotlib、Plotly、Requests、Django)を使い、完成したゲーム、対話的なグラフ、デプロイされたウェブサイトで終わる。
  • 絶え間ない練習。 詳細目次には番号付きの演習が186題並び、主要な話題ごとに数題ずつ置かれ、その多くは前の演習の上に築かれる(招待客リストの演習は第3章を通じて発展し、横スクロールのシューティングゲームは第12–14章を通じて発展する)。
  • 早い段階から職業的な習慣を身につける。 PEP 8に基づくスタイルの指針、リファクタリング、pytestによるテスト、仮想環境、Gitが、初心者向けの本に登場する。エラー処理は最後に回されるのではなく、各機能とともに教えられる。
  • 最新に保たれ、支援も充実。 第3版では言語のバージョン、エディタ、ライブラリが更新されており、著者のウェブサイトはソースコード、チートシート、演習の解答、各刷ごとの更新情報を提供している。

短所

  • 計算機科学ではなくプログラミングの実践。 本書は動くPythonプログラムの書き方を教えるもので、アルゴリズム、Pythonの組み込み型を超えるデータ構造、計算量、計算理論は扱わない。
  • デプロイの手順は古くなりやすい。 第20章はPlatform.shにデプロイする。著者のウェブサイトは現在、同社が社名を変え方針も変えたため学習者には勧められなくなったと説明し、別のホスティングサービス向けの代わりの手順を示している。読者はオンライン版に従うべきである。
  • プロジェクトは幅より深さ。 各プロジェクトは一つのライブラリを詳しく扱う。Pythonのエコシステムをより広く概観したい学生や、より高度な言語機能を学びたい学生には、さらなる読書が必要になる。

コースにおける位置づけ

本書は、プログラミング入門のコースの中で最も実践的な、プロジェクト主導の最初の1冊である。アレン・ダウニーの Think Python もPythonを使うが、プログラミングを計算機科学者のように考える方法として捉え、概念と問題解決により注意を払う。プログラムの書き方だけでなく、なぜそれが動くのかの説明を求める読者に向く。フェライセンらの How to Design Programs は、主流の言語ではなくDrRacketの教育用言語を使って体系的な設計手法を教える。ジョン・グッタグの Introduction to Computation and Programming Using Python は計算論的思考、モデル化、データ分析へとさらに踏み込み、第I部の後の次のステップとして自然である。

エーベルソンとサスマンの Structure and Interpretation of Computer Programs は抽象化とインタプリタについての古典であり、カーニハンとリッチーの The C Programming Language はポインタやメモリを含めてCを教える。どちらもより要求水準が高く、すでにプログラミングの経験がある学生に向く。よくある道筋は、マセスで言語を身につけ、概念のためにダウニーかグッタグを読み、後の授業でCやSICPに進むというものである。

本書の使い方

本書は、年齢や分野を問わない全くの初心者、授業の教科書がより理論的で、ものを作る練習をしたい学生、そしてPythonへの早道を求める他言語のプログラマに向いている。プログラミングの経験は前提とされていない。

  • 中核: 第I部を順番に。例題は自分で打ち込み、先へ進む前に「Try It Yourself」の演習をすべて解く。最も時間をかけるべきは第8–10章で、テストを扱う第11章は授業で求められなくても取り組む価値がある。
  • プロジェクト: 関心で選ぶ。各プロジェクトは他のプロジェクトではなく第I部に依存している。ゲームはクラスとプログラムの構造を教え、可視化の章は理科系やデータを多く扱う分野の学生に向き、ウェブのプロジェクトは最も長く、最も骨が折れる。
  • 付録: 付録A(インストールとトラブルシューティング)と付録C(助けの求め方)を手元に置き、付録Dを使って自分のプロジェクトをGitでバージョン管理するとよい。

ソースコードをダウンロードし、特に第20章のデプロイに取りかかる前に、自分の持っている刷についての更新情報を著者のウェブサイトで確認すること。読み終えたら、プロジェクトの一つを自力で大幅に発展させてみるとよい。手引きのないプログラムを設計しデバッグする習慣こそが、本書の演習をプログラミングの技能に変える。