凸庵の生存戦略

とあるベンチャー企業でプログラマをやっていて発達障害(ASD)をもつ私の生存戦略や技術ネタなんかを書いていきます

エンジニアはみんな新しい技術が大好き!というステレオタイプには無理して染まらなくてもいいと思う

去年の年末からのよくわからない忙しさがようやくひと段落しました。

ここで元気を充電したいところなのですが、生存確認やリハビリがてら若いころ悩んでいたことを文章にしてみようと思います。

f:id:totsuan1545:20190325001708j:plain

想定読者と要点

以下のような方の参考になるかもしれません。

  • エンジニアをやってるんだけど最新技術に興味がない
  • エンジニアをやってるんだけど別の業界のことに興味があって焦っている
  • エンジニアになりたいんだけど手始めに何から勉強すればいいかわからない

要点は以下の通りです

  • 無理して新しい技術を追いかけ回さなくてもいいと思う
  • 好きなことから勉強していくのが最高効率の勉強法だと思う

それでは本編スタートです。

昔から感じていた「エンジニアは新しい技術が好きな生き物!」というプレッシャー

f:id:totsuan1545:20180430204038j:plain

私は昔から、設計手法やデザインパターンなどのいにしえの技術を勉強するのが好きでした。というのも、私はこの手の使い古された技術をうまく使って、自分がいまできることをもっと上手くできるようになることにものすごく楽しみを覚えるタイプだったからです。
そのため、どうにも新しい言語や流行っている技術には興味が持ませんでした。

私が社会人になった頃からエンジニアをやっているというひとのSNSやブログを見るようになったのですが、「いま私はこんな技術で遊んでいます!」とか「最近こんな技術が気になっています!」といったプロフィールだったり記事の内容が多い印象を持っていました。
なので若いころの私は「自分も技術者として大成するならこの人たちと同じように新しい技術を追わなきゃ!」と思い、新しい技術を追おうと情報を集めてみたり、家のPCに開発環境を設定してみたり色々試してみました。

しかしどうしてもまったくやる気が起きず、それ以上手を進めることができませんでした。そして結局自分がやりたいいにしえの技術について勉強を進めていました。

「新しいことを勉強していかなきゃいけない!」と思いつつもどうしても興味を持てなかったので、「自分は技術者としてダメかもしれない・・・」と思いながら歳を重ねていました。

必ずしも最新技術を追わなくてもいいと思えるようになったこの頃

f:id:totsuan1545:20190325002549j:plain

そうこうしているうちに十数年エンジニアを続けてきましたが、基礎的な技術を続けてきた成果がでてきたのか、仕事で新しい言語や技術に手を出すことになった時にもすぐに適応できるようになっていました。

例えば数年前、元々バックエンドを担当していたシステムで急遽React.js+Reduxを使ったフロントエンド開発をお手伝いすることになったことがありました。
その時は2週間くらい勉強しながら公式のチュートリアルをこなしていたところちょっとした機能は自力で実装できるようになってきて、1ヶ月経つ頃には本職の人たちに混じって普通に開発できるようになっていました。

実はもっと昔にReact.jsに触ってみたことがあったのですが、当時は全然頭に入ってこなかったのであきらめていました。 しかし今回の開発では「自分が使えるようにならないとプロジェクトが終わる!」*1という状況になっていたためか、同じようなことを勉強していてもスッと頭に入ってくるようになっていました。
またReact.jsとReduxについてはいろんな専門用語が出てきていたのですが、いろいろ読み解いていくと今まで世の中に出てきた技術の亜種でしかないことが分かり、急激に理解が進んでいきました。

この辺りから、それまで感じていた「最新の技術を勉強し続けなきゃ!」というプレッシャーが自分の中でかなり薄れてきていました。

ある程度歳月を経て思うことは・・・

ある程度経験を積んで私が思っていることは、「最近の技術のほとんどは昔の技術の進化系であることがほとんど」ということと「すべての最新技術を追うことは自分にとってすごく難しい」ということです。

最近の技術のほとんどは昔の技術の進化系であることがほとんど

f:id:totsuan1545:20190325002650j:plain

といっても私の専門はソフトウェア周りで、インフラ周りのことはよくわかっていません。 しかし、ソフトウェアに関することについては、昔からある概念だったり技術だったりの進化系として解釈できるものが多いと感じています。

例えば「依存性の注入(Dependency injection)」は個人的にGoFデザインパターンの「Strategy パターン」の進化系と解釈しているので、解決できる問題と副作用は想像しやすいと感じています。*2
また、「React.js」のコンポーネント周りの考え方は「オブジェクト指向」をViewレイヤーで最適化したものと解釈すれば、どんな概念でどんな作りが望ましいのか想像しやすくなりますし*3
ついでにいうと、「Redux)」は「React.js」のstate, propsをコンポーネントから切り離して管理し、stateの変更をイベントドリブンにするための仕組み という解釈をしています*4

もちろん自分の解釈が100%正しいわけじゃないこともありますし、思っていたものよりもずっと洗練されていることもよくありますが、このように概念のとっかかりがあることで新しい技術の理解速度が格段に早くなりました。
こういう考え方ができれば、常に最新技術すべてを追わなくても必要な時に使えるようになりそうだなという感覚になってきました。

すべての最新技術を追うことは自分にとってすごく難しい

f:id:totsuan1545:20190325002822j:plain

いまこんな技術があるみたいだよー というレベルであればそれほど労力をかけずに追い続けることができると思うのですが、無数にある最新技術すべてをある程度使えるようになるくらいまで触り続けるのはとても難しいと思います。
そもそもすべてを勉強する時間がないでしょうし、新しい技術はもの凄い速さで出てくるためひとつをある程度使えるようになることにはもうその進化系の概念が登場していたり、似た考え方の別の技術が登場したりでとてもあわただしいなという印象があります。

この辺りをうまく折り合いをつけてやっていける人*5にとってはそれほど問題はないのかもしれませんが、私にはいまいち面白そうに思えませんし、うまく勉強するための時間が取れる気がしません。
私としてはひとつの技術を使いこなせるようになることに対して極端にモチベーションが向いているので、いろいろな技術を使えるようになることにそれほど興味がないことも関係しているかもしれません。

私には全然やれる気がしませんが、いろんな技術を次々に触っては使えるようになっているタイプのエンジニアを素直に尊敬します。それは誰にでもできるわけではない、ひとつの才能だと思います。

その時自分が興味を持っていることを追うのが最高効率の勉強法では?

f:id:totsuan1545:20190325003115j:plain

ということで私としては「最新の技術を勉強し続けなきゃ!」というプレッシャーは感じなくても良くて、その時その時で自分が興味を持っていることを勉強するのが最高効率の勉強法なのではないかと思っています。

私の場合はそれがいにしえの技術だったわけですが、それが最新技術でも別業界のネタでも何でもいいと思います。他のひとが興味を持っていないことに関して知識があるというのはそれだけで個性になります。
もちろんすぐには成果が出ないかもしれませんが、その勉強したことが後から思わぬ形で役に立つことはよくあります。それはプログラミング技術だけではなく、システムの要件定義だったり、マネジメントの時や職場のひととのコミュニケーションの時に活きてくることもあります。*6

また、「やらなきゃ!」と思いながら勉強するのと、「気になる!知りたい!」と思いながら勉強するのとでは、後者のほうが圧倒的に勉強内容が頭に入ってくると思います。
私の場合は特にこの傾向が強いようで、「やらなきゃ!」と思って勉強したときには1日かけても全然覚えられないことが、興味を持った途端に1時間くらいで覚えることができたりします。

私の場合かなり極端かもしれませんが、新しいことを勉強するときってそういう傾向が強い人が多いのではないかと思っています。

クロージング

私自身もいろいろ悩んできましたが、あまり周りの空気やプレッシャーに流されず、自分が興味を持っている物事について勉強する時間を割くのが楽しくていいんじゃないかなと、おじさんになった私は思うのです。
自分が興味をもって学べることはそれが何であれ、きっと自分が行きたいと思っている道に連れていってくれると思いますので。

もちろん最新技術が好きでそれを追うことができる人は、そのまま追っていくのが一番効率がいいと思います。そのまま突き進みましょう!

ここまで見ていただきありがとうございました。 見ていただいた方にいいことがありますように。

*1:リソースや開発内容が炎上確実なプロジェクトだったので、そのくらい追い込まれていました

*2:そもそもDIがそんなに新しい概念かよという突っ込みもあるかもしれませんが・・・

*3:実際にはstate周りのお話とかもあるのでそんな単純じゃないですけどね

*4:これも細かい話はいろいろありますが、概念としてはこんな感じかなと

*5:多分最近○○で遊んでます系エンジニアの方々

*6:私個人としては、エンジニアリングは問題解決方法の選択しのひとつにすぎないと思っているので、技術以外の知識がかなり大事だと思っています