プライベートを犠牲にして勉強することの可否についてのブログエントリーが話題になっています。JavaScriptは3ヶ月おきぐらいに新しいフレームワークやツールがでてきてワイワイ盛り上がっています。「勉強しなきゃ」「新しい物に最近触れてない、やばい><」みたいに追い立てられてしまう気持ちもよく分かります。
もう5年ぐらい前になりますが、つまみぐい勉強法という本を@nomicoxさんと一緒に書いて技術評論社から出版しました。当初から「すぐに陳腐化するような話は書かない」という企画で書いたおかげか、ジュンク堂の長田さんに今月聞いた所によると、ジュンク堂の池袋店では細く長く売れ続けていて、そろそろ出版社の在庫も無くなりそう、とのことでした。ありがたいことです。5年経っても、定期的に本に書いているようなことが話題に上がるので、本を書いたのはムダじゃなかったし、改訂も必要はなさそうです。
書き始める前のミーティングで話が出たのがまさに「勉強会ブームにおける勉強会疲れ」の話です。当時は「勉強会いいよ」ということを紹介する本も一冊もなく(その後直前に一冊出ましたが、勉強会に出れば本を買わなくてもいいよというアレゲな本でした)、勉強会について紹介することになったのですが、当時から問題になっていたのが勉強会疲れでした。勉強会に出れば出るほど、逆に勉強できてない人が多いのでは?ということです。そんなことも考えて書いた本です。
家庭とのバランスについても触れています。僕のコミュニティデビューは大学時代で、XPユーザグループとかでは経験は出せない代わりに、時間を出して貢献しようと走り回っていました。また本の出版当時は働いていましたが独身でした。ずっと不思議だったのは、アジャイル系のコミュニティを引っ張っている人たちは結構家庭持ちが多く、子供も3人以上で多かったりしつつも家族を大事にするようなお父さんたちだったので、「僕よりも可処分時間が少ないのにどうやってコミュニティに対して時間を捻出したり、勉強したり、本や雑誌を書いているんだろう?」というのが疑問だったので、多くの家庭を持つ人にアンケートを取ったりして一章まるごとその話題について説明しています。
元のブログは「IT(というよりウェブ系?)」「勉強」という文脈だったんですが、もっと広い文脈で考えていこうと思います。
仕事外の時間を使う活動
仕事外で時間を使う活動というのは別に勉強に限ったものではありません。先ほどの導入部でも書かれた活動もありますし、それ以外にもいろいろあります。
- 新しい物を勉強(自宅やカフェで自習)
- 資格の勉強
- 勉強会参加
- コミュニティ活動(勉強会の運営、勉強会で教える、資料作り、飲み会)
- 書籍や雑誌の執筆
- オープンソースのライブラリやアプリの開発・コミット
- オープンじゃないアプリの開発やインディーズのゲームの開発
- 業界の動向調査(ゲーム業界の人がゲームをやる。自動車業界の人がディーラーに新車を見に行ったり試乗に行く)
- (学校の先生の)部活やサークル活動の顧問
- 異業種の人と交流(飲み会、業務と違うドメインの勉強会参加など)
- コミケの薄い本
- 労働組合
ニュースでたまに問題になるのが、学校の先生のサークル活動ですよね。オフの時間までほぼ仕事と同じように強制される。これらは大雑把にまとめてみました。まあ考えられるすべての活動を網羅させることは大事ではないので置いときます。これらに共通することは、どれも時間を消費することです。もちろん自動車業界の人の動向調査のうち、本気度の高いモノは仕事でやると思います。他社の車を買ってきて分解してリバースエンジニアリングというのはどこもやっています。しかし、ゲームを他社のゲームの調査は本気でやろうとすると週40時間じゃ済みません。ヘタすると何もアウトプットしなくても業務時間が終わってしまいます。かといって、「調査担当以外の人は一切触れるな」というのも無いですよね?
ゲーム業界で働く人はゲームを愛する人でなければならない、自動車業界で働く人は自動車を愛する人でなければならない、そうでなければケシカランみたいなことを言われたりもします。愛する人というのは大抵オフの時間でもそれに好き好んで携わる人という意味が多いです。同じ業界内の勉強の圧力(内圧)とは違って、外圧としてもあるし、やっぱり自動車業界でもレース活動している人はヒーローだったりするので、勉強の話と類似なものを感じます。僕は自動車業界にいたときも、レースカーよりも大量生産された量産車がいかにコスト削減しているのかを見るのが好きだったので序列の中では下の方ですね、きっと。
勉強するゴールは?
上記のリストは、あえてバラバラの並びにしていますが、実はいくつかにカテゴライズされています。
- キャリアになる活動(資格、書籍、コミュニティで発表、OSS、インディーズ、薄い本)
- 自分を広げる(勉強、勉強会参加、異業種交流)
- それ以外(サークル活動、組合)
キャリアになる活動はアウトプットや、それを実現できた時の自分の姿が見えているので特に問題になることはないでしょう。これはもう「やらされている勉強」ではなくて立派な「趣味」です。義務感でやるものではないし、なおかつ、お金を生むのであれば家庭内での活動のカテゴリとしては「仕事の一部」になります。
サークル活動の顧問や組合は、それ自身を好きにならないと「単なる無給の仕事」でしかないので今回話題のケースのワーストケースかと思います。つらすぎるし、ここは基本的に所属する組織を変わらない限りどうしようもないのでここの話も割愛します。ちなみに大手の中にはキャリアパスが組合のど真ん中を通っていて、組合専従として現場を離れて専門職から身を置かないと出世できないところもあるらしく(ホンダはそうじゃない)、世の中ますます技術が狭く深くなっていく中で、あきらかにマイナスだよなぁ、ということもあったりなかったりしますが、この手の話題を出すと一部の人のソウルジェムが0.1秒で濁って魔女になるのでやめておきます。
ということで、問題になるのは「自分を広げる活動」かと思います。勉強しなければならないと強制されているように思われるところは主にこれだと思います。しかもゴールが見えないし、つぎつぎと新しいライブラリが出てくる。これは大変です。
とはいえ、アパレル系で話題になる「ノルマ達成してないので自分で買う」というプライベートのお金を犠牲にさせられるよりは、プライベートの時間の方が大分ましかな・・・と・・・
「浅く広く」と「狭く深く」
勉強するにしても、広い領域を深く勉強し続けようとするのは大変です。「新しいものを勉強し続けなければ」というのは「自分が持っている情報が古くなっていく恐怖」から来るものだと思います。そうはいっても、新しい革袋に古いぶどう酒を入れて「革新的でまったくあたらしいライブラリの◯◯◯です」みたいな誇大広告が多くて、実体はそうでもないことも多いです。というかほとんどそうです。パラダイムが変わるようなものはそんなに出てこないし、革新的すぎると広がる速度もゆっくりで、だいたい出来てからブームになるまでに10年とかかかるようなものが多く、ブームになってから慌てたところで大した差が出せるわけでもなかったりします。まずはのんびり自分の勉強計画を持つことが大事かと思います。
まずはなるべく簡単でもいいから多くの分野を必ず触れるというのは1つの方法になります。その際は「常に最新を」という観念を捨てましょう。Sinatraを触れたらRailsの最新版はあえて無視するという勇気。なるべく変化が少ないものや、他の人から教えてもらえる、一緒に勉強できるものがあればそれが良いです。「使い方」ではなくて「概念を知る」のを優先します。HTTPのフレームワークの概念はどの言語で勉強しようがほぼ一緒です。その上で、「俺、この分野では誰よりも詳しくなりたい」「仕事に使うチャンスが大きそうだから集中して学ぶべき」と思えるものが見つかればアクセルを踏みます。
このように、「浅く広く」と、「狭く深く」を使い分けて、フォーカスする分野を見つけてからそこに一点集中するという時間の使い方が効率的です。どの分野を見ても、そこにフォーカスしている人が深いことをやっているので焦る気持ちも出てくるでしょうけど、このように考えれば大分気持ちは楽になるんじゃないでしょうか?
変化が少ないものを狙う
僕がMithrilに惹かれたポイントは「あまり変化しない」ということです。シングルページアプリケーションというものが必要とされる機会が増えてきましたが、雨後の筍のごとくライブラリが出てきていて、どれを使えばいいのか分からない、という人が多いです。「2015年の流行の技術スタックはこれだ」的なQiitaの記事はいつも人気ですよね。
新しいライブラリを覚え続けるので消耗したくない、というのもニーズがある分野だと思っていて、Mithrilの本を書こうと思ったはそういう理由。逆にそういうところで差別化していけばいいんだと思う。
— 渋川よしき (@shibu_jp) October 28, 2015
変化が少ないスタックだと、Tornado on PyPyを使ってMithrilをクライアントMVCに使って、ビューはBootstrapという形式にすればたぶん数年持つと思うしバージョンアップの変更の追従もそんなに辛くない。そういう視点で道具を選ぶのも大事だと思う。
— 渋川よしき (@shibu_jp) October 28, 2015
勉強し続けるのが大変という人向けに「一度勉強したら長く使えるし、一通りの概念は学べるし、とりあえず勉強するならこれが低コスト」という分野にフォーカスして、そこのエヴァンジェリストを目指してみるのは今後ブームが来ると思います。
オトナ力(りょく)を使う
一番のオススメがこれです。いろいろ言い訳を駆使して、仕事の時間で新しい物を学んでアプリを作ってしまうのが良いです。細切れの時間で毎日少しずつ学ぶよりも、フルタイムで学ぶ方が、学習速度も、得られる経験の密度も段違いです。PythonもC++もJavaScriptもGolangも、趣味で少し触ってはいましたが、やはり仕事でやった時の方が圧倒的に成長できます。
さらに、本で勉強しました、サンプルをちょっと改造してこんなの作ってみました、よりかは「業務で取り組んでこういう成果を出しました」の方がインパクト大きいです。あと、もろもろの採用活動を傍目で見ていると、趣味で◯◯してますよりは、やっぱり職歴の方が比重が大きいところが多いようです。新しいことをしたいということで転職活動をして採用された後に、配属される段階でやはり前の仕事と近いところの仕事のオファーがあった、という話は何人からか聞きます。アメリカなんかはソフトウェア開発に従事してから少し現場を離れて何年かマネージャ等をすると、もうプログラマとしての転職はできない(専門スキルはなくなった)扱いされるとかなんとか。キャリアにプラスするなら、上司を説得するなり、胸ぐらをつかむなり、スキを見てこっそりやるなりして、仕事にねじ込むのがリターンが一番大きいです。
あ、胸ぐらを掴んだことはないですよ。
あえて成熟するまで待つ
本当にそれがパラダイムを変えるようなものであれば、業界全体がそちらに向かい始めます。本もたくさん出てきて、時間が立つほど学びやすくなります。世界が変わり始めた時にその最先端にいるのはカッコいいですが、ある程度時間を集中して投資しないとなかなか先端に居続けることは難しいです。それこそ、仕事でやっている人には勝ち目はありません。
ちょっと前にあった流れでは、gitによる分散バージョン管理なんかがこれにあたるでしょう。僕はRubyもgitも最初の本で勉強したクチですが、何冊か後に出た本の方が評判が良かったり、周りで教えてもらえる人も(SNSやStack Overflowなども含め)増えてきて、ハマった時に解決しやすかったり、そもそもハマりにくい手法が確立されてやりやすくなったりしてきます。
最近僕はUnreal Engine 4を遊んでいます(煽るつもりはないので、Unreal Engine 4ちょーすげー話はここではしません、ちょーすごいんですが!)。インストール自体は公開直後から行っていて、MacBook Proでちょくちょく動かしていたんですが、Mac版は不安定だったりするし、性能が低くてつらいので、GeForce GTX 970のWindows機を先日買って、再入門しました。すでにフルカラーの本は何冊か出ているんですが、最近出たUnreal Engine 4で極めるゲーム開発のクオリティが凄まじく高く、実際にゲーム開発に使用した知見(Unreal Engine 3時代からの)があふれていて、今までの苦労(ハードウェアのせいもありますが)もなく、スムーズに学習できています。困ったときにTwitterに書いていたら著者の湊さんが直々に教えてくださることもあり、理解度がどんどん深まっているのを実感しています。
@shibu_jp 良かったです!ここTwitterでみてるだけでも4-5人の方が見落とすみたいで、2刷では太字にして対策をとりました。申し訳ないです
— minahito (@minahito) October 28, 2015
仕事でどっぷりと使うことが決まっていない先行勉強であればあえて「学習環境がそろうまで待つ」のも手です。一時的なブームのよくわからない水物のライブラリは、その時間に耐え切れずに消えてしまうかもしれませんし、そういう意味でも効率アップになると思います。
勉強しない勇気を持つ
オトナ力以外のところに関しては、「時間効率を考えて余計なことはしない、最速を目指さない」という勇気が大切です。これは、家庭があろうがなかろうが同じです。家庭がなければ、無駄な勉強を減らして、1つ2つの新しい分野にフォーカスすれば、新しいオープンソースのプロジェクトを作って完成まで持って行ったり、本の一冊や二冊すぐに書けると思います。そういう意味でも、勉強しない勇気は大事にした方がいいと思います。