最近プログラミングの勉強をもう一度最初からやっている。
というのも、プログラミングの勉強を気が向いたところから気が向いた順にやっていたので、出来ることは増えてきているが、理解が曖昧なことが多すぎるのだ。
このままでは基礎工事をいい加減に済ましたところに家を建てているようなことになってしまう気がする。今はまだ1階部分を建てているので大丈夫なんだとしても2階3階としていく段階で傾く可能性が非常に高い。
傾いていても住めれば良いという考えかたもあると思うが、僕はどちらかと言えば、マグニチュード8.0の地震がきても平気な状態にしておきたいタイプだ。
講師として基礎が曖昧なことが原因で伸びしろを失っている学生を大勢見てきたことが影響しているのかもしれない、何かしらの分野をある程度以上のハイレベルにしたいのであれば応用問題に挑むよりも基礎を100回繰り返す方が重要だ。
そんな訳でもう一度基礎から系統立ててやり直しているのだが、アマチュアがプログラムを書いて遊んでいる分には困らないが、プロとして大きいプログラムを書くには知ってないとマズいような部分がすっかり抜けていることが判明した。
例えばこんな感じだ。
入力された数字の平均を求めるプログラムを作りたい。
入力:52,78,43,18,60,11,24
今までこういうのばかり書いていた。
nums = list(map(int,input().split(",")))
avg = sum(nums) / len(nums)
print("{:.1f}".format(ave))
別にこれで動くし答えも出せるのだが、これしか書けないのだとするとアマグラマーにしかなれない。プログラマーになるためには、こうも書けないといけない。
def avg(x):
return sum(x) / len(x)def main():
nums = list(map(int,input().split(",")))
print("{:.1f}".format(avg(nums)))
if __name__ == "__main__":
main()
プロの方からしたら、今それ?と思われるかもしれないが、やっとこの書き方が出来るようになった、意味もわかるようになった。
今まで、if __name__ == "__main__":とか、何か知らないけど大きいプログラムには付いてるよくわからんやつ、という認識でしかなかったのだ。
そりゃ僕がファイルを分けて書いたプログラムはまともに動かない訳だ、仕方ないから何でもかんでも1つのファイルに長~く書いていたが、これでやっと処理ごとに分割したファイルを作ったり出来る。
おそらくこういうのが他にも大量にある。
星座の形を知らない人には、1つ見えてない星があっても気づきようが無いのだ。
ネット、特にネットに無料で公開されているもので勉強していると、星座を構成する星1つ1つの情報はいくらでも見つかる、それを適当に選んでいたのだが、じゃあその星を繋げると全体としてどんな星座になっているのか、という情報は少ない。
その辺に関してはやはり教科書的な書籍、もしくはネット上でも有料でパッケージ化されたコンテンツが強い。
まあそれはネット全体に言えることではある。ある物事を知ろうと思い記事を読めばピンポイントでそのことはわかるが、それがその物事を取り巻く全体像のどこに位置していて全体とどんな関わりがあるのか、ということは元々その物事について詳しい人でなければ掴むことが難しい。
話が完全に逸れる予感がするので終わりにしたい。
時間割を決めて、ALISは2時間、となっているのだが、全く書くことを考えて無い状態から、書くことを決めて話をまとめるのが案外大変だと気が付いた。
プログラミングの話を書こうと思って書き始めたのだが、何か違うことになっている気がするが、もう時間が無いので、これはプログラミングの話だと言い張っておく。