僕はアセンブラと呼ばれる低級言語の出身者。人間より機械(CPU)が理解できる側の言語。大学の研究室〜社会人8年目までアセンブラですごしてきました。
そんな僕が高級言語(Javaに触れるのが普通の時代)に関わることになったとき、全く理解できなかったのが「new()」というもの。「クラスからインスタンスを作る」ということが全くイメージできませんでした。
アセンブラは手続き型言語でコードの上から下に向かってだーっと処理されていくだけ。なのに高級言語ときたらコードの途中でnew()してインスタンスにアレコレさせる。意味がわからない(笑)
という時期がしばらくあって、いよいよ「高級言語なんか嫌い」が決定的になるかな〜ってとき突然インスタンスがわかりました。あくまで僕の脳内イメージなので、正しいことかはわからないけど「こういうことだ」ということが理解できました。
僕は社会人8年目まで某鶴のマークの空飛ぶアレのシステム屋さんしてました。
そこの開発言語はそっちの世界専用のOSとアセンブラ。業務上、全世界365日24時間フル稼働が必須の汎用機。その上でコードを書くにはその汎用機(のOS)の仕組みもある程度知っておく必要があります。
例えば「3月7日の401便の空き状況を教えて」というコマンドを入力したとき、汎用機(のOS)ではその処理に必要なメモリ空間を確保します。「空き状況を教えて」の結果が表示されるまでめちゃくちゃたくさんのプログラムを経由します。
その間、確保されたメモリ空間はあって、そのメモリ空間上でアレコレしてる。
「あ、これか」と思いました。
- クラスからインスタンスを生成してアレコレさせる
- 「空き状況教えて」からメモリ空間を確保してアレコレさせる
厳密には違うかもしれないけど、僕のイメージではこれがぴったりフィット。インスタンスが生成されることの理解が急激に進みました。イメージできるからプログラムの流れも理解できる。
もっというとmacOSなども根本は同じ仕組みなんだろうな、ということから、どんなOSもアプリも内部的にこう動いているんだろうなぁというイメージまでできるようになりました。
おわりに
社会人8年目で転職し、低級言語から高級言語を使う会社へ。15年目でフォトグラファーへ転身。でも、プログラミングは好きだし、つくりたい。そのための勉強も始めています。
►参考:PythonでWebサービスをつくりたいからUdemyでコツコツ勉強中
Pythonは高級言語に位置するものでクラスやインスタンスのある言語。実際にクラスを作ることの利点は(まだつくり慣れていないから)わからないけど、これまで経験してきたことはつながっているので、なんとなくわかるし、わかっていけるし、どんどんわかりたいと思ってる。
こういうことが腑に落ちていると、過去を「結局はよかった」と解釈できるようになります。
これからもたくさんのプロセスはあるでしょう。プロセス真っ只中にいるときは苦しく感じることでも、しばらくして振り返ると「結局はよかった」って思えることもたくさんあると思う。
だから、今やりたいこと、今好きなことをどんどんやっていこう。