思念の滝壺

山に登る。

Pythonプログラミング!

私は高校3年生の暇になっていたあたりからプログラミングを始めたと思う。コンピュータの運用そのものを理解して本格的にやるようになったのは大学に入ってからだ。選択した言語はpythonである。正直始めた当時は何から始めればいいのかさっぱりだった。よって友達の勧めに従ってほぼ何も考えずpythonに手を付けたのだ。(厳密には確か高1頃にプログラミングに手を付けようとしてjavascript,atom環境でドットインストールから学習しようとしたことがあったがまるで続かずすぐに投げた)しかし今ではpythonがどれだけ初学者にやさしく書きやすい言語であるかをしみじみと感じている。

 

・まずインタプリタ言語であり、pipによりライブラリインストールも管理できるので環境の整備が楽かつ実行に手間がかからない。

・ブロックがインデントで識別される。見た目がめちゃくちゃきれいになり、論理構造も分かりやすい

・リスト内包表記の存在。100までの自然数のリストであれば[i+1 for i in range(10)]というわずかなコマンドだけで作れてしまう...!

・豊富なライブラリ群の存在。主に科学技術計算関係のコミュニティに好まれてきた言語のため計算ライブラリには非常に強い。例としてscipy,numpy,matplotlib,scikit-learnなど。

オブジェクト指向のサポート。初学者には基本的に用がないが、慣れてくるとクラス作成による一般化、作業短縮はだいぶ有用になる。

今思いついたものだけでもこれだけある。ちなみにかなりpythonと類似した言語にRubyがあるが、個人的にライブラリ、コミュニティの充実性からpythonを推したい。

 

 結局のところプログラミングとは計算、ゲーム、事務など、何かの目的を達成するための手段であって目的ではない。したがって基本的には目標への最短経路を選んで学習すべきだろう。非常に簡明に記述できライブラリも充実しているpythonは、その目標への最短距離をかなりの場合において実現している言語ではないかと思うのだ。だからこそ、ぜひプログラミング技能を生かせるようになりたいという初学者にはpythonを使ってほしいと思う。しかし一方、私なんかはプログラミングそのものに興味をもって特に目標もなく始めてしまっている人であり、そういう人は自分の興味に従って突き進んでいくのが一番楽しくていいのではないかと思った。

 

 今取り組んでいるのは、リバーシの本格的なGUIの開発である。AIの思考アルゴリズムであるアルファベータ法は昨年の初秋に学んだのであるが、python標準のGUIライブラリtkinterにおいて複数ウィンドウを作成して過去のものを閉じる方法が分からず、ドキュメントも作っていなかったので頭の中でこんがらがってしまったこともあり、guiの作成は中途半端なままで終わってしまった。tkinterの取り扱いについては、以前よりもオブジェクト指向に習熟したおかげか十分に把握できたので今度こそは美しいGUIを完成させたい。その先の目標はリバーシの評価関数の改善によるAIの強化だ。現在は石の位置に基づく静的な評価で読ませているが、強化学習を適用してみたい。

 

今のところ得ている規模の大きいプログラム作成のための教訓

・一つの意味を持った一連の動作は関数として定義してまとめてしまう

 ブラックボックス化してしまうことでその内容の理解に割く脳内の容量を節約する

・命名に注意

 変数名は用途に沿った名前を付けつつもなるべく通し番号を使わずに参照性をよくするべき

・作成した 変数、関数、クラス の 引数、返り値、動作内容について記述し、自分自身の思考を整理できるようなREADMEを作成して添付する

 

 

pythonの仕様にはそこそこ慣れてきたので、新しい環境にもチャレンジしてみたい。C++を少し触ってみたが、pythonの後だとやはりとっつきにくい面は否めない。

関数型のLispにもちょっと興味があるのでやってみたい。

Lisp