Category Archives: 論評

別言語のWebプログラマーが突然Pythonで機械学習をやることになった時の心得

人工知能AI がブームになっています。エンジニアの間でもまた「機械学習」や「データ分析」方面の技術が注目されています。そして、言語としては Python が使われます。今、Pythonで機械学習をする仕事は増えてきています。

この時代の流れで、今後「データ分析」や「機械学習」を仕事とするWeb系出身のエンジニアは増えてくると思われます。Javaを使ってWebのプログラミングをしていたプログラマーが突然「Pythonでデータ分析をやってくれ!」「このCNNを使ったプログラムを解析してレポートを出してくれ」というように言われる日はもう訪れています。

実は、僕がそうでした。

僕は昨年12月に BeProud に入社するまでは、Javaの仕事を10年以上していました。昨年の9月まで Python を書いたことがなかったので、Python歴1年のひよっ子です。そんな僕が、なぜか入社以来、大小案件に関わらせてもらい、今では社内でも「機械学習系に詳しい人」のように見なされているようです。

このような事例は珍しいことではなくなるはずです。 次は、あなたかもしれません! そんなあなたのために、僕が一年間どのようにして、Pythonと機械学習と付き合ってきたのか、これから、Web系の人が機械学習の仕事に携わる時にどんな心構えをしていれば良いかを書こうと思います。

Javaやの僕はどのようにしてPythonを学習したか

「御社の募集要項を見ると Python という部分以外には一致しているように思います」

「弊社に入社する人の半数は業務での Python は未経験だから大丈夫です」

と、shacho に言われて、入社が決まったものの、そもそも「業務でのPython経験」がないどころか「1行もPythonを書いたことがない」に等しい僕が、初出社日までの2ヶ月間で 「Python のプロ」として出来上がっていないとまずいので、実は焦りました。そこで最初は本を読みました。

例えばこれとか

これとか

でも、読んでも書ける気になりません。「やばい!!」となったところで、なんと絶妙なタイミングでこれから入社する会社がこのサービスを出していました。


PyQ - 本気でプログラミングを学びたいあなたへ

そこからはひたすらPyQをやってなんとか入社までに基本的な文法はマスターしました!そのおかげで「受講生の声」の欄のトップに載ってしまいましたw

自社のサービスなので、宣伝臭いと言われそうですが、本当にPyQを使って覚えたスキルで実務で戦っているので、人に聞かれたらまず第一にオススメしています。これからPythonを学ぶ人はこの本を買うと3日間無料でPyQが使えるキャンペーンコードが付いているので、良いかもしれません。

エディタは Eclipse 時々 VSCode 時々 Atom , etc...

Javaは、Eclipse、NetBeans、IntelliJ IDEAのどれかを使用している人がほとんどですが、Pythonは様々なエディタを愛用している人がいるようです。Java出身の人は何を使えばいいでしょうか。

僕はEclipseを使っています。「PyDevなんて重いし使ってる人いないよ」と言われがちです。多分BP社内でもEclipseを愛用しているのは僕だけです。

EclipseがPythonの人たちに人気がないのは「重い」というのがあると思います。しかし、これは誤解で、みんなきっと「Java EE」版を使っているのではないかと思います。Java EE版EclipseはJavaプログラマーも敬遠したくなるほど重いのです。オススメなのが、PHP版のEclipseです。PHP版Eclipseは軽い上、しかもHTMLエディタなど、Web開発に必要なプラグインが最初から入っています。

とはいえ、僕はJava時代にEclipseに心酔してしまって、何度も寄付しているEclipseファンなので、普通に「Eclipseを使わされていた」くらいの人だったら、PyCharmは人気があるし良い選択肢だと思います。

その他には、VSCodeも人気があるようです。

Webやの僕はどのようにして機械学習を学んだか

機械学習の「き」の字も知らなかった中で、「データ分析系の案件に入ってもらうかもしれないから勉強してください。」みたいに言われ、入社前から社内勉強会に参加させてもらいました。その時読んだのがこの本

この本は何度も読み込んだのでバイブル的な存在ですが、pandas も Jupyter Notebook も何それ食えるのというレベルだと、ソースコードを「写経」することもままならないので、きつかったです。最初は、 Jupyter Notebookとpandasから入門することをオススメします。今、Jupyter Notebookとpandasを最初に入門するなら。。。やはりPyQがおすすめです。ww

PyQには、データ分析・pandasのコンテンツがあります。また、機械学習のコンテンツもあるので、まずはここで、「ロジスティック回帰」や「決定木」などの簡単な使い方を学んでから、専門的な本に進むことをオススメします!

いいなー。今から学ぶ人。

Webで経験した人が機械学習の世界で活躍するには

さて、ここからが本題です。

僕のような根っからのJavaやさんで、Webやさんが、「Pythonで機械学習」の仕事をやって足手まといではなかったのでしょうか?それが意外と活躍できてしまいました。

なぜかというと「機械学習」の現場で「エンジニア」の我々は、「データサイエンティスト」と呼ばれる人たちとは違う役割を期待されるからです。

主に、我々が作るのは「データパイプライン」という部分です。

パイプラインとは、細かいデータの操作を束ねた一連の処理セットのことです。機械学習で求める結果を得るためには、「機械学習アルゴリズム」だけを知っていても十分ではありません。データはSQLで取ってこなければいけないかもしれないし、結果はCSVを変形しなければならないかもしれません。

こういった、一連のデータの流れを設計できるのは、実は、業務フローや、データ設計をどっぷり経験してきた、エンタープライズシステムよろしくな、システム業界のエンジニアです!

入社して最初にやったことは、「機械学習に入力するデータ」をお客さんの「データベースからどのようなSQLで取ってくるか」という設計でした。「susumuisさんSQL得意なので助かります!」と隣の人に言われました。

「機械学習のアルゴリズム」の部分は、ライブラリもあるし「データサイエンティスト」の方が数式を提供してくれるので、基本的なアルゴリズムの名前と特性くらいを知っていれば何とかなります。

それよりも、どのデータを、いつ、どうやって取ってくるのか。あるいは、運用時に誰が、いつ、入れるのか、こういったワークフローや業務フローを設計するのはまさに「システムエンジニア」の得意技です。

どんなエンジニアになってはいけないか

勉強をやめてはいけません。

Webの世界でもいましたが、前時代にはエンジニアでも「今時の技術が全く分からなくて、前時代のノリで設計をして実装させようとする上司」がいたらうんざりです。

特に、機械学習の世界では、お客さんとデータサイエンティストのパイプ役にエンジニアが回りがちになります。その間に伝言ゲームの齟齬があると、連携プレーは崩壊します。データサイエンティストと、お客さん両方の言葉を理解し、それをシステムに落とし込むことができるエンジニア以外は居場所がありません。

これは一般論ですが、「伝言ゲーム」は多くなるほど失敗します。とりわけ「専門用語」が多い機械学習の分野で、伝言ゲームに失敗すると悲劇しか起こりません。そのため、エンジニアはフルスタック的であるべきで、設計から実装まで一貫して一人でできた方が良いでしょう。また、旧来型SIerの多重請負方式では、中間に多くの「専門家ではない人」が挟まるため、うまくいかないのではないかと思っています。

まとめ

以上のように、僕のように他言語、他分野から入って、機械学習界隈でも生きていくのに必要なことは次の4つです。

  1. データ設計能力とSQL
  2. お客さんと直接話せして設計から実装まで一貫してできるスキル
  3. Pythonのスキル
  4. 機械学習の基礎知識

いかがでしたでしょうか。普通の真面目なエンジニアは、1,2ができて当然なので、あとは 3,4 を学べば、もう明日から機械学習の現場に行っても問題ないはずです!

1,2 が未熟である場合は、Webエンジニアでも、業務システムエンジニアでも、いずれ限界が来ると思います。もし、大規模チームの「一担当」に落ち着いているなら、危機感を覚えた方が良いかもしれません。

3,4 は奇しくも PyQ で学べます! 自社のサービスなのでこれでは「ちょっとステマが過ぎるのではないか」と思われてしまうことだけが心配ですが、思っていることに間違いはないので、結論として締めくくらせていただきます。


エンジニアという職種がどれほど夫婦円満に役立ったか

この記事は妻・夫を愛してるITエンジニア Advent Calendar 2016の2日目です。1日目はbackpaper0さんの世界の中心で愛を叫んだうらがみです。

このアドベントカレンダーの提案者うらがみさんとは同年代のようです。同じJavaプログラマーで、愛妻家エンジニア同志ということで、2番手として記事を書かせていただきます。

僕は来年で結婚10年になります。妻は結婚当初からある病で闘病中の身ではありますが、おかげさまで、まだ無事夫婦を続けられています。

ここまで試練の連続ではありましたが、ここまでやれたのも、僕がエンジニアで良かったなーと思うことが多々あります。今日は、そんなエンジニアで良かったーと思うことを書いていこうと思います。

エンジニアで良かったなあと思ったこと

その1. いつでも、どこでも仕事ができる

ITエンジニアはPCと電源とネット環境さえあれば、大体の仕事ができます。

自宅作業などは比較的やりやすい職種だと思います。もっとも、妻は家に仕事を持ち込むことを嫌うので自宅での仕事はめったにしません。

どちらかと言えば、これが理由でフレックスに勤務できるというメリットを享受してきました。ある日具合が悪く看病のために休んでしまった時、遅れた仕事を土日にノマドワークで終わらせるなどということはよくやりました。

その2. 理解がある上司に巡り合うことが多い

比較的新しい職業なのでしがらみが少ないのか、それとも頭脳労働者であるために体育会系ではないからか、今まで巡り合った上司の方は、全てが家庭に配慮をしてくださって、柔軟に対応してくださいました。

その3. どうしようもなかったら転職することができる

どんな職場も状況が変わることがあります。それは仕方がないことです。そんな時、最後の手段として、転職をするという手段があります。エンジニアほど転職することに条件が良すぎる職種はないのではないでしょうか?エージェントなども充実していますが、IT勉強会などの人のつながりも捨てがたいです。

転職の度に、僕は家庭の状況を説明し、柔軟な勤務を認めていただいています。

夫婦円満のための時間管理のすすめ

ここまで書いたことに反して、僕はある時期、大変遅くまで連日残業。。。という生活をしていました。

それはたまたまその時、比較的家庭状況が落ち着いていたことと、プロジェクトが炎上状態にある中で、リーダーに任命されたこともあって、自分の判断で責任を全うしました。

しかし、それすら、もっとうまくできたのかなと今では反省しています。

その時は平気でしたが、やはり、そのような無理な働き方は体を壊しますし、夫婦仲も悪化させます。ただ早く帰ってればいいというだけではありませんが、だからと言って連日遅くまで働いて、パートナーを心配させてしまっては夫として失格です。

しかし、僕らエンジニアは、スケジューリングなどを生まれながらにして苦手としていた人種でもあります。そんなときはエンジニアらしく本で学びましょう!お勧めは何と言ってもこの本です。

ちなみにこの本はプログラマーというより、サーバー管理者を想定して書かれています。僕の主な職務はプログラミングですが大体においてスケジュールが狂う大きな原因は、「差し込み業務」にあって、プログラマー的な部分よりも「システムに詳しい人」という部分で発生します。なので、問題なく当てはまると思います。

パートナーの調子が悪い。こんな時に大事な仕事が!という人の生き方

働く男は悩みが多い。家庭で大問題!なのに仕事が!というとき、どうしたら良いでしょうか?例えば、世の中にはこんな人がいます。(本当はITエンジニアでこういう人を見つけたかったのですが、「管理職」って感じの方ですが。)

感動の家族愛の物語です。「自分は妻を・家族を愛してるぞ」と言う人は、読みましょう!奥さんが肝硬変にうつ病でお子さんは自閉症、奥さんと娘さんが自殺未遂を経験、そんな家庭問題をオープンにしつつ、そのビハインドを背負ってなお、家庭問題を解決しながら、仕事術を極め、社長になった方の物語です。

ちなみに、この著者の方はこんな本も書いています。

しかし、この人の本を読み返すと、僕はこんなに強烈に仕事と家庭に情熱を燃やすおっさんになれるでしょうか?自信はありません。こういうすごい人もいる。しかし、自分は自分です。

そんな僕にはこっちの方が合っているように思います。

まとめ

実は、今日付けで僕は転職し、新天地で働いています。それに際して、これらの本を読み返しました。(なぜかって?これらの本は僕が妻を守るためにどうしたら良いか、考えるために読んだからですよ!)そうしてみると、これらの本が教えてくれたことを、僕は忘れていたなと思いました。「あの時、もっとうまくできたのに」と反省して止みません。いや、人生とは常にそんなものなのかもしれません。

しかし、今からでも遅くないと思いますから、僕は今日から頑張ります!みなさんも、一緒に家族愛の探求をしませんか?

そして、いつか「エンジニアのワークライフバランスと家族の幸せハッカソン」みたいな企画をやりたいと思います。