Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Pythonによるプログラミング入門 東京大学教養学部テキスト

Pythonによるプログラミング入門 東京大学教養学部テキスト: アルゴリズムと情報科学の基礎を学ぶ
技術書は、私がよく読書するジャンルの一つだ。何らかの目的やノウハウに特化したものを選ぶ機会は少なく、特に初心者向けの汎用的な内容のものを選んでいる。
何より初学者の時点においては、対象となる話題への知識があるわけでもなく、結果として書籍の内容についても、その良否を判断できる訳がないのだ。内容の良否ではなく、自分自身に最適なものを見出すには多読、つまり読み漁るしかない。初心者向け書籍に触れることを意識しているのは、そのためだ。
また私の場合、それほど高度なことを実践することはなく、実用以上の好奇心をきっかけに、無用に手を広げすぎない為の工夫でもある。

今回紹介する書籍は東京大学教養学部のテキストとして用いられており、まさに初学者向けの内容ではあるのだが、書店で見かける「すぐわかる~」、「~ではじめる」的なフレーズを冠する書籍とは一線を画す内容だ。またPythonが採用されてはいるのだが、Pythonの入門ではなく、「プログラミング」の入門であることには注意したい。それは冒頭に紹介される、次の二言に表れている。

既存のプログラミングに関する教科書は、特定のプログラミング言語の機能とその利用法を知るような方向性に進みがちで、情報科学の教養を得るには適切でなかった。本書は逆に、情報科学の基礎を学ぶ、そのために必要最小限のプログラミングを学ぶ

ただし、プログラミングの教科書としても有益であるよう、言語によらず重要なプログラミング上の概念、たとえば正しさの確認やモジュール化など、についてはできる限り盛り込んだ

教養、必要最小限のプログラミング

何より重視されているのは情報科学の「教養」としてふさわしい事柄であり、言語の構文や書き方ではない。本書は教養学部向けのテキストであり、情報学を専攻する者に対象を限定していないのだが、次に紹介するような事柄への理解を求めているのだ。これでも「必要最小限」であるのは、「教養」として求められるレベルの高さがうかがえる。
あえて「プログラミング」の入門書を謳うのであれば、どれも必要な事柄なのだが、同時にほとんどの入門書が触れない事柄でもある。

題材
第2~4章 プログラミングの基本要素
変数、関数、配列、繰り返し、条件分岐
第5章 モジュール化 ライフゲーム
第6章 オブジェクト指向、テストとデバッグ 放物運動
第7章 再帰、疑似乱数、時間計算量 p値の計算
第8章 線形探索、二分探索、ソート、空間計算量、データ構造 検索
第9章 数値誤差 回帰分析
第10章 数値シミュレーションの誤差と安定性 拡散
第11章 動的計画法、メモ化 ゲノム解析
第12章 k平均法
コンピュータの限界
分類

よくある入門書で紹介される事柄の一つは「書き方」、いわゆる構文だ。それは色違いの囲みと共に構文を紹介すると同時に、そのサンプル・プログラムを掲載するのが典型的なパターンだと思う。本書にて、そのような記述は非常に限定的で、「まとめ」的な記述が簡易ガイドとして巻末に掲載されている。
第2~4章、52ページ分の内容が、いわゆる入門書に相当する部分だが、本文のほとんどは説明だ。説明を読み、数行の関数定義をタイプし、対話形式で実行する、ことを話題毎に繰り返す。説明が中心でありながらも、試して覚える、的な要素がある。章が進むと、数行で記述された関数を2~3用いるプログラムに発展する。プログラムはそれほど長文ではない。

pypi.org
基本的にitaというサポート・パッケージ以外を用いない。読者がnumpyやscipy、scikit-learnを用いる機会は、本書には含まれていない。それらは紹介すらされない。とにかく最低限の事柄を理解することを求められている、と私は感じた。Pythonとプログラミングだけでなく、題材に用いられているp値やk平均法についても同様だ。
プログラマは、自分が理解していないものをプログラムできない、と私は考えている。p値を算出するにしても、k平均法でクラスタリングするにしても、パッケージの提供する関数呼び出しでは済ますようなことはしない。サンプルを参照して読者自身がプログラムすること、あるいはそれを理解することを求められている。

Pythonという言語に限定せず、プログラミングの入門書として、私はこの本を気に入った。

  • 説明が明瞭で大変分かりやすい。
  • 一般的な入門書には掲載されない、大切な事柄が簡潔に示されている。
  • 同時に章末に掲載される練習問題は簡潔でありながらも、少々の手ごたえがある。

ちなみに回答は同書中では提供されず、そのサポートページ末尾に掲載されている。本文中の問題番号が、必ずしもそのプログラム名と一致しないこと(例:練習問題7.3.→ex8_3)には注意が必要だ。
とはいえ読んで理解するのが困難な人、それは読解力の無い人という意味ではなく、読んで理解するという自発的な行為よりも、

  • 自分自身に都合が良いように分かりやすく説明してくれる、
  • 書かれている考えを無条件に受け容れるので、自ら考えたくない、

そのような書籍側からの歩み寄りを期待する、受動的な態度を好む向きには、とてもお勧めできる書籍ではない。
圧倒的にプログラムよりも活字が多く、章の1/4程度は題材となる数学的事柄の説明も含まれる。そのようなタイプの人たちが見れば、きっと拒否反応を示すのではないだろうか。少なくとも説明文に記載されていること、プログラムが実行しようとしていることの整合を自ら捉えて、理解する姿勢が必要だ。

余談

いわゆる典型的な入門書を求める方々には、山田祥寛、そして同氏が主催するWINGSプロジェクトの書籍をお勧めする。
同氏の書籍は分かりやすいだけでなく、とにかく優しく丁寧だ。話題の深さは書籍のテーマ次第なのだが、初めて取り組む要素技術において、最初の一歩となるガイド付き説明書のようなものを求めるならば、まず同氏の書籍を一読するのがお勧めだ。
www.amazon.co.jp
www.amazon.co.jp