yutaroのブログ

技術や思想について発信

トップダウン的な勉強とボトムアップ的な勉強

初めての投稿として,自分の勉強に対する考え方を発信していきたいと思います.

人それぞれ考え方があると思うので,一つの意見として捉えていただければ幸いです.

 

結論としては,

ものづくりと読書や授業は満遍なくこなしましょう!

ということです.

では,一つずつ説明していきます.

 

トップダウン的な勉強

小難しい言葉を使っていますが,要するに開発やものづくりのことです.

この勉強法はおおよそ次のような過程で進めていくことが多いでしょう.

 

  1. 作りたいものを見つける.
  2. 作りたいものに必要そうな技術をググる
  3. 実際に必要な技術をググる
  4. 必要最低限の技術だけ身につけていく.

 

自分の作りたいもののために勉強していく方法です.

モチベーションが高く勉強ができるのが利点と言えるでしょう.

 

ボトムアップ的な勉強

こちらは学校の授業や読書などのことです.

この勉強法はおおよそ次のような過程で進めていくことが多いでしょう.

 

  1. 予習する.
  2. 人から教えてもらう.
  3. 復習する.
  4. 勉強した知識から派生した知識を学んでいく.

 

人からあらゆる知識を教えてもらう勉強方法です.

体系的に研ぎ澄まされた知識を勉強できるのが利点でしょう.

 

それぞれのデメリット

ここではそれぞれのデメリットについて説明していきます.

 

トップダウン的な勉強

モチベーションが高く続けられ,今流行っている勉強方法だと思います.

では,そのデメリットは何か?

 

1番のデメリットは,

見逃してしまう知識がある

これに尽きると思います.

 

今だとRuby on Railsを使ってWebサービスを作る方が多いでしょう.

フルスタックフレームワークで慣れてしまえば,色んなWebサービスが簡単に作れるのがメリットでしょう.

 

ただし,簡単に作れるのはフレームワークが色んなことを裏でしてくれているからです.

私が真っ先に思いついたのはセキュリティに関することです.

有名な攻撃方法にXSSがあります.

Railsなどのフレームワークは仕様でエスケープ処理をしてくれるでしょう.

 

では,規模が大きくなってきて,他の生の言語に切り替えたくなった時はどうでしょうか.

その時に自分でエスケープ処理を組み込めるでしょうか?

知らなければ無理でしょう.

調べる機会があれば良いですが,誰もがその機会に恵まれてるとは限りません.

 

そんなことはないだろうと思う方がいるかもしれませんが,それはあなたが恵まれた環境にいるということです.

知らなければ,何もできないのです.

 

ボトムアップ的な勉強

大抵の皆さんが大嫌いな勉強方法でしょう.

私も嫌いでした.

 

デメリットはいうまでもなく

モチベーションを保つのがしんどい

これでしょう.

 

モチベーションは人間が物事を続けるために最も大切なものです.

楽しさが人間の生きる理由でもあると私は考えています.

 

「できる」ということは人間にとって,とても楽しいことです.

しかし,ほとんどの人がどこかでつまづくでしょう.

「できない」がどんどん降り積もるとイヤになってくるのも当然です.

 

「できない」の中核にあるものはおそらく「繋がらない」ということだと考えています.

そして,こう考えるでしょう.

これ勉強してなんの意味があるの?

大抵の人は考えたことがあるでしょう.

 

私は理系なので数学に焦点を当てますが,数学はありとあらゆるところで使われています.

最も身近なものにスマホがあるでしょう.

スマホは最新技術の結晶です.

様々な技術で数学が使われています.

 

ですが,「繋がらない」と分からないです.

 

どちらの勉強方法がいいのか

では,どうすればいいのか?

どうやって勉強していけばいいのか?

 

どちらも満遍なくやっていきましょう

 

これら二つの勉強方法は互いに自身のデメリットを補填していることに気づいたでしょうか?

 

トップダウン的な勉強は

  • モチベーションを保つのが楽
  • 見逃す知識がある

 

ボトムアップ的な勉強は

  • モチベーションを保つのが難しい
  • 幅広い知識を体系的に学べる

 

トップダウン的な勉強では見逃す知識をボトムアップ的な勉強で補う.

ボトムアップ的な勉強での「繋がらない」をトップダウン的な勉強と紐づけることで「繋げる」.

 

これが私の考えるベストな勉強方法です.

 

経験談

ここからは私の経験に基づいて話していきます.

 

私は現在Unityを用いてゲーム作りをしています.

とりあえず,設計も何もせずに開発に取り掛かりました.

というよりも,設計自体したこともなく,必要性も感じませんでした.

 

作ってみよう!

ただそれだけで作り始めました.

 

最初は何も問題が起きませんでした.

Unityは誰でも簡単にゲームが作れるように設計されているので,当然なのかもしれません.

 

しかし,コードが大きくなるにつれて辛くなってきました.

どこでどの処理を書いたか分からなくなってきたのです.

 

更にどこかを書き換えたら,どこかに影響が出るのではとビクビクして,書き換えることに抵抗がありました.

 

その時,大学で少し習ったソフトウェアアーキテクチャについて思い出しました.

依存性がなんちゃらって言ってたなという感じです.

 

とりあえず,ソフトウェアアーキテクチャについて調べ,オブジェクト指向について調べ,デザインパターンについて調べ…

こんな感じに数珠繋ぎ状態で調べていきました.

 

そして,ゲームの設計について書かれている資料を見つけ,とりあえず少しだけでも組み込んでみようと頑張りました.

私が見つけたのはUniRxを用いた,MVP設計とstrategyパターンなどのデザインパターンでした.

 

取り入れてみると,一つのクラスのコード量が大幅に減り,可読性も上がりました.

依存関係も解消され,コードの書き換えにビクビクしなくなりました.

 

やったぜ

 

これができたのは私が大学で少しでも設計に関する知識を学んでいたからです.

これがボトムアップ的な勉強の強みです.

 

途中にも書きましたが,

知らなければ,何もできないのです.