圧倒亭グランパのブログ

30年後の自分にもわかるように書くブログ

「技術」は「課題」とセットで学ぶ

当たり前のことかもしれませんが、ふと忘れがちになってしまうので自戒も込めて記します。

 

TL;DR

  • 技術の仕組みだけを勉強するのではなく、その技術が解決しようとしている「課題」も意識すると身につきやすい

 

身についた技術と身につかない技術がある

ふと思い返してみると、気づいたことがありました。日頃勉強をしているのに、身についた技術と身につかない技術があるのです。

今回は、「これはなぜだろう?」と疑問に思ったのが発端です。単純に勉強時間と相関があるわけではなさそうです。

 

身についた技術に対して何をしたか

どんなことをしたらその技術が身についたのかを、ざっくり振り返ってみます。

  • 身についた
    • 自作ライブラリを作った
    • 業務で使用した
  • 身につかない
    • 書籍をパラパラと読んだ
    • 仕組みだけを勉強した
    • 惰性で勉強会に参加した

身についた技術には何か共通項があるのでしょうか。

 

共通項は?

軽く共通項を考えてみると「実際に手を動かしたもの」が身についていそうです。よく「うだうだ言ってねーでコード書け!」と耳にしますが、それは間違いではなさそうです。しかし自分の場合、「手を動かした技術は本当に身についているんだっけ?」と疑問に思いました。手を動かせば100%身についているか、と問われると、首を縦には振れません。

ということは、もっと他に「身につく要因」があるはずです。

 

「身につく」を紐解く

ゴールから辿ってみます。「技術が身につく」とはどういうことでしょうか。

自分の考える定義は、「その技術を使って課題を解決できる」ということです。ある課題があり、それに立ち向かい、適切な技術を選択し、その課題を解決する、ということです。さらに言い換えると「課題に適した技術を選択できる」ということです。その技術が身についていないと、適切な選択はできません。

 

「技術と課題の結びつき」を知る

適切な技術を選択するには、どの技術がどの課題を解決するのか、という「技術と課題の結びつき」を知る必要があります。この知識が間違っていると、適切な選択はできません。技術の勉強は、この「結びつき」を知ることだと思います。

単に「仕組みを理解すること」ではないのです。仕組みを知っていても、使い所がわからないと価値は生み出せません。

TDDのやり方を知っていても、TDDがどのような課題を解決するのかを知らないと、不適切な場面でも適用してしまいます。dockerはどんな課題を解決しようとしていますか?reactはどんな課題を解決する技術なのでしょうか。これらの知識を増やすことこそが、エンジニアの勉強だと思います。

 

まとめ

もう一度「身についた技術に対して何をしたか」を考えてみると、「その技術を使って課題を解決した」と言えます。課題を解決した経験から、技術と課題の結びつきが頭にインプットされたのです。自分の技術で解決できる課題が増えた瞬間です。

そもそも技術とは、何らかの課題を解決するために生まれてくるものです。それを忘れて「技術学ぶぜー」と意気込むだけで、何を解決しようとしているのかを考えないのは危険です。ただチュートリアルをこなして仕組みを理解するだけでは、自分の技術力はどこで発揮できるのかがわかりません。価値を生み出すことは難しいでしょう。

今後は、ある技術を学ぶ時は、

  • その技術は「どのような課題」を解決するのか
    • 課題の具体例を挙げてみる
  • その課題を「どうやって」解決するのか
    • 実際にその課題を解決してみる

という2点を重視して勉強していこうと思います。