Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

Python (Python 3) で数学をやるにはどうしたらいいか。その5. 前進するための入門書の読み方。"匍匐前進かよ! どうかしちゃってるぜ!"

このシリーズの過去記事は以下にまとめてある

py3math.hatenablog.com

当記事について

(今回の記事はちょっと違うが)。

当ブログ筆者 (以下、筆者) も、Python で数学をやるにはどうしたらいいか悩んでいた時期があるから、昔の自分に向けて書いたような記事。

対象とする読者

Python の入門書を一冊か二冊、一通りやった人で、Python の基本的な構文や基本的な用語がだいたいわかっている人。

そして、公式サイトを読む努力をちゃんとする人。

プログラミングの入門書はどう読んだらいいか

Python と数学の話を進める前にちょっとだけ入門書の読み方を書いてみたいと思う。

まず、筆者の技術書の読み方を書いてみる。

順に: 目次をゆっくりじっくり読む。書籍全体をぱらぱらとめくって眺める。最初から最後までただ読む。読み終えたらコードを写経する。コードを改造する。

だいたいはこういう流れだ。

もう入門書を読むことはほとんどないが、筆者が今、プログラミングのまったくの初心者だとしたら、

順に: 目次をゆっくり読む。書籍全体をぱらぱらとめくって眺める。最初から最後まで読むが理解できないところは飛ばす。読み終えたらコードを写経する。コードを改造する。

というふうに読むと思う。

ポイントは、"最初から最後まで読むが理解できないところは飛ばす"というところだ。

換言すれば、理解できないことを理解しようとしない、ということだ。

まったくの初心者が入門書だろうが何だろうが、すべてを理解できるわけがないという事実を受け入れよう。

人間の好奇心を意図的に封印するといってもいい。

好奇心というやつの厄介なところは、ちゃんと知りたくなるところだ。

これは大切なところだが、ちゃんと知り得ないと、読むのをやめてしまうという最悪のパターンに嵌まり込む。

書いてあることが理解できず、好奇心が満たされないと、強いストレスを感じるのが普通だ。そして、読むこと自体をやめてしまう。

とまあ、これは 1 例だが、それほど見当違いでもないだろう。

入門書は、まずはざっと読もう。理解できなところは飛ばそう。いつかわかるようになると信じよう。

さて、以下では、入門書に載っているコードの改造例 (変更例) を示そうと思う。

『独学プログラマー』からコードを少しだけ、お借りする (翻訳者の方や出版社の方が、もし当記事を読まれて、「著作権として問題があるな、やめてほしい」等の場合は、Twitter の @py3math までリプライをお願い致します。当記事を編集乃至削除しますので)。

以下、Python の対話モードでコードを書いていく。

p.44 のコード:

>>> for i in range(100):
...     print("Hello, World!")
...
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
# (出力が長いので略)

これを改造してみよう。

>>> for i in range(10):
...     print('hello, world')
...
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world

どこを改造したかわかるだろうか。

range(10)hello, world に改造した。

この程度では改造といえない?

そうかもしれない。

だが、小さなことからはじめよう。

少しずつ、少しずつ。

ちなみに、hello, world をなぜこう変えたのかというと、筆者は、割とこの言葉に思い入れがあるからだ。

プログラミングの世界では、世界一有名な言葉であろう hello, world は、C言語の有名な書籍である、『プログラミング言語C』の冒頭に書かれたことから始まったはずだ。

その書籍には、hello, world と書かれており、Hello, World! ではない。

筆者は、これにはこだわりたい。

range(100)range(10) と変えたのは、単に 100 は多すぎるからだ。

p.105 のコード:

>>> name = "Ted"
>>> for character in name:
...     print(character)
...
T
e
d

これを改造してみよう。

>>> name = 'Ted'
>>> for char in name:
...     print(char)
...
T
e
d

char で十分通じるはずだ。

それから、ちょっと書き忘れていたが、これは好みの問題でもあるが筆者は、Python では基本的にダブルクォートは使用しないから、シングルクォートにした。

p.108 のコード

>>> for i in range(1, 11):
...     print(i)
...
1
2
3
4
5
6
7
8
9
10

上をリスト内包表記に改造した。

>>> print(*[i for i in range(1, 11)])
1 2 3 4 5 6 7 8 9 10

p.112 のコード

>>> for i in range(1, 6):
...     if i == 3:
...         continue
...     print(i)
...
1
2
4
5

上を偶数だけ出力するように改造した。また、in にした。

>>> for n in range(1, 6):
...     if n % 2 == 1:
...         continue
...     print(n)
...
2
4

と、こんなふうに少しずつ、自分なりに改造 (変更) すればいいわけだ (ほんとうはもっと例を書きたいが、書籍のコードを載せるのはあまりいいことではないのでこれくらいにしておく)。

だが、と思う。

上で改造例 (変更例) を示したわけだが、こういうことができるのも筆者にある程度の、いわば経験値みたいなものがあるからでは?

いや、どうだろうか。

筆者がプログラミングをはじめた頃を振り返ると、記憶の中では、筆者はすぐにサンプルコードの改造をやったと思う。

ちょっともう昔のことであまり覚えていないが。

繰り返しになるが、上で書いた、

"順に: 目次をゆっくり読む。書籍全体をぱらぱらとめくって眺める。 最初から最後まで読むが理解できないところは飛ばす。読み終えたらコードを写経する。コードを改造する。"

のような地道な行為を続けるしかないと思う。

あたかも匍匐前進するように。

なお、実践についてだが、基礎をおろそかにすると、いずれ後悔するかもしれないとだけ書いておく。

(つづく)。

参考文献

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠