数学と Python は余暇の遊び道具から始めればいい

「新人や同僚の教育に苦労」の話は何度かしてるけどね。

「数学」「Python (あるいはほかの何か)」「学習」=「ねばならぬこと」、という「強迫観念」が成長の妨げになってる同僚や新人は、それこそ何十人とみてきた。これは学校のような教育現場でも一緒だろうと思う。

年齢が高くなるにつれ「馬鹿に思われたくない」ための言い訳ばかりが達者になってくる「大人」も多くて、なかには(よっぽど言われ続けて悔しいのであろう)丁寧に説明を始めると烈火のごとく怒りを爆発させる「自称エンジニア」もいた。どんな頭の構造してるんだろうか。「彼」はほとんどパブロフの犬的に「バカにされてる」と感じさせる要素が一ビットでもあると「ワタシが何をしたんですか!」と怒りのスイッチを入れてた。なんでそーなる。

よく言われることだけれども、「学習」はもとはといえば、「ほとんどはやらなくてもいい遊び」である。けれどもそれには多くは「一般化」「抽象化」を含むので、「日々をちょびっとだけ豊かにする」ものだ。そう考えれば勉強は本来いつだって楽しいものだし、だれば「ねばならぬ」と考える暇もない。

純粋数学は「究極の汎用化遊び」である。だから「付いていくのが難しい」のはこれはまぁ当然だろう。なかなかに限られた人たちだけが面白がるようなものだ、多くは。だけれども、「F1 カー」の技術がいずれはファミリーカーの技術にフィードバックされるように、その底辺の基礎部分は「結構ついていけるしたまに役に立つ」ものが多いであろう。

「今がそのとき」だ。Python 、などの「ライブラリが充実しているプログラミング言語」の多くは、「民におりてきた数学ツール」に溢れている。これが「あー、高校時代わかんなかったんだよなぁ」を一撃で理解する助けになる。

permutations, combinations の話をしたとき、あんまり今回の論点を踏まえずに書いてしまったけれど、この2つ、実は「今から使える Python で数学」の代表例だったりする。やってみよう:

 1 >>> from itertools import permutations, combinations
 2 >>> teams = ["Hawks", "Lions", "Orions", "Buffaloes", "Eagles", "Fighters"]
 3 >>> print("\n".join(["%s vs %s" % (t[0], t[1]) for t in permutations(teams, 2)]))
 4 Hawks vs Lions
 5 Hawks vs Orions
 6 Hawks vs Buffaloes
 7 Hawks vs Eagles
 8 Hawks vs Fighters
 9 Lions vs Hawks
10 Lions vs Orions
11 Lions vs Buffaloes
12 Lions vs Eagles
13 Lions vs Fighters
14 Orions vs Hawks
15 Orions vs Lions
16 Orions vs Buffaloes
17 Orions vs Eagles
18 Orions vs Fighters
19 Buffaloes vs Hawks
20 Buffaloes vs Lions
21 Buffaloes vs Orions
22 Buffaloes vs Eagles
23 Buffaloes vs Fighters
24 Eagles vs Hawks
25 Eagles vs Lions
26 Eagles vs Orions
27 Eagles vs Buffaloes
28 Eagles vs Fighters
29 Fighters vs Hawks
30 Fighters vs Lions
31 Fighters vs Orions
32 Fighters vs Buffaloes
33 Fighters vs Eagles
34 >>> print("\n".join(["%s vs %s" % (t[0], t[1]) for t in combinations(teams, 2)]))
35 Hawks vs Lions
36 Hawks vs Orions
37 Hawks vs Buffaloes
38 Hawks vs Eagles
39 Hawks vs Fighters
40 Lions vs Orions
41 Lions vs Buffaloes
42 Lions vs Eagles
43 Lions vs Fighters
44 Orions vs Buffaloes
45 Orions vs Eagles
46 Orions vs Fighters
47 Buffaloes vs Eagles
48 Buffaloes vs Fighters
49 Eagles vs Fighters
50 >>> 

なーんだ。

そういうこと。「民に下りて来た数学」はなんだかんだ、「割とすぐに日常使えるもの」であることが多い。「三角関数」そのものをバリバリ使うことはないにせよ、ピタゴラスの定理くらいは「日常」だろう。Python のような言語ではその手のものは割と多く手に入る、ということだ。

願わくば、「難しい言葉で煙に巻くなんてお前はイジわるだ、ワタシが何悪いことしたんですか!」なんて反応をするバカエンジニアが、こういった積み重ねでこの世から撲滅されることを願う。












2015-12-17 12:20 追記
「自称エンジニアコレクション」てわけでもないが、「困ったちゃん」タイプでもう一種類迷惑なのを思い出した。

これは「物事はシンプルであるべきだ」を誤解して捉えてるタイプの「自称野郎」。数学的に綺麗にスッキリ書いたものを「目の敵」にして「自称単純化」をして台無しにしてしまうタイプのエンジニア、これは「かなり」多い。直される側にも責任がないとは言えないが、ただ問題は、当人が「元より良くなった」と信じて疑わないことだ。どんだけ機能が失われても。

元の「数学的に凝った」ものは「集合論」を踏まえた汎用だったりするのでかなり広い対象を扱えたりするものなのだが、「シンプルイズベスト」を誤って解釈してるそのエンジニアが「改善」すると、扱える対象がほとんどもとのコードに比較して「1% 未満」なんてことが起こる。

これが「困ったちゃん」なのは「誤解」のほうでは断じてない。わからないことがわからないのは仕方がないことである。そうではなくて、「元のコードは悪だ」「改善したコードは善だ」と善悪論で感情的に措置されてしまうことにある。