RxJSを例とした独学の10ステップ

MMM Corporation
mmmuser

エンジニアは常に学習していく職種ということで、自分で学習の計画をたてられることは重要だと考える。今回は、Soft Skillsという本で、独学の方法について触れていたので、それを少し整理してみようと思う。

学習の10ステップ

あげられていた10のステップは以下だった。

  1. Get the big picture
  2. Determine scope
  3. Define success
  4. Find resources
  5. Create a learning plan
  6. Filter resources
  7. Learn enough to get started
  8. Play around
  9. Learn enough to do something useful
  10. Teach

詳しい例や説明は本を読むのが1番良いと思うので割愛するが、ここでは、これらをRxJSの学習を例に取り、試しにプロセスを作成してみる。

Get the big picture

ここでは、何がわからないかわからないままやみくもに学習をすすめることは、効率が悪いということを述べていた。例えば、いきなりRxJSの書籍を読み始めたりしても、自分はいま全体のどの地点にいるのか?どの程度理解度が進んでいるのだろうか?がわからず、やみくもに学習しているのと同じになってしまう(あくまで、書籍を読むこと自体は否定しておらず、全体像をつかむことをまずはじめに行うべき、ということを言っていた)。

ここで全体像を示すなら、以下のようなものになると自分は考えた。

* Reactive Extensionsとは?
* Streamとは?
* RxJSとは?
* Observableとは?
* Subjectとは?
* Operatorsとは?
* RxJSにおける実装例はどんなものがある?
* RxJSのAPIにはどんなものがある?何をしてくれる?
* 設計にはどんな手法がある?
* RxJSを使用したフレームワークは?
* テストはどのように書く?

Determine scope

「物理学」を学習しようと思っても無理がある。ここでは、すべて学びたい欲求を抑えてscopeを決めろ、ということを言っている。今回は例なので、以下のようにscopeを定義してみた。

* RxJSが何をするものなのか
* Observable/Subjectなど、基本的なオブジェクトについて
* Operatorを使用したRxJSによるStreamの操作

Define success

学習のゴールを決めろとのことで、今回のゴールを決めてみる。本記事では、以下のように定義した。

RxJSの簡単なコード例を読んで理解することができる。

具体的には、
Observableを作成し、Operatorを使用して操作された、
数十行程度のコードを理解/実装することができる。

Find resources

ここでは、学習のためのリソースを片っ端から調べ上げる。

Awesome

Web

書籍

Create a learning plan

定義したscopeを元に、learning planを考える。今回はscopeもscopeだが、学ぶ内容もいってしまえばライブラリなので、ざっくりと以下のような感じでも問題ないかと考えた。

* RxJSが何をするものなのか
* Observable/Subjectなど、基本的なオブジェクトについて
* Operatorを使用したRxJSによるStreamの操作

( ˘⊖˘) 。o(scopeと同じになってしまったがこれでいいのだろうか...)とも思ったが、scope自体そんなにたいそれたトピックではないので、今回はこれでよしとして、次に進もうと思う。

Filter resources

与えられたscopeやゴールを考え、集めたリソースの中でどれが重要かをフィルターしておく。今回は以下のようになった。

目的に合わせて、書籍は割愛した。ただし、Reactive Programming with RxJSの1-2章あたりは順を追って説明がされているので、使い方を考えると良いリソースだと考える。それでいうと、awesome-rxjsなども用法用量も守ってみてゆきたい。

Learn enough to get started

ここまで、調査がメインだったが、やはり最終的には何か作ってみることが重要だと言っている。ただし、いきなり作り始めてもそれはそれで良くなく、作り始められるだけの最小限のインプットをしてからが効率がいいと述べている。

ここでいうと、公式のIntroduction、Tutorialレベルのものが理解できれば、簡単なサンプルを書き始めることはできるのかなと考える。すべてのリソースをみたい欲求を抑えて、最小限で我慢するのが良いらしい。自分は、記事や書籍、GitHubを読んだりして、まずベストプラクティスを探してしまうことが多いので、このやり方も参考になった。

Play around

このステップでは、実際にコードを書いて遊んでみる。何かプロダクトをつくるとかを決めなくても良く、ただ好きなようにコードを書いたり修正したりしてテストしてみるのが重要だと言っている。

今回のscopeでいうと、RxMarblesをみながらAPIを試してみたり、Creation OperatorsをみながらいろんなStreamをつくって遊んでみたり...だろうか。簡単なアプリを作りながら遊ぶのも、流れを理解できていいかもしれない。

個人的には、GitHubでソースを読むのが遊びという意味では好きで、angular2-rxjs-chatとかreact-rxjs-todomvccyclejs/examplesをみて遊んでいた。このステップに当てはめるとするならば、サンプルのコードを変更しながら動作を見て遊ぶ感じになるだろうか。

Learn enough to do something useful

Play aroundのステップで、学びや疑問が出てくるはずで、それをひとつひとつ消化してゆくのがこのステップである。このステップになり初めて、Filter resourcesで調査したリソースを本格的に見てゆくことになる。ただし、その際も、すべてを見てゆく必要はなく、Play aroundででてきた疑問や問題を解決する手立てとして活用するのが良いらしい。ベストプラクティスを調査したりするのはこのステップでやるべきことなのかなと思った。また、Create a learning planで決めた学習のプロセスを達成できているかを見て、理解を深めてゆく。

Teach

最後のステップでは、人に教えることがあげられている。教える方法の一覧として、が以下がリストされていた。

* Write a blog post.
* Create a YouTube video or tutorial.
* Give a presentation.
* Have a conversation with a friend or your spouse.
* Answer questions in an online forum.

YouTube videoはハードル高いだろ...と思ってしまうのだが、顔出しをせず、スクリーンを映しながらの講座ならできなくもないのだろうか。個人的には、1番手っ取り早いのはブログやQiitaで知見を共有することかと思った。また、社内に環境があるのなら、勉強会など開いてもいいかもしれないし、イベントで登壇するなどもよさそう。

まとめ

ここまで学習のプロセスをまとめてみたが、個人的な見解に基づくものなので、ご了承いただきたい。あくまでこの記事でやってみたかったのは、学習のプロセスを自分で作ってゆくということだった。具体的には、以下の10ステップを通して、どんな技術でも自分で学習できる状態をつくることができるのでは?ということだ。

  1. Get the big picture
  2. Determine scope
  3. Define success
  4. Find resources
  5. Create a learning plan
  6. Filter resources
  7. Learn enough to get started
  8. Play around
  9. Learn enough to do something useful
  10. Teach

自分の普段の学習プロセスとは異なる部分があったので、参考にしたい。ちょっといろいろ理解が甘いところはあるかもしれないので、その時はご指摘頂けるとありがたいですm(. .)m

参考

  • Most developers crack open a book and start reading through it with- out even knowing what they don’t know. They leave these “unknown unknowns” for later discovery.
  • You can’t learn everything about digital photography in any reasonable amount of time, so you’ll have to decide what areas to focus on and what the scope should be.
  • You can only learn one thing at a time. You can always come back later and learn about other subtopics that branch off of your original topic, but for now, pick one narrowly focused thing and go with it.
  • Scope your topic down to the appropriate size that fits your overall reason for learning and fits into the timeframe that’s available to you.
  • Now that you have some resources, you can use those resources to get an idea of what you should learn and in what order you should learn it.
  • But now it’s time to whittle those resources down to the handful of most valuable ones that will help you achieve your goal.
  • It’s easy to get carried away and start consuming all the resources you have on the module you’re trying to learn, but you’ll find the most success if you can avoid that temptation.
  • Most people will attempt to learn a subject by reading a book or watching a video about that subject. They’ll try to absorb as much information upfront and then take action later. The problem with this approach is that when they’re reading about their subject, they have no idea what is important.
  • You might go through your resources and look up everything pertaining to light or any other ques- tions that came up while you were playing around.
  • Remember, though, you still don’t have to completely consume every single resource you gathered.
AUTHOR
デロイト トーマツ ウェブサービス株式会社(DWS)
デロイト トーマツ ウェブサービス株式会社(DWS)
デロイト トーマツ ウェブサービス株式会社はアマゾン ウェブ サービス(AWS)に 専門性や実績を認定された公式パートナーです。
記事URLをコピーしました