classを中心としたオブジェクト指向な考えはプログラム全体を一つのシステムとして構築する上で有用であり、効率的なプログラミングのために有用だと言えます。
一方、個別具体的で詳細な問題をどう処理するかを考えるアルゴリズムの問題の重要性は言うまでもないでしょう。
前者を全体、後者を部分と呼んでも良いかも知れません。抽象と具体と言った方が適切かも知れません。
私自身、プログラミングを生業としているわけでもありませんが、年数だけは重ねているので、だんだんとシステム構築に重要性を感じるようになってきました。しかし、プログラミングを始めたばかりの人にとっては個別の詳細な問題の方が気になるものだと思います。
プログラミングを始めた若い人にとっては、既存のアルゴリズムであっても自分の手で再構築したり、目でよくソースコードを眺めたりしながら身につけていく過程が必要なはず。そしてある程度見通しができた段階で全体のシステムに目が向いていくのでしょう。年数を重ねていっても、そのアルゴリズムを考える過程が不要になるとは思いませんが、掛けられる時間は減っていってしまいます。その分、全体の構成を抽象的に捉える事にこだわらざるを得ないのかも知れません。
恐らく、これは学問についても言えることで、個別具体的な事象を理解しようとする営みをすっ飛ばして、抽象的な学問体系を身に着けさせようとする試みは失敗するでしょう。
幸い、pythonなら言語学習に要する時間が少なくて済むので、python not heavy 5で示したように、オブジェクト指向の紹介もスタートから短期間で、しかも簡潔に見せる事ができます。若い人は個別具体的なアルゴリズムの問題に取り組みながらも、オブジェクト指向の有用性を少しずつでも感じてもらえればと思います。
などと語ってみながら、私自身、自分のデータをipython notebook上で解析する際に、滅多に`class`なんてタイプしないのです。 pythonはソースが短いから、小規模なデータ解析だと過去の自作関数やセルをコピペしてその場で修正するだけで済んでしまう事が多いのです。classは寧ろ、C#でタイプしてる。
Physical Entity-Oriented Python Learning Experiment
物理実体指向パイソン学習実験: 物理的実体をプログラム上のオブジェクトとして表現し、現実世界を数値的に再現しようとする思考実験です。
mathjax
2015年4月24日金曜日
2015年4月22日水曜日
2015年4月21日火曜日
Pythonを用いたデータ解析に関するリンク集
実験屋の為のIPYTHON NOTEBOOK
IPython Notebook (初心者向け)日本語フォーラム
A gallery of interesting IPython Notebooks(英語)
Python 3.4.2 ドキュメント(日本語訳)
Python Scientific Lecture Notes(日本語訳)
Matplotlib
各種グラフやマップデータの表示に不可欠。ちょっと癖はあるが、これに代えて勧めるべきものはまだ無いと思う。(分野にもよろうが。)
Numpy
Scipy
Numpyだけだと不便を感じる人のためのちょっとした拡張機能。
NumpyとScipyの二つは配列、行列、最小自乗法、偏微分方程式の解など、データ解析には不可欠。
Sympy
Mathematicaのような代数計算がフリーな環境でできる。wxmaxima以上に慣れが必要ですが、ipython notebookユーザーとしては有り難い。
Pandas
データサイエンス向けパッケージ。自然科学でも使えますが、numpyを覚えるのが先でしょう。
Markdown
ただし、ipython notebookで使えるmarkdownは拡張されています。なので、ここが良いかも知れません。
もちろん、このブログにも多少の情報があります。
pythonもipython notebookも進歩が早いので、情報はどんどん古くなっています。基本的には便利になってきているのですが、古いままでは動かない事もあります。
最も頻繁に起こりそうなのは、python2で許されていた
print x
がpython3では許されず、
print(x)
とする必要がある、という事に由来するエラーです。
printはただの関数なので、()が必要です。
PythonNotHeavy-4
Listとndarray
zip()という関数を用いたリスト内包表現に触れています。
少し分かりにくいと思いますが、見た目がすっきりしていて、かつ計算速度の速いプログラムを書くために重要な関数だと思います。
Python2と3の違いが実は内在していますが、初心者には3を前提に話すべきと考えています。
私自身にとっては、enumerate()の多用から脱却する良い機会にしたいと思っています。
ラムダ式はまだ使う気になれません。
zip()という関数を用いたリスト内包表現に触れています。
少し分かりにくいと思いますが、見た目がすっきりしていて、かつ計算速度の速いプログラムを書くために重要な関数だと思います。
Python2と3の違いが実は内在していますが、初心者には3を前提に話すべきと考えています。
私自身にとっては、enumerate()の多用から脱却する良い機会にしたいと思っています。
ラムダ式はまだ使う気になれません。
2015年4月20日月曜日
2015年4月17日金曜日
PythonNotHeavy -2
2015年4月16日木曜日
新しいシリーズを始めました。
登録:
投稿 (Atom)