東京MOOCer

東京MOOCer

オンライン学習サイトで独学する人のブログ

Coursera・Udacityオススメの講座集〜AI・機械学習系〜

こちらの記事を読んで興味を持ってくださった方に向けて、私の印象に残る講座をピックアップしました。私はCourseraとUdacityを利用しているので、その2つからの選定になります。

本題の前に、私が最初に受けた「Android基礎講座」のイントロダクションビデオをご紹介します。「ソフトウェア・エンジニアになるにはスクールに通うしかないのか」と悩んでいたときに、「こんなに良い講座があるなら独学でもなんとかなるかもしれない」と思わせてくれた講座です。学校での勉強とは雰囲気も違っていて、とてもワクワクしたことを覚えています。

今回のご紹介にあたり久しぶりに視聴しましたが、「よくもまぁ英語の教材に手を出したもんだ」という印象で、当時一時停止しながら観て遅々として進まない様子を思い出しました。この動画に関しては日本語字幕があるので、英語が苦手な方も雰囲気を感じて頂けると嬉しいです。

www.youtube.com

 本格的に視聴しようとするとユーザー登録をしなくてはなりません。もちろん進捗管理ができるのでその方が望ましいでしょう。本記事では雰囲気を掴んで頂くため、Courseraは登録なしでアクセスできるページを、Udacityは旧版の動画を貼っておきました。なのでUdacityに関しては現在の講座内容とは多少異なりますので、ご了承ください。

目次

 

Coursera編

第1位:Machine Learning(機械学習)

機械学習に関して、世界で最も有名で支持されている講義と言って良いはずです。Courseraの創設者アンドリュー・ング先生による講義で、この講座なしに今の私のキャリアはありません。数学が好きな人は「数学は美しい」としばしば発言しますが、私もその気持ちが分かったような気がして、高校のときには役に立たないと思っていたのに。ゆったりと優しい語り口により非英語圏の学生でも学びやすいと思います。

古い講座であるためOctiveという言語を使うと思うのですが、この学習期間中だけOctiveを使ってもさほど負担にはならないと思います。ツールを学ぶのではなくアルゴリズムの理論を学ぶので、古くても問題ないと思っています。

coursera.org

 

第2位:Deep Learning Specialization(深層学習専門講座)

こちらもアンドリュー先生による講座で、機械学習の一分野である深層学習に特化した専門講座です。深層学習を解説する講座でひとつオススメをと言われたらこちらになります。

coursera.org

 

第3位:Mathematics for Machine Learning(機械学習のための数学専門講座)

インペリアルカレッジ・ロンドンによる講座で、英国イングリッシュによる講義です。私は数学ⅠAで止まっているので数学を随時補足しているのですが、こちらの講義は非常に良かった印象があります。数学の素養がなく強化していきたい方は是非一度ご覧いただければと思います。

coursera.org

 

番外編:Generative Adversarial Networks Specialization(敵対的生成ネットワーク専門講座)

深層学習の一分野に敵対的生成ネットワーク(GAN:ギャン)というものがあり、そちらの理論をひと通り学べる専門講座です。応用的な内容なので番外編に入れましたが、GANの全体像が掴めるような講座になっていて非常に良かったです。

coursera.org

 

Udacity編

第1位: Self Driving Car Engineer(自動運転エンジニア)

Udacityならやはりコチラが一番でしょう。Udacityの創始者であるセバスチャン・スランさん*1は自動運転の父と呼ばれ、Googleの自動運転チームを立ち上げたレジェンドですが、彼が直々に講義をしてくれます。講座は継続的にアップデートされているので、全てではありませんが、今も彼が指導する箇所が残されていて非常に味わい深いです。

現在は1講座として扱われているようですが、以前は前半と後半の2講座に分割されていたので、分量は他の講座の2倍に相当します。私にとっては得体の知れない自動運転の中身を素人ながらに想像できるようになった点で大変意義のある講座でした。何より他のどの講座よりも濃密でした。

www.youtube.com

 

第2位: Artificial Intelligence(人工知能)

Udacityの初めの講義はセバスチャンさんがスタンフォード大学で教授をしていた時に、同僚のピーター・ノーヴィグさんと無償公開した、「人工知能入門(Introduction to Artificial Intelligence)」です。おそらくですが、こちらの講座はそのときの動画が基礎になっていて、今も部分的に使われています。ピーターさんもまたレジェンド級に有名な方で、こちらも非常に味わい深い講義で、私は印象に残っています。データサイエンスよりはロボティクス寄りになってしまいますが、探索や計画のアルゴリズムの勉強ができて面白いです。

www.youtube.com

 

第3位:Become a C++ Developer(C++開発)

C++の講座です。処理速度が重要なシステムを作る場合にC++は役立ちます。こちらは開発者のビヤーネさんが登場します。講義自体は別な方がされますが、ビヤーネさんが間奏のように思想的な話をしてくれます。高級言語を使い慣れている人が、より低レベルなところに手を出したいという場合に最適だと思います。

私はメモリ管理や並列処理の中身を知らずにいましたが、C++における挙動を理解できたのは他の言語を扱ううえでも為になりました。

www.youtube.com

 

番外編:Learn Computer Science from Georgia Tech(ジョージア工科大学によるコンピュータ・サイエンス講義)

ジョージア工科大学とのコラボ講座で、無償公開されている講義群です。マニアックなページですぐには見つからないだろうということで紹介しました。なかなかレベルが高いのと、理論重視なので重たいですが、価値のある内容だと私は感じました。講師の方々がアメリカらしいジョークを交えながら説明してくださるので、非常に面白いです。

 

番外編(初学者向け):Introduction to Python Programming(Pythonプログラミング入門)

最後に、”機械学習やデータサイエンス領域に興味を持っているもののプログラミングは0からスタートする”という方に良さそうな講座です。機械学習・データサイエンス領域ではPythonという言語が一般的に使われているので*2、無償講座のこちらをピックアップしました。他にも良い講座があるかもしれないですが、手始めに見てみるのも良いかと思います。

www.youtube.com

 

おわりに

機械学習をこれから学ぼうという方へは、
①Courseraの第一位のMachine Learning
②Courseraの第二位のDeep Learning Specialization(深層学習専門講座)
この二つを順に取り組むことをお勧めします。

初学者だと英語の壁もあり、一度で頭に入れることはなかなか難しいと思いますし、深層学習専門講座の方は後半に進むに従い、難しく感じられるかも知れません。しかし分からないなりに一周することでも力は付くので、修了して1年後くらいにもう一度復習して固めるように取り組むと良いのではないでしょうか。

Udacityは応用レベルの講座を紹介してしまったので、色々勉強した先にいつかやって頂きたい講座という位置づけで捉えて頂ければと思います。非常に優しい基礎レベルの講座からあるので、番外編で紹介したような無償講座も使いながら徐々にステップアップしていくと良いでしょう。とはいえ第二位のArtificial Intelligience(人工知能)はCourseraの深層学習専門講座の修了後にやっても良いかも知れません。 

以上、私の印象に残っている講座をご紹介しました。学習時の知識水準によって価値の感じ方は変わってしまうので他に優れた講座があったかもしれませんし、何より受けたことがない講座の方が多いので、皆さんご自身でお気に入りの講座をぜひ見つけて頂けたらと思います。

*1:セバスチャンさんのTED

*2:データサイエンス領域だとRもありますが

オンライン学習教材MOOCsのご紹介

生涯学習の強い味方、大規模公開オンライン講座、通称MOOC(ムーク)をご紹介する記事です。既にネット上にもあるのですが、私の記事を見て下さった方に対して私自身の観点からご紹介するのが目的です。私はソフトウェア・エンジニアなのでそちら寄りの情報が多くなります。

目次

 

1.MOOC概要

世界中の大学や企業が様々な講義を開講する場です。学習機会を広く提供するという趣旨でアメリカの大学が先導し開設されました。2つが特に有名です。
スタンフォード大学発のCoursera(コーセラ)
・バーバード大学とマサチューセッツ工科大学発のedX(エデックス)

コンテンツは多岐にわたり、ソフトウェア・エンジニアリングや語学のように実践的なものから、音楽・美術鑑賞の講座、タイムリーなものではCOVID19に関する公衆衛生学の講座まであります。

上記で触れたいわゆるMOOCとは毛色の異なる教材にUdacity(ユダシティ)というものもあります。企業で働く社会人を主なターゲットにIT技術の学習するサイトで、実践に重きが置かれています。同じく学習機会を提供する場という意味で広くMOOCとして紹介したいと思います。

他にもいくつかありますので、気になる方は調べてみてください。

誰もが学べる場

MOOCの趣旨がどのようなものか雰囲気を掴んで頂こうと、Courseraのビジョンを意訳したのでご紹介します。

【Courseraのビジョン(意訳)】*1

私たちは学びこそ進歩の源だと信じます。

学びには世界を変える力があります。
病気を健康に、
貧困を繁栄に、
争いを平和に。

学びには生活を変える力があります。
私たち自身のために、
家族のために、
社会のために。

私たちが誰であろうと、どこに居ようと、
学びは我々を変え、我々を伸ばし、新たな可能性を示してくれます。
良質の学習機会を得ることは権利です。特権ではありません。

だからCourseraがあるのです。
素晴らしいパートナーとともに、
最良の学びを、
世界の隅々へ。

学びによって運命を変える力が、今やその手の中にあります。
誰であろうと、どこにいようと。

私はCourseraとUdacityでの学びによって新しい可能性を手にしたうちの一人だと思っているので、非常に共感します。誰もが学べる場がMOOCなのです。

 

2.CourseraとUdacityに共通する価値

優れた講師陣

世界トップクラスの人に直に教わると勉強が面白くなります。何事も先生は一流の人であればあるほど良いです。「自分はまだ始めたばかりだから初級クラスの先生に教わろう」と考えがちですが、そうではなく「一流の先生に初級レベルの教えから乞う」のが理想です。

大学が開講すると聞いて難しそうに思えるかも知れませんが、一流ほど難しいことを簡単にしてみせてくれます。

講義にもよりますが、世界的な第一人者(レジェンドクラス)が登場することがあります。学習者として非常に喜ばしいことです。そうでなくとも世界トップクラスの教授たちに学べることに変わりはありません。

優れたコース設計

【体系立てられた構成】

初学者は体系を持たないので何をどの順で学んでいけば良いのか判断が難しい場面があります。これに対してMOOCは、一連の講座を終えるとその分野に関して体系的な知識が得られる構成になっているので、未知の分野の学習をする場合でもこういった問題にぶつかりにくいです。ひとつひとつブロックを積み上げていくと、修了時には家が出来上がっているようなイメージで、独学者の負担軽減になります。

【理論と実践のパッケージ】
理論と実践がセットになっているのは非常に重要なポイントです。何事も実践なしに理論を深めることはできません。ソフトウェア開発系の講座ではプログラミング課題がセットで提供されていますし*2、それ以外の場合は簡単な理解度チェックのテストがあります。

 

3.Coursera

大学による講座が大半を占め、教育機関の色が濃いです。ソフトウェア系だとGoogle, IBMなどが講座を展開しています。

講座の種類

一番小さな学習単位が「コース」で、次の単位として複数コースを束ねた「専門講座」があります*3

はじめから専門講座にエントリーして、各コースにアクセスするのも良いですし、コースを一つずつ受けて結果として専門講座を修了することも可能です*4。もちろん気になるコースだけ受けることもできます。

上記2つに加えて、「修士課程の学位」が発行される過程もありますが、こちらについては受講していないので詳細な実態は存じ上げませんが、正真正銘の学位として扱われるようです。

費用

冒頭で紹介したように、いかなる人にも学習機会を提供するという目的で運営されているためか、価格は抑えめです*5

講座はサブスクリプション型で5600円/月程度です。この期間内に終わるかサブスクリプションを停止すればひと月で支払いが止まり、そうでなければひと月単位で延長という仕組みです。最近は年間コースも登場し、こちらは1年間どの講座も受け放題のプランです。

実は無料視聴することもでき、「聴講コース」を選択すると動画にはアクセスできます。ただし、課題(と修了証)は有償版のみです。聴講コースで様子を見て良さそうであれば有償に切り替えることが可能です。

聞いただけでは身になりづらいと思いますので、しっかり学びたいものはお金を払ってテストを受けたりソースコードを書くのがオススメです。あとは、持続的な運営のため、余裕のある場合はお金を払って頂けると良いと思います。

 

4.Udacity

Udacityは自動運転、データサイエンス、Web開発…と主にソフトウェア開発者向けのサイトで、企業が必要とする人材の育成に重点を置いている点が特徴です。

彼らのミッションは、ざっくり「未来のキャリアを作る」ことに主眼が置かれており、忙しい社会人でも学び続けられるような場を提供しています。なのでCourseraよりも実践の比重が大きいですし、キャリアサポートや修了者の人材紹介のサービスもあります。

Udacityはプロジェクトベースで進みます。理論を学んだら、プロジェクトが用意されています。Courseraも理論→プロジェクトの流れは同様ですが、課題はUdacityの方が重たい印象です。

個人の意見ですが、Udacityの応用レベルの講座におけるプログラミング課題は企業で直面する課題と非常に近く設計されていると感じます。学んだ内容をそのまま適用するとベースラインができるイメージです。ここから先は論文などを参考に積み上げる力が求められますが、講座で学んだことが経験値として役に立ったという感覚があります。非常に価値あることだと思います。

講座の種類(と費用)

有償の講座と無償の講座があり、有償の講座を終えるとNano Degree(ナノ・ディグリー)と名付けられたUdacity独自規格の修了証・学位が付与されます。無償講座は古くなった有償講座が降りてくるという仕組みになっていると思われます。アルゴリズム寄りの講座は内容が古くならないので、無償講座でも十分楽しめるものがあります。

Nano Degreeはプログラミング課題があり、キャリアサポートの特典がセットでついてきます。一方無償講座は基本的に動画視聴のみです。時々スカラシップと題して、有償講座もどきを無償で受ける機会があります(有償講座の一部を受けるイメージ)。応募して当選した場合に参加できるのですが、当選者は何段階かに分けてふるいにかけられます。通過すると有償講座をフルで受けられるという仕組みです*6

Nano DegreeはCourseraと比べて高額です*7。時々半額セールや30%OFFセールをしているので受講を急がない方はタイミングを合わせるとオトクです。

講師

大学教授、Udacityお抱えの講師、提携企業の方々が講師を務めます。大学教授だと自動運転の父セバスチャン・スランさんやAI系で有名なピーター・ノーヴィグさんなどのレジェンドが、その他、C++の開発者であるビヤーネさん、機械学習界隈だとGoodfellow本で有名なグッドフェローさんなども登場します。提携企業ではGoogleメルセデスベンツなど様々です。どの講師も明るくポジティブな雰囲気を心掛けて説明してくれるので、動機づけが高まり元気に勉強できる印象です。

キャリアサポート

最近始まったサービスです。Nano Degreeを購入すると、キャリアサポートが付帯します。

【キャリアコーチ】
いわゆる相談をしてアドバイスをしてくれるサービスで、どういうキャリアを目指しているか、現状とのギャップは何か、などを明らかにして、やるべきことをアドバイスしてくれます。

【添削サポート】
GitHubやLinkedInでの自己紹介の書き方などの添削が受けられます。確かレジュメの添削もあったように思いますが、それはキャリアコーチのサービスかも知れません。

日本の転職活動では英文レジュメを求める会社がないこともあり、アメリカ仕様の準備という感じもなくなないです。しかし、やっていることは非常に合理的で勉強になると思います。

 

おわりに

少し前にはアクセスできなかったであろう情報が手に入る時代に生まれて幸運だったと思わずにはいられません。Courseraのビジョンで謳われていることが全てで、学びは生活・世界を変える大きな力を持っていると私も思います。

私のオススメ講座をまとめたページがありますので、良かったらご覧ください(機械学習人工知能分野がメインです)。

 

*1:Courseraのビジョン

*2:Google ChromeFireFoxなどのWebブラウザで完結するため、環境構築の必要はありません。PCかスマートフォンでインターネットに接続できさえすれば良く、他に購入するものはありません。プログラミング課題をする場合は、スマートフォンだとキーボードで殆ど隠れてしまって非効率ですから、PCが良いでしょう。

*3:例えば「りんごコース」「みかんコース」「ももコース」「米コース」「お肉コース」という5つのコースと、「フルーツ専門講座」という1つの専門講座があるとします。「フルーツ専門講座」はりんご・みかん・ももの3コースがセットになっているというイメージです。

*4: ※2の例を引き継ぐと、①はじめから「フルーツ専門講座」でエントリーして、りんご・みかん・ももの3コースを順に終えて専門講座修了証の発行を受けてもいいし、②とりあえず「りんごコース」にエントリーして修了し、次に「みかんコース」、そして結局「ももコース」も修了したとしても専門講座修了証は発行されます。①・②で学ぶ内容に差異はありません。現在はサブスクリプション型になっているので、専門講座としてやる予定の人は①のパターンでやった方が余分な支払いが無くて良いのではと思います。

*5:今でも安価に学ぶことができますが、以前はもっと無償提供感がありました。持続的に運営していくために最近は有償の範囲が明確になってきましたが、それでも手の届きやすい価格で高品質な講座を提供してくれています。

*6:完全に余談です。私も1度スカラシップを受けたのですが、学習以外の活動に時間を取られて本末転倒に思えました。Slackでの発信を推奨されており、その参加具合も段階をパスできるかの審査に入ります。チームミーティングをしなさいという活動もあり、上野のハードロックカフェで集合することになっていました。その日参加する予定だったのは全て海外勢です。当時神奈川方面に住んでいたのではるばる電車で行ったものの、オフラインになった瞬間に誰一人来なかったのは驚きました。ひとりは昨日ハングオーバーしたので来れず、また別な人はやっと連絡がついたと思ったら今足を怪我してしまったとの弁解を受け、責めるわけにもいかず、ここは動物園だなと思って帰ったことがありました。Slackでは相変わらずガンガン活躍されていて、海外勢の貪欲さは笑うしかなかったです。

*7:ある時ぐんぐん値上がりし、少し下がって今に落ち着いた印象です。私の見立てでは、ここから大きく上振れることはないのではと思っていますが、Udacityは私企業なので変動する可能性が十分あります。責任は負いませんので悪しからず。

体育大卒の社会人がデータサイエンティストに転向するまでの3年

まえがき

データサイエンティストの職を得るまでの道のりを事例共有を目的に記事化しました*1

想定する読者

主に「社会人で異職種からデータサイエンティスト・機械学習エンジニアへの転向を考えている方」に向けて書きました。「ソフトウェア・エンジニアへの転向を考えている方」も念頭に置きましたので、一部参考にして頂けると思っています。もちろんどなたにも読んで頂けると嬉しいです。

自己紹介

体育大学の出身で新卒では営業をしていました。転職先でキャリアの行き詰りを感じたことがきっかけでプログラミングを独学し、開発者に転向、現在は念願叶ってデータサイエンティストとして働いています。独学を始めてから3年、29歳の時点で正規職を得ました。

はじめはソフトウェア・エンジニア(Androidアプリ開発者)を目指していたのですが、独学をしているうちに機械学習エンジニアになりたいと思うようになり、最終的にデータサイエンティストの肩書で働いているという経緯です。

意義

私が独学をしていた頃、先人の方が残された記事の恩恵を受けました。それまでの人生で開発者とほとんど接点が無かったため、唯一Webだけが貴重な情報源でした。似た境遇の方がいるのではないかと想像しています。

私がキャリアを転向できたのは、Webの世界が充実していたからに他なりません。この世界に私自身が経験して学んだ情報を足して、次の方へのバトンにしたいと思いました。

社会人の途中からソフトウェア開発者やデータサイエンティストに転向した方の先行事例は既に記事として公開されています。これらにはデータサイエンティストやソフトウェア開発者になるための手段・ルートが書かれていますが、ここにバリエーションを追加しようというのが私の記事の狙いです。

私の経験のユニークな点は、スクールに通わずにオンライン講座で独学したことと、経験を積む手段として派遣を選んだということです。実際に同じルートで職を得た方はいらっしゃると思うのですが、記事では見たことがなかったので、なるほどこういう例もあるんだなと参考にして頂ければ幸いです。

 

目次

序章(ポエム)

プログラミングに興味を持ったとき最初に思ったのは「自分にできるのかな?」でした。やってみると事前に想像していたほど特殊な能力は必要なく、論理立てて文章を書く能力があれば十分ではないかと私には思われます*2

よって、せっかく興味を持たれた方は一定期間やってみるのをお勧めします。分からない時期は面白くないでしょうが、これはプログラミングが面白くないのではなくて、分からないから面白くないだけかもしれません。私自身、心のどこかでちょっと違うかもしれないなぁとの思いがあったのに、いつの間にか楽しいと思うようになっていました。

ところで私が挫折することなくやってこれたのは良い教材と出会えたからだと思います。「エンジニアに興味があるけど自分にできるのかな?」とモヤモヤした思いを抱えていたときに出会い、「これなら独学できそうだ!」と思えたことで、本格的にエンジニアに転向する肚が決まったのでした。教材は4章で紹介しますが、解説の分かり易さとモチベーションの上がるような明るい雰囲気に引き込まれて以来、愛用し続けています。

読者の方々の参考になるように努めて書きますが、いかんせん私の歩みがそれなりに思い切ったものでしたので、再現性があるかどうか微妙なところではあります。具体的に書きつつ抽象的な持論を散りばめて書いていくので、何かしら参考にできるものがあると良いなと思っています。

1.戦略

20代後半でキャリアを転向するにあたり、30歳までに何とか軌道に乗りたいという気持ちがありました。早期に技術を習得すべく、核になる方針を定めていました。

戦略という割には普通のことですが、2つの方針がセットになって技術獲得戦略として機能します*3

方針1:体系的な教材を着実に進める

体系を持たない初学者が抱える問題に「どこから手を付けたらよいか分からない」とか「目標に到達するまでの見通しが立てられない」というのがあると思います。誰か理解している人にナビゲートしてもらうのが良いですが、独学者はそうはいきません。

私はUdacityとCourseraという教材(4章で紹介します)を活用していましたが、これらの教材はコース設計が優れていて、コースを修了する頃には学習テーマについて体系的な理解が得られる作りになっているのです。つまり教材がナビ役をしてくれるので、とにかく目の前の講座を理解して進めていけばよい状態でした。

目の前の講座または書籍を進めることだけを考えるというのは、独学をするひとつのコツだと思います。焦燥感や不安感は独学の敵なので、周囲や遠くを見過ぎないのは大事なことです。気づいたら進んでいたという状況が望ましいと私は思います。

方針2:学習時間を確保する

ひとつ目に挙げた「体系的な教材を着実に進める」戦略とセットにすることで意味があります。方針1により目の前の講座を進めるだけで体系ができるわけですから、あとは講座に取り掛かる学習時間を作ることさえできれば、自動的に体系が得られる筈というシンプルな考えです。

【求職準備段階】
時間確保のためにやったのは「実家に帰る」です。わざわざ実家に帰ったのは家賃の支出抑制のためです*4。私が実家で独学したのは5ヶ月でしたが、当初はどれくらい勉強に時間がかかるか想定できなかったので、このような選択をしました。(Udacityの講座をひと通り受けて、自作アプリを作り、ストアに公開するまで5ヶ月です。)

【就業段階】
独学後に経験を積む場として派遣をしていました(5章で触れます)。仕事を再開してから時間確保のためにやったのは以下です。
①プログラミングの仕事に就く
②電車通勤・昼休みも勉強
③出勤前・帰宅後も勉強
④土日も勉強

当たり前のことしか書いていませんが、①と②は補足します。

①については、面接段階で自分の仕事を握るということです。エンジニアの仕事だと思っていたのに実際は事務仕事だったというようなことがあると一日8時間ずつ棒に振ってしまいますので*5、選ぶ実力はないと自覚しつつも「仕事時間=プログラミング時間」になるような仕事を選ばせてもらいました。

②については、外出先でも講座を進められるように環境を整えました。デスクトップPCを使っていたのでノートPCを追加購入したのと、ポケットWiFiを契約しました。この時点で勉強が習慣化しており、投資したけどやらなかったということにはならないと分かっていましたし、何より時間を作るためです。

戦略=方針1+方針2

総合すると「学習時間を確保してUdacityやCourseraに全投資する」が私の戦略でした。(あまり詳しくないですが)戦争戦略では兵站の充実といって、資源確保や輸送の重要性が論じられます。私にとって学習時間こそが”資源”であり、講座を集中して進めることは”確保した時間資源を技術に変えて前線に輸送すること”でした。先立つものは資源です。

2.教材

教材は、方針1「体系的な教材を着実に進める」に関連します。

私はUdacity(ユダシティ)とCoursera(コーセラ)という学習サイトを使用してきました。これらは大規模公開オンライン講座(MOOC:ムーク)と呼ばれていて、どのような人に対しても広く学習機会を提供しようという意図をもって開設されたものです。大学講義相当のものを動画で学べるサイトというイメージで良いと思います。

これらの媒体は既に有名ですし調べれば説明記事も出てきますが、ほぼ毎日UdacityとCourseraにお世話になっている私の観点で海外MOOCを別記事で紹介してみました。良ければご覧ください。

海外MOOCで学んだ理由

実際のところ非効率な学びでした。はじめの頃は、字幕を読まなくては内容を追えず、字幕が切り替わる度に一時停止する有り様でした*6。おかげで3分の動画に数十分かかってしまうし、やっと見終えたと思っても勘違いしているし、何よりすぐに疲労してしまうし、プログラミングも課題の意図が理解できないから進められないといった問題にしばしば直面していました。翌朝フレッシュな頭でもう一度考えるか、解説を観直すかによって解消できましたが、日本語で学べば起こり得ない無駄な問題を引き起こしては格闘していたわけです。

それでもなぜ私が海外MOOCを使ったのかというと、講師・内容ともクオリティが高かったからでした。日本で体験したE-learning講座とは全く別物で先進的で洗練された香りもしました。講師として世界的な第一人者・開発者本人が登場することがあるのですが、彼らから直接教わるのは非常に喜ばしいものです。野球だとイチロークラスの世界的レジェンドです。総じて言えば「講義を素直に吸収していけば、自分もプロフェッショナルなエンジニアになれるかも知れない!」と期待できたのがMOOCにこだわった理由です*7

副次的な狙いとして、「せっかくなら英語もできるようになろう!」と考えていました。英語が使えれば就業先を国外にも広げられます。プログラミング力向上だけを考えれば非効率極まりないのですが、広く長期的な可能性を考えるとリターンがありそうな気がしたのです。英語ができるようになることそのものが報酬だったこともあり、苦しみつつも楽しくやっていました。

繰り返しになりますが、UdacityやCourseraは、修了すると「学習テーマに関する体系が獲得できる」講座設計になっているので、方針1「体系的な教材を着実に進める」に適う教材というのも理由のひとつです。

教材の考察

【動画は初学者の味方】
一般的な独学の手段として書籍がありますが、初学者ほど動画視聴の方が学習しやすいのではないかと思っています。書籍は文字を具体的なイメージに起こす作業を自分でしなくてはなりませんが、自力でイメージに起こす作業は知識のベースを必要とするため難易度が高いと感じています。動画はその点をサポートしてくれるので、負担が軽く理解も早まります。

とはいえ書籍も深い理解には欠かせませんので、私は動画→書籍の順で活用するのが効率的だと考えています。

【英語は世界を広げる】
私はエンジニアとして頑張る気概のある方は領域を問わず英語習得を勧めたいです。

英語から情報を取れると作業の質が高まると思います。英語記事は全世界のエンジニアによって淘汰された情報なので、人気記事は高クオリティです。そういったものは情報の正確性や網羅性が高いので、それを参考に作業したときにエラーが出にくい気がしています。エンジニアになりたての頃は英語を読むのが億劫で日本語だけで作業しようとしていましたが、英語が読めていたら違ったのかもしれないと今になって思います。

ソースコードは結局英語なので、英語の語感はあるに越したことはないと思います。コードの挙動を簡潔に言い表せるようになるため、クリーンなコードが書けると思います。複数のプロジェクトを行き来するとき、コードが長くて汚いと自分で書いたのに何をやっていたのか分からなくなります。コードは綺麗に書けて損しません。

英語ができた方が就業機会が広がります。派遣社員をしていたとき、英語が必須の会社さんにお世話になりましたが、開発者としての土台はそこで作って頂きました。そこで就業したことがまた次の機会を運んできてくれた気がしていて、英語で勉強していなかったらチャンスを掴めず今の私はなかっただろうと思います。幸運なことでした。

個人的な将来の希望として、大学院に興味があります。ひとつのハードルは論文を英語で書くことだと思いますが、ライティングに対する心の障壁はなくなりました。海外大学院も現実に考えられるようになったのは大きなことです。まだそのレベルにはないものの、3年前には到底あり得ない世界だったわけで、MOOCの賜物です。

ちなみに、データサイエンティスト・機械学習エンジニアとして働く場合、私には英語が必須のように思われます。英語が必須要件になっている企業がほとんどではないかと思いますし、皆さん当たり前に英語力を備えているので、できていた方が良いと思います。

私は当初ここまで想定しておらず、たまたま海外MOOCを気に入ったことで恩恵に与ることができました。英語がネックでデータサイエンティストになれなかったとしたら、非常に落ち込んだと思いますから、本当に幸運でした。上記メリットを享受したい方は、時間が余分にかかるとしても果敢に海外MOOCで勉強されることをお勧めします。

※海外MOOCを利用する際に前提となる英語レベルは「すごく時間が掛かるとしても単語を調べれば文章の意味が分かる」かなと私は思います。仮にそれ以下だとしてもチャレンジは無料ですから、一時停止を押しながら見てみましょう。数ヶ月の単位で英語力が上がっていくのが実感できると思います。頑張ってください*8

3.派遣

方針2「学習時間を確保する」に関連します。

派遣は賛否あると思いますが、私の実力ではそれ以外選びようがなかったというのがそもそもの理由です*9。はじめは生活していけるのか心配でしたが、実際に派遣求人をみてそれは杞憂だと分かりました。東京圏のソフトウェア開発案件の時給は高いです。お給料をもらいながらスキルアップが望めるだけでありがたいという状況でしたので、派遣を始め計3社お世話になりました。

A社さん:AndroidiOSアプリ開発Java/Kotlin/Swift)
B社さん:構文解析器の開発(C#, MySQL
C社さん:組み込みシステムの処理高速化(C++

一貫性が無いように見えますが、A社で仕事をしながらプライベートで独学したことをアピールしてB社でお世話になり、C社も同様にしてお仕事をさせて頂いたという経緯です*10

派遣のトリセツ

私は派遣で働く目的を以下のように定めていました。
①仕事を通してスキルを獲得する
②自己理解を深めること(どんな職場環境を好ましく感じるか、何を避けるべきか知る)

①は言わずもがな、私が行きたいと思う会社があったとき相手からも来て欲しいと思ってもらえるだけの実力を備えるためであり、戦略の章で書いた、プログラミングの仕事に就くことで「時間を確保する」ためでもあります。

②は、本格的に職探しをする前に、多様な業務・職場を経験して自己理解を深めておきたいと考えていたことによります。会社選びの条件はいくつか挙げられますが(好きな仕事ができる、給与が良い、オフィスが綺麗etc..)、例えば好きな仕事さえできれば給与が悪くても良いのかと言えばそうではないだろうと想像できます。しかしどの程度のバランスだったら不満を抱えずに仕事ができるのかについては理解が曖昧で、手を打っておくべきと思われました。私は既に短期での転職を複数回してしまっていたので、「就職・転職してみたら違った」という感覚を最小にしたかったのです。

実際、①・②どちらの面でも良い経験を積ませて頂くことができ、現職を選ぶ際に役立てられました。広く業務を経験させて頂いたうえで「やはり機械学習をやりたい」という判断になりましたし、会社選びの条件では「仕事内容が希望に一致すること」と「安心して勉強し続けられる会社」という自分にとって大切な基準を明確にして判断できました。

以上のように、派遣も活用次第ではあると思います。私にとってメリットだった派遣の特徴を整理しますと、以下3つです。

①契約時に業務内容が確定する
②時給が高い
③短期契約

①について、開発業務で仕事を受けたら「仕事時間=プログラミングの時間」が確定します。私は営業経験があったためセールスエンジニアの提案をよく受けましたが、契約時にそういう可能性を排除してプログラミング仕事が確約されるのはメリットでした。

特に駆け出しエンジニアは不合理な目に遭いやすい立場かと思います。本来、合理的な人たちばかりで変なことにはなりにくい世界なのですが、スキルや業務経験が積み上がってその世界に行くまでは深い溝、別なメカニズムで動く世界が横たわっているように感じました。派遣を使うことである程度そこを迂回できたのかなと思っています。

②について、時給が高いと時間を稼ぐような効果が得られます。例えば、月の支出が20万円の人を考えます。収入が20万円の場合は毎月働かなくてはなりませんが、40万円の場合は半年休んでも生活が成り立ちますので、これも「時間の確保」です。高額なUdacityの学費を恐れず支払えたことも重要でした。

③については上述の通りで、多様な経験を得やすい仕組みです。また正社員だと半年休むことはできませんが、派遣社員だと次の契約を結ばなければ休みになるので長期休暇を作れます。②のメリットと絡めて、仕事と仕事の合間にまとまった独学期間を確保できるのは非常にメリットでした。

まとめますと、「時間を確保する」という戦略を①~③を活用して徹底し、ひたすらUdacityとCourseraに時間を突っ込んで、その成果物を素材に面接を受けてお仕事を頂くというサイクルで生きていました。

盲点

ちなみに、データサイエンス案件が派遣に出回るのは稀です*11。募集がかかっても他の求職者と競合して負ける可能性があります。そういった場合、ドンピシャでないにせよ近しい案件に応募して経験を積んでいくのもひとつの手です。案件を終えたとき、もう少し近い案件で仕事が貰える可能性が高まっているはずです。

私自身、業務未経験時にはほとんど見向きもされなかったのに、A社さんの仕事を終えたとき、驚くほど仕事の選択肢が増えました*12。業務経験があるというのは思っている以上に効果があります。運はコントロールできないですが、正しく前に進んでいれば運が巡ってくる可能性は高まると私は信じています。(ソフトウェア開発案件は数がありますので、その辺の制約は受けにくいと思われます。あまり心配はいらないでしょう。)

 

終章(ポエム)

ローマは一日にして成らず

どんなものにも根を張る時期があると思います。時期の長短はあれ根を張らないものは無いように思います。地中での営みですから目には見えません。「今日は1cm伸ばしたぞ」という実感を糧に黙々と張り巡らしていくだけの日々です。

重要である一方、私には自己肯定するのが難しい大変な期間でもありました。新しいことを始める時期は希望と実力の乖離が大きく、思い通りに物事が進みません。例えば、希望の仕事に応募したいけど力不足のため断られるというようなことです。多少大袈裟ながら、周囲に望まれない状態と言えるかも知れません。無所属であることもそれなりにプレッシャーで、自分の存在価値が簡単に揺らいでしまいます。「何者でもないし何者にもなれない自分」の無力さを感じて気分が落ち込んでしまうこともありました。

しかし全体としては「きっと大丈夫、自分は間違っていないはずだ。」と信じられていたと思います。やせ我慢ではなくいずれ全てがポジティブな結果に変換されると信じていました*13

いずれにしても「今日は1cm伸ばしたぞ」の日々を抜きにした成功など無いと思います。気分が落ち込んでしまったときは、ぜひ大きく飛躍するための今だと奮い立たせて、動画を1つみて教科書を1ページ読んで、「よし1cm伸びた」と大いに自分を褒めて頑張って欲しいです。きっと勢いがついてくると思います。1週間前・1ヶ月前に何をやっていたか振り返ってみたとき、思っている以上の進捗が感じられ、自信が得られるでしょう。

「自分にもできる」と信じる

感覚的な話になります。

冒頭で述べたように私は体育大卒なのですが、「現実にプロスポーツ選手になれると信じて生活する人」が身近にいたのは貴重な財産になりました。プロになる人は別世界の人だと思っていたのに、(失礼ながら)すごく普通の人たちだったのです*14

そうは言ってもトップクラスたる所以があって、なかでも「自分の可能性を信じる」マインドが決定的な違いなのではと私は感じました。実際のところは分かりませんが、”現実に”プロを見据えると、行動がそれに集約されてくるのではないかと思うのです。彼らが大学以前から継続してそのマインドで生活していたと想像したら、自分は何をやっていたのだと、蓋をして生きていたことを反省しました。それは例えば「東大なんて入れるわけないじゃん」のような思考です。「(現在の実力から考えて)東大なんて入れるわけないじゃん」と一見合理的に判断しているわけですが、人生尻すぼみです。

はじめて機械学習の講座を受けたとき、数式が出てきてこれは無理かもしれないと思いました。数学ⅠAすらまともにできなかったのに、社会人になって急に数式を見せられたら怯みます。そんなとき「できるわけない」という気持ちを横にどけて「他の人ができるなら自分にもできるはず」と考えて取り組んだからこそ今があります*15

「他の人にできるなら自分にもできるはず」と信じて行動することで、少しずつ確実に世界は広がっていくと実感しています。今できないからと言って未来を諦める必要はないのです。

向き不向きの話

「○○な人はエンジニアに向いていない」という話は巷に溢れています。私は、そういうものを気にする必要はないと思います。実際のところ性向に起因する向き不向きはあるでしょうが一言で定義するのは難しく、せっかく興味があるのに”向いていない談義”によって気を削がれるのは勿体ないと思うからです。「できるようになったけど全然面白くないや」と感じたら向いていないのでしょう。

ちょうど執筆中に見かけた「エラーログ読まない人は向いていない」という例をお借りして私の意見を書いてみます。おそらくこちらの方は、「エラーログを読んでください」という趣旨で発言されたのだと思いますが、向き不向きについて持論を述べる例としてお借りします。

これからエンジニアになろうとする人にとって、技術的障壁だけでなく、たくさんの心理的な障壁が待ち受けています。例えば、あの白黒の文字だけが並ぶ画面もそのひとつではないでしょうか。すごく難しそうな顔をしていますし、何か実行してエラーになると真っ赤な文字がダーッ!と画面に出力されます。「まずいことしちゃったかな…PC壊れないよね…?」と私もアタフタしたものです。真っ赤な文字こそがエラーログで、これを読むとソースコードのどこを直したらいいかヒントが得られるのですが、はじめは抵抗感を持つのが普通ではないかと思います。私がそうでした。

この成長段階において「エラーログ読まない人は向いていない」という意見を目にするのは酷だと思うのです。

エラーログを読むようになる条件があると思います。
・白黒画面にソースコードを書く体験(応答を知って怖くないと知る)
・エラーログの情報がエラー解消に役立つ体験
・自分でエラー出力を組み込む体験(実はそういう仕組みだったのかと知る)

つまり、有益なものだと理解するイベントであり、恐怖心を和らげるイベントです。ゲームのようですが、こういった条件がクリアされると自然にエラーログを見に行くと思います。加えて、英語へのアレルギーがないことも条件になりそうですが、いずれにしても経験で改善される問題なのです。

上記は一例ですが、成長段階によって行動は変わるので、目の前のやるべきことに集中する方が遥かに有意義です。「向いている向いていない談義」を必要以上に気に掛けず、自分の可能性を信じましょう。

謝辞

激動の3年間、もうやっていけないかもしれないと無力感に襲われたとき、周囲の皆さんが救ってくれたおかげで今があります。

派遣先で出会った皆様、ありがとうございました。技術不足でかなり肩身の狭い思いをしていましたが、話し掛けて下さったりご飯や飲みに行ってくれたのは本当に有難いことでした。特に技術指導に時間を割いてくださったFさん、退職後なのに転職レジュメの添削をしてくださったTさん、リファレンスをしてくださったCさん、感謝しています。

友人の皆さん、ありがとうございました。些細な食事の機会でも変わらぬお付き合いをしてくれたことが大きな支えでした。特に、ソフトウェア・エンジニアに興味を持った時から相談させて頂いていた同じ大学のKさん、頻繁に交流してくれ職探しが難航しているときに知り合いまで紹介してくれたMさんありがとうございました。身近で応援してくれていた人が他にもいます。ありがとう。

最後に、キャリアチェンジしようか悩んでいるときから今に至るまでいつも相談に乗ってくれたEくん、君が「いいんじゃない?」と言ってくれたから一歩踏み出せました。改めて感謝しています。記事のチェックもありがとう!

おわりに

それなりに長くなりました。最後までお読みくださりありがとうございます。一貫して「きっとできる」とのメッセージを込めて書きました。私が周囲の人に助けられたように、この記事が誰かの役に立つことを期待しています。

 

 

オススメMOOC講座集

記事をお読みくださった方に向けて、オススメの講座集をこちらのページにまとめました。興味のある方は是非ご覧ください。

 

 

脚注

*1:肩書はデータサイエンティストですが、データサイエンティストに特化した学習・経験をしてきたかと言われるとドンピシャではなかったと思っています。職務内容・スキルセットとも機械学習エンジニアと言った方が実態に近いです。といったことを考慮しつつ参考にして頂ければと思います。公式なスキルの定義は以下が参考になります。
- スキルチェックリスト/タスクリスト概説
- スキルチェックリスト

*2:例えばソフトウェア・エンジニアは数学も得意そうだと思われる節がありますが(私もそう思っていました)、数学的素養は全てのエンジニアに求められるわけではありません。データサイエンティストや機械学習エンジニアは必要です。その他はあまり詳しくないのですが、VR/ARエンジニアは必要そうだなと思うのと、ゲーム系エンジニアも必要と聞いたことがあります。適当なことを言っているかも知れないので、気になる方は調べてみてください。

*3:求職戦略もあったのですが今回は書いていません。派遣の章で一部書いています。

*4:税金や毎月の国保の支払いで「嗚呼人間生きているだけでこんなにもお金が飛んでいくのか」と天を仰ぎました。収入があればぼやけて見えなかったものが、ただただ貯金が減っていく状態になるとインパクトが浮き彫りになります。

*5:この記事を執筆中にもスクールを経て入社した会社で営業させられたという話がTwitterで流れていました。

*6:私は謙遜なしに英語が苦手でした。中学時点で半ばついていけなくなり、高校で完全に置いていかれました(センター試験:98/200点)。98点すら鉛筆を転がすようにして取ったもので本当の点数はそれ以下というのが私の実感です。ただし大事なところなので具体的に補足しますが、独学はテストと違って制限時間がありませんし、単語を調べることができるため、基礎文法さえあればやりようがあるというカラクリです。ここでいう基礎文法とは中学文法で特に5文型の理解を指しています。受験時に中学文法から学び直したおかげで「文を構造に区切る」ことはできましたから、単語を調べながら字幕を読んでいくことができました。亀のようにですが…。

*7:スクールに通わなかったのはそんなに美味しい話はないだろうという疑念によります。タイムリーなことにこの記事を執筆している今も高い金を払った割に成果を得られなかったという失意のツイートが流れてきました。そういった話を耳にしていたのと、スマホ講座なるものが開講されていたのを見たとき心からスクールの類はやめとこうと思いました。

*8:英語字幕を読むとき、単語を調べても分からないなら、文を適切に区切れていない可能性が高いです。中学文法の教科書で5文型とそれに準ずる内容を勉強してみるのを経験上オススメします。

*9:独学期間中に作成した自作アプリを手に就活しましたが、未経験者が簡単なアプリを作ったというだけで正規職に採用されるのは難しいことを体感しました。派遣前に一社正規採用されていますが、派遣に落ち着いたところからお察し頂ければと思います。

*10:B社はAIサービスを開発するチームで、A社でJavaの経験があったのでC#への移行がスムーズなのではと前向きに捉えてくださったことと、その時点でCourseraの機械学習・深層学習をひと通り学び終えて、Udacityで自動運転の学習を始めていた点を評価してくださったのかなと思っています。C社はUdacityの自動運転講座が終盤に差し掛かっているタイミングで、自動運転の案件で応募しました。結果的に別な案件になってしまったのですが、B社での経験と併せてやる気の部分を評価してくださったのかなと思っています。どちらも私の想像です。

*11:私が派遣をしていたときは、時期によって3~5件程度それらしい案件がありました。機械学習エンジニアとしてバリバリやれそうな案件が1件あって、その他はその周辺業務というような件数構成のイメージです。もちろん0件のときもありましたが、1,2ヶ月の間に何かしら出てくる印象です。データサイエンス案件はそれより少なめな印象でした。

*12:A社さんではJavaAndroidアプリを開発する業務だったのですが、そこから派生して「Javaを使ったWeb開発案件」というようにキーワードに紐づく可能性が広がるイメージです。

*13:観葉植物の鉢替えをして以降、枝あたりの葉の数が増えたのは興味深いことでした。それ以前は木が上に伸びて葉をつけた分だけ古い下の葉が落ちてしまっていたのですが、鉢のサイズが大きくなり根を広くたくさん張れるようになった結果、古い葉を残しながら新しい葉をつけられるようになったのでした。葉が豊かに茂るのを見て「人間も同じだな。自分も根を張っている大切な時期なんだ。」と勇気づけられました。

*14:競技をさせたらもちろん普通じゃないです。ただし「同じ人間なんだ」という発見はその後の私に非常に大きな影響を与えたと思います。

*15:動機づけが高くても正しく実行できなければ成果には繋がりませんが、MOOCの講座が正しく実行する手助けをしてくれたので、「自分にもできる」と信じることが重要でした。