私がデータマネジメントを始めるまで。
私は化学工学出身の人間です。
ですが今はデータを扱う職業についています。
……なんで?
それは僕が幼少期の頃からPCと触れ合ってきたからでした。
エクセルとインターネットとの出会い
まだ小学生だった頃、私はパソコンでインターネットに潜るのが好きでした。当時使っていたのはWin Me。やれることなんて限られてます。インターネットとは言えども今のようなjavascriptやCSSで煌びやかに装飾されたものではありません。簡素なページに情報が書いてあったり、面白い画像が貼ってあったり、それだけでした。でもそれで十分でした。
ある日、私は父親の本棚にある「エクセル関数ハンドブック」に出会います。……エクセルって何?関数って何?そう思っていましたが、少し読んでみると、かなり面白そうなものであることがわかりました。この時から私は算数・数学が大好きだったので、エクセルの数値計算や、その自由度、関数の凄さに驚き、本を買ってもらって一通り勉強することとなります。
ちなみにこの時代は「JavaScriptを有効にしますか?」とか聞かれてなぁ。懐かしい。
BZとの出会い
皆さんはBZというソフトウェアをご存知でしょうか?これはバイナリエディタと呼ばれるもので、いわゆる「機械語」を読むことのできるものです。はい……なんでこんなものに辿り着いたのでしょうか……?
ベクターというフリーソフトをダウンロードできるページを漂っていた時期がありました。僕はここで意味不明なソフトをよくダウンロードしてました。おかげでIEのメニューバーのところが終わってました。けど、BZに出会い、これが私の情報工学への道の一歩となります。
こいつであらゆるファイルを開くと、全てがバイナリで見れます。インターネットや本で勉強しつつ、ファイルというのは最初の何バイトかのヘッダーと呼ばれる部分で「僕はこういうファイルだよ!」と教えてくれていると知りました。はい。こいつをいじって拡張子をめちゃくちゃにしてました。時にはよく分かんない部分のバイナリをいじってファイルを破壊してました。そしてなんとなくリトルエンディアンを学びました。マジでなんとなく。
よく分かんない未知のおもちゃが大好きな僕にはBZは最高の友達でした。なんでこんな低レイヤーから始まんねん。ここから高レイヤーへと進んでいきます。
C言語との出会い
PCが大好きすぎてCSSをいじったり、htmlをいじったりVBSをいじったりしてた僕ですが、ある日父親から「C言語勉強してみたらどう?」と言われます。
はい、速攻で本を書い、当時クソだったVisualStadio 2007(こいつが一番安定してる)を入れ、C言語を書くことになります。
自分が書いた操作がそのまま出てくるのが面白すぎる!!ハマりました。
そしてこの後VSが嫌いすぎて、メモ帳でヘッダーを外してコーディングしてcmdからgccを叩いてました。こっちの方が効率的です。
後にC++とも出会います。こいつに出会った時は感動しました。多値返却!?可変長配列!?ストリーム!?子供ながら技術の進化に感動を覚えていました。
LAMPをやってみよう
C, C++にめっちゃハマっていた僕。でも流石に気がつきました。……インターネットってどう成り立ってんの?????昔CSSなどをいじってた記憶はありますが、その裏側をよく知りませんでした。
ここでLAMPに出会います。僕の時代のLAMPはLinux, Apach, MySQL, PHPの略で、これらをまず覚えることで、Webサーバがどうなってるか理解しようというものでした。ちなみにこの結果僕はLinux(Cent OS)とMySQLだけ気に入ります。こっちでC, C++の開発もやるようになりました。Web開発はあまり向かなかったみたい。でもWiresharkという楽しい楽しい味方をゲットしました。また低レイヤーに戻るんかい。
ネットワークにハマるんかい。
Ciscoにハマるんかい。
Pythonとherokuとの出会い
大学生になった僕、Pythonという言語が大流行りしてるらしいと、ちょっと書いてみました。これが大ハマり。面白すぎるし、簡単すぎる。ただ、コンパイル言語に慣れていた僕からすると、少し扱いにくい部分もありましたが。こいつをきっかけにherokuをしり、サービスを簡単にネットにあげられることを学びます。そしてその管理としてgitHubを本格的に使うようになります。
ITエンジニアライフの始まりですーー
ちゃんと情報工学を学び始め、組み込みやマイクロサーバー(ラズパイ)を通して省メモリ化やIoTにも力を入れ始めました。
AI?ML?ただの線形代数やん。
当時はやっていたAI。if文の塊なんて言われてた時代がありましたが、ニューラルネットワークによる機械学習というものが誕生します。数学が大好きで、数値計算大好き人間としては見過ごせない。とりあえず理論を読みました。
線形代数の塊やん。vec<vec<double>>やん。
二次元配列の塊やん。
PythonにはNumpyという強い行列計算ライブラリがあり、こいつを使うだけで実装できました。
おもろ!!!!!!!!これが僕の人生を変えます。
データが欲しいな……スクレイピングか
機械学習をやるためにデータを集める日々が始まりました。よくわからんサイトのAPIを叩いたり、スクレイピングをしてデータを集めたり。今考えれば、このコードがパイプラインなのか?SQLiteに溜め込んだりしてたし。
スクレイピングどころか昔の実験データや、数値計算アルゴリズムで出力された数値すらニューラルネットワークに投げつけ始めました。終わりだよ。
NLP, Elasticsearch
あるし自然言語処理をやることになります。W2Vを高速化してこいつの類義語を使って検索エンジンを作ると……
C++を書きながら(この時にはGPUにも対応!)、とりあえず検索システムはSolar使ってスクレイピングでデータ貯めるかなぁ〜と思っていたところ、あるものに出逢います。
それがElasticsearch。
僕が触ってた頃はベクター検索もK-NNも使えなかったので色々と実装しましたが、こいつの検索は早すぎました。何?ここでNoSQLの強さに気がつきます。データの管理が柔軟で、機械学習に合いすぎる。なんだこいつは。
データを管理することが一番
Elasticsearchを通して、僕は「データの持ち方」に興味を持ち始めます。それまでにDockerを覚えていたのでMySQL, postgreSQLなどを触っていた私ですが、Elasticsearchはデータタンクとして強すぎるな。そしてsparkやKafkaと出逢うけどそれは別の話。
ER図ちゃんと書いてRDBの把握さえしとけば、NoSQLでデータ見た方が機械学習に合うし、欠損値の探求もしやすいな?????
はい、ここで世の中のデータベースの動向にやっと追いつきます。
SQLクエリが少し苦手だったのでPythonを活かしつつ、データを活かす方向へと僕は進んでいきます。
後ここでちゃんとしたデータベース設計を学びました。
データ管理の大切さ
RDBもNoSQLも検索システムも通ってきた僕。ここで思ったのは、データをどう変換したり、ストレージしたり、活かしたり、そういうことを考えることの方が有用だなと。抽象フェーズはもうGitHubに落ちているコードで足りるなと。
だから僕はデータマネジメントをすることになりました。
そして今の僕
世の中にはたくさんのデータが溢れてます。Web、アンケート、IoT。それぞれがたくさんのデータを生み出します。私たちはここからinsightを見つけなければなりません。そのためには、機械学習を抑えつつ、統計操作をしながら、適切な形でデータをストレージしなければならないと僕は考えています。
だから僕はデータをマネジメントする世界に生きています。