雑記です。
自分の経験から、技術の学習は次の3つに分類できると考えた。
- ハウツー系学習
- 基礎知識・仕組みの学習
- アウトプット系学習
それぞれにメリット・デメリットがあって、バランス良くやっていけるのが一番良いと思ったので、そのあたりについて整理してみた(すでに言い尽くされている感もあるが..)。
それぞれの学習の特徴・性質について
1. ハウツー系学習
- とは
- 主に「◯◯の使い方」系の学習
- 例
- Ruby On Railsの使い方
- RSpecの書き方
- 綺麗なコードの書き方
- 特徴・性質
- 実践・業務ですぐに活かせる
- 短期的なコスパが高い
2. 基礎知識・仕組みの学習
- とは
- ある技術の基礎知識、あるいはその仕組みについての学習
- 例
- アルゴリズムとデータ構造
- コンピュータシステムの仕組み
- Ruby On Railsの動く仕組み(コードリーディング)
- TCP/IP
- 特徴・性質
- すぐに何かに活きるということは少ない
- 往々にして低レイヤの領域になる気がする
- 長期的なコスパが大きい
3. アウトプット系学習
- とは
- ハウツーや持っている知識を何らかのカタチにする
- 「学習」という感じではないかも
- 例
- コードを書く
- RubyGems(ライブラリ)を作る
- Webアプリを開発する
- iPhoneアプリを開発する
- 特徴・性質
- ハウツー系学習と基礎知識学習を経た上で行うと効果が高い気がする
- むしろ、ハウツーまたは基礎知識が無いと厳しく、Google検索をしてコピペ、みたいなただの作業になる
- これをやることで知識やノウハウが身につく
バランスが必要?
- どのカテゴリの学習もバランスよくやるのが良いのだと思う
- ハウツーが無いと業務をこなせない
- ハウツーがあるだけで、目の前の仕事は片付く(かもしれない)
- 基礎・仕組みを知らないと詰まったときに途方に暮れる
- 基礎・仕組みを知っていると応用がきく
- アウトプットがないと、ハウツーや基礎知識が身にならない
- が、バランスをとるのってなかなか難しい
- ITエンジニアとして成長するために、あえて優先度をつけるのであれば3 >= 2 > 1の優先度で学習するのが良いのではないか
- 理由:アウトプットをしていると疑問に思うことやその内部を知りたくなってくる。そういう内発的な動機があれば、続く2や1の学習効率が向上するため。
- 理由2:目に見えるアウトプットはその人の市場価値を高める。
- ただしアウトプットをするために、ある程度のハウツー・基礎知識は必要
ハウツー系だけやっているのはリスクが高い
- ハウツーは、対象のツール、ライブラリ、手法の流行り廃りに影響を受けてしまう
- 「(コード読んでないので仕組みは全然知らないけど)Ruby On Rails使えます。」では、Ruby On Railsがもし衰退したら一気にその人の価値が下がってしまうかも..
- (半分イメージだけど)ITベンチャーのようなあまり時間的な余裕が無く、常に明確な成果を求められる環境では、ハウツー系の学習に終始してしまいなかなか基礎知識や仕組みの学習をする時間をとれない気がする
- ハウツーしかないと、延々とググる作業にハマることが多い。つらい。
その他雑感
- 基礎知識・仕組みの学習は、内容的に難しいことも多い上、学んだことがすぐに活かせないのでおろそかになりがち。だけれども、ここの学習は長い目で絶対活きてくると思う。
- 定期的に、基礎・仕組みの学習を大切にしろ、という記事がバズっている気がする。そういうことを気にしている人はきっと多いんだろう・・(自分も大抵見る)
- こんなこと考えている暇があるならなんかやれ