勉強法

僕が考えるベストな勉強法。

当たり前かもしれないが、それは目的を持つ事だ。

 

具体例として今僕はBitcoinを勉強している。

最初Mastering Bitcoinを読んでもチンプンカンプンであった。

だが、例えばウォレットを作ってみようと目的を立てる。すると「どのようにドランザクションが生成されるのか」「ドランザクションが送信された後、どこに行き着くのか」「どのように承認されるのか」などなど、と理解しようとするインセンティブが湧く。

それを理解した上でどのコマンドやコードを書くか考え始めるからだ。

 

先程のトランザクションの例で言うと、まずトランザクションにはBalanceという概念が無い。あるのはUTXO(Unspent Transaction Output) という概念だ。

これは初学者からは聞き慣れないが、つまりBitcoin上ではある人が持つ資産の合計はその人に送られたBitcoinの総量、つまりある人には送られたがその人自体がまだ使用していない”トランザクション”の総量であると定義している。だからUnspent Transaction Outputと定義されている。

 

これをソースコードで落とし込むと、ある人が持つUTXOの総量を参照する必要がある。

そのコマンドが以下の通りだ。

 

var Insight = require('bitcore-explorers').Insight;
var insight = new Insight();

var address = 'Bitcoinアドレス';

insight.getUnspentUtxos(address, function(err, utxos){
if (err){

} else {
console.log(utxos);

}

 

このようにして初めてその人がいくら保有しているかわかる。

 

そうしたらそれを送信するにはどのようにすれば良いのか考える。

 

このようにある目的をしっかり定義する。

そしてその目的に到達するプロセスを詳細に分解する。

そのプロセスを1段1段こなしていくだけだ。

だけだ、と表現したがそれが大変だという事は頭に入れておくべきだ。

 

この例を他に当てはめると例えばバイオの勉強をしたいとしよう。

そうすると目的を定義する必要がある。

例えば、微生物を作りたいとすると、「微生物を作るにはどうすれば良いのか」「微生物の要素は主に何から構成されているのか」「その要素とは何なのか」などなどと理解しようとするインセンティブが湧く。

 

ここで書きながら思った事は、勉強には実験ありきで行ったほうが良く、尚且つ出来たものを分解する事から初めた方が良い。

 

その方が単純に楽しいし、実際にあるモノとあるモノが混ざって新たなモノが生まれる瞬間に立ち会っている方が凄くワクワクする。

そしてそれを他にどのように応用すれば良いのか勝手に考えると思う。

その時に初めて勉強しようとするインセンティブが湧く。

 

やはり必要性に迫られた時程、集中力を発揮する時はない。

 

だから目的が非常に重要なのだと思う。

その目的ベースで考えるとアウトプット勉強法が役に立つ。

 

どんな些細なことでもブログに書いて発信する。

もしまとまった情報であればYoutube動画に公開する。

 

それでも収まらない場合は実際にプロトタイプや創作物を作ってみる。

 

このように些細な事からアウトプットを中心に考えていけば、どんなことでも意味があるように思えてくるのではないだろうか。

 

先程の例で言うと僕は今Bitcoinトランザクションの署名の実装に関して、グづいている。

しかし、たとえここで一旦Bitcoinの実装に関して辞めたとしても、ここに書いておくことで将来自分がまた始める時に、自分がどのような心境で辞めたのか理解出来るし、もしかしたら他の誰かも共感してくれるのかもしれない。

 

だから、自戒も込めてアウトプット中心の勉強を意識していきたい。

 

■まとめ

・勉強が捗る時は目的ありきな時

・目的を到達するまでをプロセス化して、それを1つ1つこなす事がブレない勉強にある

・ほかには実験中心、分解中心の勉強で応用しようとさせるインセンティブをわかせる勉強(これは書いていて目的中心の勉強法なのか自分でも怪しく思ってきた。。。。)

・どんな些細なことでもアウトプットしていく、アウトプット勉強スタイルを意識する