Digital, digital and digital

デジタルについてトッププロファーム勤務の藤谷が書き綴ります。

Pythonによるプログラミング入門 東京大学教養学部テキスト - 百回読み返すPythonの教科書 (1/X)

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

ファームの卒業が決まったこともあり、最近CS領域をゼロからやり直しています。ここ数年MOOCSにどっぷりであまり本は買っていなかったので、ほとんどノールックでAmazonで買ってしまっていますが、良書って本当に滅多に出ませんね。MITのDSコースの準備の為に統計の本を買い込んだ時も結局の所は大学生の頃から知っているような本を復習することになりました。やはり名著のラインナップは簡単には変わらないんだなと感心しました。

そんな中で良書を見つけました。

Pythonによるプログラミング入門 東京大学教養学部テキスト: アルゴリズムと情報科学の基礎を学ぶ
https://amzn.to/2oSw4ws




ぼくはずっとProgrammingというかPythonについて、基礎的な内容を薄く、エッセンスを効果的にまとめているような本が出ないかなと思っていました。英語学習における英文読解読解入門 基本はここだ!みたいな本です。ぼくは15分くらいで一読することが出来る分量・難易度で、エッセンスを見事な表現で伝えているような本を使って毎日訓練するということを昔からやります。並行して、アルゴリズムイントロダクションみたいな網羅性の高い名著を数年かけて頭に入れます。大体なんでもこのアプローチでいけます。

本の構成は二部構成からなっていて、諸々の基礎固めるにとてもいいつくりです。本書の言葉を借りるならば「情報学の基礎を学ぶ、そのために必要最小限のプログラミングを学ぶ」です。下記二部構成になっています。

  1. プログラミングの構成要素の基礎
  2. 情報科学の基礎

こういう基本書を推すと大抵馬鹿にされるものですが、良質な基本書というのは「全ページの内容が一瞬で分かるかどうか」が非常に重要です。この「一瞬で」というのが非常に重要で、大抵の場合ここにいたるまでにすべて暗記するということになります。

本書のもう一つの良い点は、説明が良い点です。エッセンスのピックアップの仕方と表現がうまいです。これはプログラミングの本だと貴重です。python入門とかでまとめサイトに載っている本に対する疑問は説明が良くない点です。一番本質的なところを理解している著者が適切な表現で文章にしてくれることが非常に重要で、このあたり東大の面目躍如だとおもいます、第一部のプログラミングの構成要素の基礎については記載情報はどこにでも書いてあるようなことなのですが、説明の仕方がいいです。頭にスッと入ってくる文章って書くのが難しいんですよね。

定義も非常に良いです。例えば、プロミングの基本的な要素はなにか?と聞かれて即答出来ますでしょうか。変数関数配列繰返し条件分岐です。これは元ネタは明らかにMITの『Python言語によるプログラミングイントロダクション:データサイエンスとアプリケーション』から持ってきているのですが、こういうスッキリとしていてエッセンスを捉えている定義は読者への貢献性が高いです。

プログラミングというと、とにかく書けとか写経しろとか言われますけど、やはり「良質な説明」を理解する前に量的なことをしても無駄が多いんですね。英語の多読多聴を避けた方が良いのと同じ構造です。

英語学習 - 多読多聴の前に (英文法)
https://touya-fujitani.blogspot.com/2018/07/blog-post_75.html

買った当初は別に普通だなと思ったのですが、この本は良いです。ぼくは全ページ一瞬で内容がわかってしまうまで百回以上読むと思います。15分くらいで一周するのを百回以上するイメージですね。

この本を完璧にした後にMITのこの教科書をセットになっているMOOCSも含めてやって仕上げるのが筋が良さそうです。その為の良いブリッジになっています。

世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第2版:データサイエンスとアプリケーションhttps://amzn.to/2JvzrjJ

個人的にはPythonで久々に名著が出たなと思っているのですが、あまり盛り上がっていないようです。惜しむらくはページのレイアウトとかちょっとオシャレにして、もうちょっと色気のある本にしてくれる編集者がいたらなとも思いますけど。東大の教科書ですからね。今後blogで取り上げていきます。

この無料で公開されている京大のpythonの授業のpdfも大変にお薦めです。 


プログラミング演習 Python 2019 - 京都大学学術情報リポジトリ

https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/245698/1/Version2020_02_13_01.pdf


MOOCSも積極的に活用しましょう。それと同時にコースは精査しましょう。かなり一般化したことで、
Digital系なのに、prequisit にプログラミング不要という謎のコースが多くなってきています。やはり「近道の様で、一番の遠回り」になるのは避けたいです。

 
プロラミングを学んだことがないという方はやはり長期プランに切替えて、
MIT1年目の授業が公開されている下記のコースをまずやるというのが「遠回りの様で、一番の近道」。
 
First year STEM classes from MIT
 
・要は、Python入門のコース。
 
Computational thinkingの入門コース。
 Computational thinkingについては、Carnegie Mellon卒!!の上杉周作さんが非常に良質な記事を書かれているので是非読んでみて欲しい。記事で出てくる数学パズルはすぐに答えを見ずにじっくり考えて見て欲しいです
「プログラミング」と「プログラミング的思考」の違いを、分かったつもりになれるヒント