Haskellプログラムを書いていて感じたことがある.
それは,
- Haskellでプログラムを書くこと
- 物理の文章題を解くこと
が似ていることだ.
両者の考え方の共通点として感じたのは
- 最も大事なことが,何の値を求めたいのか明確にすること
- 問題の条件を「数式」や「ソースコード」として表現する方法が要求される
- 次元解析のような考え方が有効
ということだ.
1. 求めたい値を明確にすること
何よりも大事だと思う.
プログラムの文法を知らなくても,数式変形の方法を知らなくても,
これができなくては,問題を解けない.
物理の問題なら問題文を読み,これを念頭に置きながら,
立式,式変形(「求めたい値=○○」になるように式変形を進める)すればよい.
2. 問題条件を「数式」・「ソースコード」として表現する方法
物理の問題で言えば,自分が覚えている数々の公式の中から,
問題を解くのに有効な公式を引っ張り出すこと.
これらは教科書や授業などで扱われる部分だと思う.
これらは理解が重要だと思う.つまり,丸暗記のみで対応できない点.
数式もソースコードも言葉・言語だ.なまけなければ理解できる……はず.
※「丸暗記のみする」ことと「しっかり理解するため,多くのパターンを結果的に暗記してしまうほど勉強する」ことは違う.
3. 次元解析の考え方
これは,公式の作り方に近いもの.
- まず,求めたい値にどんなパラメータが影響しているか,を考える.
- e.g. 加速度aには,力Fと物体の質量mが関係してる
- それから,そのパラメータが求めたい値にどう影響するのかを考える.
- e.g. 加速度aは,力Fに比例し,質量mに反比例する
手元にある値・データ・パラメータをどう変形・変換して,求めたい値にするか,を考える.
「関数プログラミングとはパイププログラミングのようなプログラミングのことです。」(引用元:http://www.mew.org/~kazu/material/2015-fp.pdf p.108)