Fire Engine

消防士→ITエンジニア→研究者

消防士からエンジニアに転職して半年が経ちました

 こんにちは!私事ですが、エンジニアに転職して半年が経ちました!以前は消防士という全く違う世界で仕事をしており、プログラムの経験もほとんどないままエンジニアになりましたが、なんとか普通に仕事ができるようになってきました!
 今回は、私が転職して半年で学んだことや、これからできるようになりたいことなどを書いていきます。今後エンジニアへの転職を考えている人やプログラムを勉強中の方々の参考になればと思います。

転職の話はこちらに書きました↓  blog.tsurubee.tech

目次

今なにをやっているか

 2016年11月に経験ゼロからシステム開発会社に拾っていただきました。私が勤めている会社は主にECサイトの受託開発・保守等を行なっています。私は現在、ECサイトのレコメンドエンジンの開発・保守を行なっています。「これを買った人はこれも買っています」みたいなやつです。また、それに加えてここ数ヶ月は、ECサイトのデータ分析の仕事もしています。
 開発言語は、Pythonを使っており、データ分析の仕事ではSQLをゴリゴリ書いています。また、レコメンドエンジンをやらせてもらったことをきっかけに機械学習に興味を持ち、業務外で自分で学習モデルを組んで、画像認識や文書分類などもやっています。あとは、機械学習をやる上で理論まで理解しようとすると、かなり数学の力が必要だなって実感して、微分積分線形代数・最適化数学なども勉強中です!

経験ゼロから転職してどうだったか

 私がエンジニアになったときのスキルセットは、Rubyが少し書ける、Excelが少し使えるくらいでした。そんな中で、初日からいきなり案件にジョインさせて頂いて、わからないことの連続でした。Linuxサーバーをコマンドラインから操作してみると、「cd ディレクトリ名」で移動して・・むっ、戻れない。。 上の階層への戻り方を知らず、「cd /」でルートに戻ってました。笑
 そんなこんなで周りの方にも迷惑をかける日々でしたが、会社に入る前に独学で本を読みながら勉強しているのとは比較にならないスピードで成長できたと思います。やはり、実際に手を動かして慣れるのが一番だと実感しました。なので、私は、本当にエンジニアになりたいなら「まだスキル全然ないしなー」とか考える前に未経験でも拾ってもらえる会社を探して、実際に現場に飛び込むのが良いと思っています。

半年でできるようになったこと

 この半年でできるようになったことを挙げるとざっとこんな感じです。(それぞれできるといってもレベルは低いですが。。)

プログラム

 プログラムに関しては、現在仕事でPythonを使っていることもあり、Pythonがそこそこ書けるようになりました。むしろ今Python以外、書ける言語がないのでちょっとやばいかもって思ってます。笑
 言語もさることながら、その背後にあるオブジェクト指向についても勉強しました。クラスとかインスタンスとか最低限知識がないとオブジェクト指向型のプログラムを書くとき・読むときにかなり支障がでるので、そこはかなり重要と思います。

数学・統計学

 私は一応理系の大学を出ましたが、久しぶりに数式に触れるとすっかり忘れており、記憶から完全に葬り去られていることに気づきました。。なので数学は一通り勉強しなおしました。やったこととしては、主に微分積分線形代数あたりです。
 また、機械学習の勉強をしていると、「統計的機械学習」とか「ベイズ統計学」といったフレーズが出てきて、ベイズってなに??というレベルだったので一通り勉強しました。本気で統計学をやろうと思うと、かなり数学を使うので、統計学を学ぶには同時並行で数学を学ぶことになるでしょう。

機械学習

 機械学習については主要なアルゴリズムがだいたいわかる程度にはなりました。また、実際にTensorFlowやKerasなどのライブラリを使ってニューラルネットのモデルが組み、文書分類などを行ったりしました。現在、機械学習はライブラリが充実しているので、初学者が実際にモデルを組んでデータを扱うまでの壁はほとんど感じられないと思います。ただ、実際に自分が直面している課題を機械学習を導入することで、解決するところまでいくにはかなり壁があるなーと思いました。現在壁を乗り越えるため、理論をしっかり理解することが必要だと思うので、真剣に勉強中です。

データ分析

 おそらく、ここ半年で一番成長したと思えるのはSQLです。仕事でかなりSQLを書く機会があり、最初はSELECT文とかさえ知らなかった私が、今ではテーブルの結合や集計なども使いこなせるようになり、ときには数百行にまたがるSQL文を書いてデータの集計・分析をし、BIツールで可視化といったことをやっています。
 あと最近は、R言語も使い始めました!もともとPythonが多少書けるのでRは使う気はなかったのですが、データ分析系の本を買うと、サンプルコードがRというケースが多すぎるので、心が折れて使い始めました・・笑  

半年で読んでよかった本

 半年でいろんな本を読みましたが、この本はまじで読んでよかった!っていう本がいくつかありますので紹介したいと思います。

 もはや今更どうこういうレベルではないくらい多くの方に読まれているかと思いますが、ディープラーニング学ぶならまじで最高の1冊です。ただ、幅広い機械学習の分野の中で、良くも悪くもディープラーニングのみに特化した本です。Pythonでライブラリを使わず、ニューラルネットワークを実装するのでかなり力がつくと思います。

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

 上のオライリーの本ではディープラーニングしか取り扱ってないのと対照的に、この本ではディープラーニング以外の主要なアルゴリズムはだいたい押さえています。ざっと挙げると、最小二乗法、最尤推定法、パーセプトロン、ロジスティック回帰、k平均法、EMアルゴリズムベイズ推定、といった感じです。本書は機械学習の入り口的な本としての位置付けですが、本中のコラムにはけっこうガチな数学の議論をしてます。2章の最小二乗法でいきなり「ヘッセ行列」とか出てきたときは、「まじか!」と思いました。数学が不得意な方はコラム抜きで読んでも、主要アルゴリズムの概論的なものがだいたいわかるかと思います。

プログラミングのための線形代数

プログラミングのための線形代数

 数学系の本を読んで初めておもしろい!と感動を覚えました。本書では冒頭に「行列は写像だ!」と連呼しているのですが、正直最初はなにを言っているんだろう、行列ってあの数字が表みたいに並んだやつよね?って思っていました。しかし今では、行列が写像にしか見えません。笑 行列を見た瞬間、これは5次元から3次元への線形変換だな、とか、これは時計回りに90度回転しているなっとか、行列の見方が一気に変わりました。これ、機械学習ではめちゃくちゃ大事なことです!  同著者が「プログラミングのための確率統計」という本も出していて読みましたが、なんか説明が回りくどく私には合いませんでした。

これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

 数学の本でもう一冊読んでよかった本を挙げるなら、この本です。この本を読むことで機械学習の「学習」部分で使う最適化アルゴリズムへの理解が深まります。同著者の「これなら分かる応用数学教室」もかなりいい本でしたが、機械学習をやるなら最適化数学の方が直結するような気がします。

 ベイズってなに?って言う状態から、ベイズってこういうことね!って言う状態までに最短で行くには最適の本です。私はベイズ統計学という名前を聞いたことがない状態で、この本を読み始めましたが、ベイズの考え方はだいたいわかりました。ただ、この本を読んでも、ベイズをつかって何かしよう!というレベルにはいかないです。本当に導入部分を知るための1冊です。  

これからできるようになりたいこと

 これからできるようになりたいことを3つほど挙げましたが、今まさに本気で勉強中です。ここらへんをブログでアウトプットしていきたい・・

機械学習の理論を本気で理解する

 前述しましたが、機械学習をただ使えるのと、理論を理解して使いこなすとの差はすさまじく大きいと思います。機械学習の理論を学ぶのに最適な本は何かと調べているとだいたいこの本にぶち当たります。  

パターン認識と機械学習 上

パターン認識と機械学習 上

 かの有名なPRMLです。(プレモルとか呼ばれてるらしい)
 ただ、ぶっちゃいきなりやるのはかなり無謀だと感じました。なので、いろんな方のブログで、PRML挑戦の前段階で位置付けられている はじめてのパターン認識を勉強中です。
 今年中には、PRMLの方に手を出したい・・。

統計学を使いこなせるようになりたい

 最近、データ分析の仕事をしていると、統計学の大事さを痛感します。統計学を知らないと分析の結果を出しても、その根拠を示せないからです。また、統計学を学ぶ過程で、かなり数学が必要になるので、都度都度、数学も補いながらやると、一石二鳥かなって思ってます。ディープラーニングをやるだけなら、微分線形代数くらいでいけるけど、ここに確率的な議論が入ると、積分もガンガン使うので、理論が飛躍的になるように思います。逆に言うと、非常に習得が難しい統計学をしっかり理解している人材ってあまりいないし、かなり貴重だと思います。なので、このあたりを攻めると他と差別化できそうな気がしてます。
 あと、統計モデリングとかできるようになりたいなって漠然と思い、みどり本を読み始めました。

まだ3章までしか読んでないですが、めちゃくちゃおもしろいです!  

英語が壁にならないようにする

 学生時代には英語をかなりしゃべる環境に身を置いており、そこそこ自信はあったのですが、それから消防士になり5年くらい全くしゃべってなかったので、本当に話せなくなってました。今でも、読むのにはほとんど苦労しないし、聞くのもだいたい何言っているかわかりますが、話すのが全然ダメになっているので、そこをなんとかしたいです。もともと英語を話すために英語を勉強するっていうのは嫌いで、英語はあくまでもツールの一つなので、勉強しないスタンスを貫いてきたのですが、それが障壁になり、チャンスを逃すようになるともったいないので、勉強を始めてみようと思います。
 とは言ったもののなにから始めてよいものか・・悩み中です。