POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

Medium

本記事は、原著者の許諾のもとに翻訳・掲載しております。

ここ数年、私はWeb開発と機械学習の自習に多くの時間を割いてきました。

学習のテーマは、Javascript、Node、ReactからPython、scikit-learn、ニューラルネットワークに至るまで多岐にわたりましたが、全てに対して私は一貫したアプローチで取り組みました。

そのアプローチとは、単純な(陳腐と言ってもいい)3ステップで進める、という手法です。しかし、 Web開発のシロウトだった私が5カ月で、プロだと自覚できるほどになった のはひとえに、このアプローチで臨んだ自習の成果だと思っています。

そこで私は、この自習法がほかの誰かのお役に立てるかもしれないと思い、少し記事を書いてみることにしました。

この記事は、何も分からないままやみくもに挑戦を始めた、2012年当時の自分自身に教えるつもりで書いています。

ステップ1:習うより慣れろ

新しいテクノロジを学ぶためにまず実行する最初のステップは、理屈を学ぶよりとにかく使ってみることです。まず理論を頭に入れようというアプローチよりもはるかに優れています。

といっても、そのテーマについて何も知らない状態なのですから、自力ではどうしようもありません。

Justin MitchelによるDjangoのコースは、「習うより慣れろ」式のチュートリアルとして完璧です。

ここでやるべきことは、小さいダミーの何かを作る過程を一通り説明してくれる、チュートリアルビデオを見ることです。作者がセットアップのところから 1行ずつ 最後までコードを説明してくれるチュートリアルを探して、 自分も同じようにコーディングしながら ビデオを見てください。その練習用プロジェクトが、そもそもちゃんと動作するものであることを確認しながら、1行ずつ追いかけます。

ビデオの長さが10分だとすると、それを最後まで追いかけながら見るには1時間かかると考えてください。

なお、立派なMOOCのコースよりも、腕のいいシロウトがYouTubeに投稿しているビデオの方が、むしろ勉強しやすいかもしれません。MOOCはこの時点で見るには完璧すぎる場合があります。

このステップと対極にあるのは、そのテーマについての本を読んで理論を学ぶことでしょう。ただ、そのアプローチは私には向いていません。読み終える前に飽きてしまいます。初心者向けの本でさえも大抵、詳しすぎるのです。なので私の場合、本やドキュメントは、最初のうちは絶対見ないようにしています。

チュートリアルビデオを追いかけている途中で、自分が何をやっているのか分からなくなり、不愉快になることがあるかもしれません。でもそのことはあまり気にしないでください。理解できないことが出てきたら、とりあえずメモを取っておいて、ステップ2に入ってから見直しましょう。

このステップのまとめは、「混乱しようが、知識不足を痛感しようが、とにかくチュートリアルを最後まで一通り追いかける」です。

このアプローチの、短所をしのぐ長所を以下に示します。

1. 初日からいきなり何かを作る

初日から実際にモノを作るので、理論を読んで学ぶだけよりも、満足感が味わえます。満足感があると、学習を続けようという意欲が高まるものです。


私が最初に構築したNode.jsサーバです。数え切れないほど、後で何度も参照しました。

2. サンプルコードが手元に残る

さらに、ここで入力しながら学ぶことで、今後の学習プロセスで見直すことのできるサンプルコードが手元に残ります。これが、後のステップですごく役に立ちます。

私は、そのテーマに対する理解が深まったと実感するたびに、最初に入力したサンプルコードに何度も立ち返り、記憶を新たにしています。

3. 自分は何を分かっていないのかを把握できる

また、自分が勉強する際に、特に力を入れなければならない領域はどこなのかを見つけるには、この方法が一番手っ取り早いと私は気づきました。

学習を始める前は何が分からないかも分からない状態ですから、そのテクノロジのどの部分で自分はつまずきそうなのかを知る 方法すら分かりません 。だから特に注意が必要です。しかしそういう部分はなるべく早く把握したいものです。これが後で、解消しなければならない障壁となるからです。


私が様々なテーマを学び始める時に役立ったのは、以下のチュートリアルです。

ステップ2:難所に取り組む

ステップ1で挙げた教材を少なくとも1つやり終えれば、仕組みのイメージがざっとつかめて、そのテーマが少しだけ見えてくるようになるでしょう。しかし、きっと頭の中はごちゃごちゃしているはずです。そこで次に、その混乱を解消すべく資料に当たります。

React.jsを学んでいるなら、それはstateとpropsの違いが何かをきちんと調べるといったことでしょう(ちなみに、 こちら を読んでいただくと解決すると思います)。

このステップについて、実は具体的にお薦めできる形式はありません。基本的には、状況に応じて書籍、公式ドキュメント、Stack Overflowなど、どんなものでも調べる必要があります。

非常に難しいテーマである場合は、正確に理解できるよう、多くの資料に当たるべきでしょう。

あるいは、基礎が十分身に着いていないようであれば、一歩距離を置いて基本的スキルを磨くべきかもしれません。

前回私がこれを経験したのは、 ニューラルネットワークのコーディング方法を勉強 した時でした。Courseraのコースを受講して分かったのですが、ニューラルネットの全体を理解できるようになる前に、ロジスティック回帰を理解できる必要があったのです。そこで、基本に戻ってロジスティック回帰を一からやり直し、その後ニューラルネットに再び取り組んだところ、今度ははるかに容易に理解できました。

ステップ3:何かを作る

ステップ1と2は絶対に欠かせないものですが、実はこのステップへの足掛かりにすぎません。新しいテクノロジを学びたいというのは、その技術を使って何かを作れるようになるためですから、ここでいよいよ実行に移します。

自分で新しいモノを作れるようになったと感じたらすぐ、全力で取り掛かってみましょう。

なぜかって? 実際に作ると本当の意味で学べるからです。

テクノロジを学んでも、それで何かを作ってみなければ、実は何も学んだことにはなりません。

ステップ1や2をごまかすことはできても、このステップ3はごまかせません(コードを単にコピー&ペーストするのではなく、自分自身で書くのが前提)。

作るのは、自分が強く関心を持っていることに関連したものがいいでしょう。例えば、HTMLとCSSを学んでいてワインが大好きという人なら、ワインのテイスティングに関するWebサイトのプロトタイプを書いてみるのです。機械学習について学ぼうとしている医師であれば、健康関連のデータセットでいろいろ試してみてはどうでしょうか。

私の初期のプロジェクトでは、以下のようなものを作りました。どれも自慢できるわけではありませんが、大変勉強になりました。


私の最初のAjaxプロジェクトです。2014年の初めに Founders&Coders で、チームで構築しました。

最後にお伝えしておきたいのですが、以上の3ステップは時に絡み合っていて、この記事で見てきたように順々に通るだけとは限りません。

私は必ずステップ1から始めてステップ3で終えますが、学習の途中でステップ間を行き来することもよくあります。

要するに、この3つのステップはどれも、新しいスキルを学ぶのに同じくらい大事な要素だということです。

皆さんの成功を祈っています!

追記:この記事が気に入ったら、ハート形のマークをぜひ押してくださいね(訳注:ソース記事にこの機能があります)。