下記を見て、自分もやってみる。
https://rabbitfoot141.hatenablog.com/entry/2020/03/17/190235
- 大学1年のとき、夏の1ヶ月くらいfortranの講義を受けて、初めてプログラミングに触れた。VirtualBox上にVine Linuxをインストールしていた。冬は講義がなかったのでfortranからは一旦離れた。
- 書店においてあったVBAのブルーバックス本が目に留まり、Excelで家計簿を集計するマクロを作った。fortranではCUIアプリしか作れないので、もっと実践的な言語をやりたくなった。初めて実践的な成果物を作れたのでとてもうれしかった。
- 大学2年の前期で再びfortranの授業を受ける。今度はある程度数値計算をやった。自宅で課題をやるために、Vine LinuxからUbuntu(xubuntu)に乗り換えた。またしても冬は講義がなかったので、またfortranからは離れた。
- サークル棟のネットワーク問題のために、シェルスクリプトやcmdのバッチファイルを作る。ネットワークの知識はここでつけた。
- Ubuntuを使い込んだ。USBメモリにインストールしたり、そこらへんに転がっていたマシンにインストールしてブートローダの仕組みやパーティションの基本を覚えた。また、Apacheで簡単なCGIコード(シェルスクリプト、fortran)を動かしたりした。
- 研究室配属で三度fortranに触れることになる。MPIでの並列計算を本格的にやった。結局修士修了まで3年、巨大な秘伝のソーススパゲティと格闘していた。またグラフを書くために「bashでgnuplotスクリプトを吐いてグラフ出力」とかいうソリューションを作ってしまい、自分でも「あまりにひどすぎる、どうにかしてえな」と考えていた。
- M1の後半くらいに、グラフの問題に対処すべくPythonを習得する。NumPy、Matplotlibで後処理をやるコードを書いた。クソコードだが、研究室ではいまだに神コードとして受け継がれているらしい。当時はいろいろ言語をやろうとしていて、CやVBに手を出そうと本を買ったりしたが結局身に付かなかった。
- 就職して1ヶ月くらいC/C++の研修を受ける。久しぶりに成果物を求められないゆるめの研修を受けて*1、メモリなどコンピュータの細かい仕組みやオブジェクト指向についてじっくり考えることができた。
- C++でライブラリを作ってC#、WPFでプロトタイプを製作する。とある統計アルゴリズムを試作するよう指示され、自分で設計して実装した。マーシャリングがとても面倒だった。いまだによくわかっていない。疎結合にするためにC++でdllを作ってC#から呼び出すようにしたが、C#用のインターフェースを入れてる時点で今思えばあまりよろしくないと思う。
- Unityの使い方を少し覚える。ばりばりのゲームを作り込むわけでなく、3Dエンジンとしてオブジェクトの配置や簡単なC#スクリプトを動かした程度。
- Unityとの比較としてUE4も触る。こっちはコードはブループリントしかほぼさわってない。C++はサンプルコードを動かした程度。
- Python機械学習プログラミングを1周する。思い立ってから着手までなんやかんやで時間がかかったが、着手してみたら意外と簡単だなと思った。
- Arduino互換機で前に試作した統計コードを実装する。Arduinoでclassとかエレガントな機能を使うとろくなことにならないことを学んだ。
- Node.jsで既存アプリに機能を追加するために、JavaScriptをかじる。NodeからPythonを呼び出して、MongoDBのデータをScikit-learnを叩いて処理した。
- kerasでディープラーニングをやりはじめる。見よう見まねでMNISTを解いたり、GANを実装したりした。TensorFlow2.0がリリースされたあたりからはtensorflow.kerasに移行した。
とまあ、かなりきしょい独特な順番で並列計算や組み込みから機械学習、3Dエンジンと広く浅くいろいろやってきた。ええ加減「web周りだけやったことがないのでやっていきたい」といい続けて3年くらい経っているのをなんとかしたい。
*1:文系の人もいたので経験者にとってはゆるめだった。