「◯◯はやっておくべき/読んでおくべき」に意味はあるのか?

よく聞かれることの一つに、「◯◯って、やっておくべきですかね?」「◯◯は読んでおくべきですか?」という質問があります。学んだことがすぐに廃れてしまう技術の分野の話って、やっぱり気になりますよねー。そういうときに答えている内容について、ブログに書いておこうと思います。

話が長いので結論から

  • 広く浅く知るのはアイデアの実現可能性を知る意味で、とても有用。
  • 何でも深く知る必要はない。深く知る必要があるときに、真剣に向き合えば良い。
  • 逆にそういうときに真剣に向き合わないとちゃんとした経験にならないし、その技術が廃れたときに知識がゴミ化する。

前提:技術は廃れる

前提として、技術は廃れると考えています。廃れにくいものもあれば、廃れやすいものがあるのも確かですが、学んだことがそのまま使える度合いというのは時間が経つにつれて減ります。

軽く知っておくことと、深く知る必要のあること

「技術は廃れる」ということを前提にして、では何のために知識を得るのか?ということを考えるのが重要だと思います。

例えば広く浅く知るケース。何か新しいことをやろうとするときに、いろいろな手段を知っていると、知らない人よりは実現するためのアイデアは出やすいです。今時WebRTCを知らない人も少ないと思いますが、リアルタイムにコミュニケーションを取るツールなどを考えるときにWebRTCの存在を知っていれば、知らない人よりは早く実現できる可能性があります。

そして深く知る必要のあるケース。じゃあ早速WebRTCを採用しよう!と思ったときに、プロトタイプはちょっと調べたぐらいで作れるかも知れないけれども、本番で利用するためにはもう少し詳しく通信の仕組みを知る必要があります。例えばWebRTCではP2P技術を基本としているので、通信の参加人数が増える毎に通信経路の組み合わせ爆発(2人通信なら1経路だが、6人通信だと15経路とる)が起こり、ある経路の通信速度が遅い場合に、その通信速度に全体のパフォーマンスが引きずられる可能性があります。なので今後の展開で多人数通信をウリにしようと思ったときに、ずっとパフォーマンスの問題に悩まされる可能性があります。すぐにアーキテクチャをピボットできれば良いですが、そうもいかないときには困ることになります。

僕個人はこの広く浅く知る必要のあるケース、深く知る必要のあるケースを軸に知識の必要性を考えています。広く浅く知らないとそもそも可能性に気付くことができないし、深く知らないと適切に実現することができません。

しかし必ず何でも深く知る必要があるのかというと、そんなことはないと考えています。

利用シーンが見出だせない技術を深く知る必要はない(今のところは)

例えば別に今すぐリッチなWebアプリケーションをつくる予定がないときに、backbone.jsやAngularJSに取り掛かってみようと思っても、そんなにやる気にはなりませんよね。どうしてもツールとしてリアルタイム性が重要で、そういうUXを実現する仕組みが必要なんだ!となれば、話は別かも知れません。

そもそもそういった要素技術は、利用シーンが浮かばない状態で学習してもあんまり意味がないと思います。生産管理システム向けのデータモデル設計技術なんかも、利用シーンが浮かんでいれば学習する意味がありそうですが、そうでなければ別にスルーしていても実務に影響はないと思います。

技術は廃れるけれども、経験と結びついた技術は応用できる

利用シーンが見出せないものは別にスルーしても良いのではないか?と言う根拠として、本で学んで実際に実務に活かした経験のある知識は応用できるけど、本で学んだだけの知識ってすぐには活かせないなーという、何となくの経験があります。

技術自体は廃れると思うんですが、経験と結びついたものって、ずっと自分の中で生きていくと思うのです。例えばOracle Forms(PL/SQLでGUIアプリつくれるの)なんて、このブログを読んでいる人は人生でかすったこともないような要素技術だと思うし、既に廃れている(いや廃れろという感じの)技術だと思うのですが、そんな経験ですらGUIアプリという視点で見れば「そういえばこういうUIがこういう風に実現されていた」という観点で活かせることがあります。恐らくOracle Formsをやるときに「いや、こんな自体遅れなアーキテクチャでやらなきゃいけないなんて冗談でしょ」とテキトーに仕事をこなしていたら、その経験は全く活かせていなかっただろうなと思います。やる必要があるときに真剣に向き合うから、その技術が廃れても、その経験が活かせるのかなーと思います。

まとめ

  • 広く浅く知るのはアイデアの実現可能性を知る意味で、とても有用。
  • 何でも深く知る必要はない。深く知る必要があるときに、真剣に向き合えば良い。
  • 逆にそういうときに真剣に向き合わないとちゃんとした経験にならないし、その技術が廃れたときに知識がゴミ化する。

ある技術をやっておくべき、とは言えないけれども、技術を高めるために実現したいアイデアにチャレンジすべき、とは言える気がしました。