仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・エンジニアのスキルアップ・ブログ運営などに関してよく書く雑記ブログ

【必見】初心者時代に知らずに損したエンジニアの技術学習を効率的かつ安くする方法

f:id:virtual-surfer:20200103153904p:plain


社会人でエンジニアをやっていると、平日の夜や土日で技術学習をしようとしてもなかなか時間が取れないですよね。

今回は、3年間エンジニアとして働いてきた中で学んだ、限られた時間でも技術学習を効率的かつ安く進める方法をまとめておきます。


自分自身、エンジニア1年目の頃に知っておいて実践していれば、技術学習において相当な効率化と学習にかかる費用を減らすことができたなぁ...という反省があります。

これからエンジニアになろうとしている方や、エンジニア1~2年目で業務時間以外での効率的な技術学習の方法に迷っている方の参考になればと思います。


※ この記事で使っている「エンジニア」という単語は、「Web系のエンジニア」のことを指しています。


そもそも、エンジニアはなぜ効率的に学習する必要があるのか?

社会人エンジニアは工夫しないと学習できない

会社員としてエンジニアをしていると、通勤時間や残業時間も含めると週5日で10時間〜11時間程度を本業の時間に使うことになりますよね。

その本業の時間と、食事や睡眠や家事など日々の生活に最低限必要な時間をあわせると、平日に自由に使える時間は2~3時間程度だけ。

そしてその時間を全て学習にあてられるかというと、そんなことはありません。


TwitterやYoutubeをぼーっと眺めてしまったり、同僚や上司と飲み会に行く予定が入ってしまって、平日はほとんど学習時間が取れなくなる。

「平日がダメなら...土日だ!金曜日終わった!土日でしっかり技術の勉強するぞ!!」と思い立ったのが金曜日。

「ちょっと学習始める前にYoutube観よか〜。あれ?気づいたら1日終わっていたんだが...。」となる土曜日の夜。気づいたら日曜日も同じような時間を過ごしてしまった...。


こんな1週間を過ごしている方も多いのではないでしょうか。

会社員として働きながら技術学習を習慣化するのは、意外と簡単ではないことがわかりますよね。


エンジニアは技術学習しないと成果が伸びず稼ぎも増えない

f:id:virtual-surfer:20200103144617p:plain

エンジニアは技術学習を継続しないと、「自分の解決できる技術的な課題」が長期的に増えていかないので、「技術を活用して課題解決してほしい」という市場の求めている要望に応えられなくなっていきます。

それでも会社の中では仕事があるので、会社では忙しく働いていて、スキルも増えて技術力も伸びている気になります。

結果的に、会社で求められていた仕事はできるけど、市場の求めているその他の要望には応えられないエンジニアになっていきます。


会社で求められている仕事 = 市場で求められている仕事 であれば全く問題はないのですが、そんなことはほとんどないでしょう。

たとえば、今所属している会社でPerlで開発されたプロダクトの保守を担当する部署に所属していて、業務外で市場で求められる技術の学習を継続しなかった場合。

数年後に「転職したい!」と思い立った時に、Perlの経験と社内の特殊な業務プロセスでのプロジェクトマネジメント経験しかない可能性があります。

そうなると、どこに転職するにしても新しい技術での職場となるので、未経験扱いの転職となり、給与が上がらない...。

かといって、Perlの開発現場を選ぶのも今後のキャリアを考えるとどうなんだろう....。

気づけば、会社に依存したキャリアしか選べなくなってしまっていた...。ということにもなりかねません。


エンジニアの技術は生ものなので、定期的にアップデートしていくべきで、腐りかけのものをずっと持っていても仕事はどんどん離れていきます。

もちろん、コンピューターサイエンスの基礎や、アルゴリズムや、デザインパターンなど、技術の基礎になる知識の理解と実践で活用できる力があればそれは長期間活用できる資産になります。

とはいえ、それら基礎的な知識も定期的に活用しておかないとすぐに業務で活用できる知識ではなくなっていきますよね。


エンジニアの仕事の根本は「技術を用いて課題解決をし、対価として報酬を得ること」であり、「社会で求められる技術は数年(早ければ数ヶ月)で変わっていく」ことを前提とすると、技術の学習を継続していくことは、エンジニアとして生きていく上で必須です。


ここからは、エンジニアが技術学習を効率的に進める上で大事な考え方を紹介していきます。


エンジニアの効率的な学習方法とは?

エンジニアの学習を進める上で大事な考え方は、以下の3つがあります。


エンジニアが学習を進める上で大事な考え方

  • 先に学習時間と環境を確保し、学習習慣をつける。
  • アウトプットするものを決め、つまみ食い学習をする。
  • フィードバックをもらって改善点を学ぶ。

先に学習時間と環境を確保し、学習習慣をつける。

f:id:virtual-surfer:20200103145415p:plain

まず先に技術学習の時間を確保してしまうこと。

これが何よりも大事です。


会社員エンジニアは、本業の仕事が終わると疲れているので、本業以外の時間は基本的にゆっくりしていたくなるんですよね。

ぼく自身もそうです。

「仕事終わった!とりあえず家に帰ってご飯食べてから空いた時間の使い方決めるか〜。」と考えてしまって、「ご飯食べてる間にYoutubeでも観よか〜。」となって、気づいたら23時くらいまでYoutubeを観てしまって今日が終わりに近づいています。

このように、特に学習時間と環境を整えることなく過ごすと、間違いなく技術学習を習慣化することはできません。


こんな怠惰な自分に負けないためには、自分が怠惰なことを認めて、「業務時間以外に家にいる時間を減らす。カフェに行って強制的に作業をせざるを得ない環境をつくる。」など、時間と環境を先に確保してしまうことが効果的でした。

ぼくは、業務時間以外の時間と土日はカフェにこもることに決めていますが、家よりも確実に集中できるし周りの目がほどよい監視になってYoutubeをダラダラ観たりしなくなりました。


「カフェでお金を払っているし、出費分くらいは有意義な時間を過ごさなければ!」という気持ちにもなるので、学習に対してのやる気もわきやすいです。


アウトプットするものを決め、つまみ食い学習をする。

f:id:virtual-surfer:20200103150132p:plain

エンジニアが技術学習をするときは、先にアウトプットするものを決めて、つまみ食い的に学習することも大事です。

先にアウトプットを決めるとはどういうことかというと、「何を学ぶか?」ではなく、「何をアウトプットするか?」を決めてから、そのアウトプットのために足りない知識やスキルを学ぶということです。


たとえば、エンジニアのよくある技術学習として「業務でPythonを使っていないけど、将来的に使えるようになりたいからPythonを学ぼう!」と決めて、「まずはPythonの基礎とPythonでのWebアプリケーションの作り方を学ぶために技術書を買って勉強しよう!」という学習の進め方をすることがありますよね。

この技術の学習の進め方は、個人的には悪手中の悪手でした。


この考え方で学習を始めてしまうと、「何かを作りたい!」や「こういう問題を解決したい!」という明確なゴールがないので、Pythonの基礎とWebアプリケーションの作り方を網羅的に学びたくなるんですよね。

網羅的に学ぼうとすると、買ってきた技術書を最初から最後まで通読してもれなく学ぼうとしてしまいます。

結果的に、全部通して精読するのに相当な時間がかかってしまうし、仮に通読し終わったとしても、その知識を何に生かすのかアウトプット先が見えずに知識を頭に入れることだけしてしまっているので、業務で活用できる知識にならない可能性が高いです。

さらにツライことには、アウトプットする機会がないので知識が定着せず、1年もすれば学んだ内容をキレイさっぱり忘れ去っているんですよね...。


こんな苦行をしないためにも、まず最初に「何をしたいのか?どんな問題を解決したいのか?」アウトプットするものを決めて、そのアウトプットのために必要な知識を学ぶという手順で学習を進めることが重要です。

たとえば、「Pythonを使った仕事ができない」という問題を解決するために、「Pythonを活用したWebアプリケーションを開発する」というアウトプットが必要なのであれば、Pythonを活用したWebアプリケーションを開発するために自分に足りていない情報が書かれている記事や技術書の該当箇所を読む、Udemyの該当のコースの説明を参考にするなりして、つまみ食い的に学んで足りない知識を補ってアウトプットに近づいていく。

このように学習を進めていくことで、「Pythonを活用したWebアプリケーションを開発してリリースする」という実績とスキルを最小の時間で手に入れることができ、アウトプットをしているので知識の定着もすることになります。


よくある反論として、こんなことを言われるかもしれません。

「その方法だと、Webアプリケーションを開発するスキルしか身につかないじゃないか!」

ですが、そもそもの技術学習の目的である「Pythonを用いたWebアプリケーションを開発する仕事を得ること。そのためにWebアプリケーション開発スキルをつけること」を達成できればいいはずなので、まずはWebアプリケーションを開発するスキルを身につけることだけができていればOKですよね。

Pythonを活用したWebアプリケーション開発エンジニアとして働くようになり、業務の中でPythonの基礎文法とその仕組みや、より高度なアルゴリズムが求められるようになって初めて、それらを学習すればいいので。

もっと言えば、それらは業務で必要になる業務スキルなので、業務の中で学ぶことが求められ、業務の中で強制的に身に付けることができます。

そういう意味でも、自分の技術学習の目的に外れたものを学習するのは、後回しにするべきでしょう。


こちらの記事に詳しく書いていますが、必要性に迫られたアウトプットを伴う技術学習が学習には効果的です。

www.virtual-surfer.com


ぼく自身、非効率学習にハマってしまったので繰り返し書きます。

会社員として働くエンジニアは時間が限られているので、短い時間で効率的に技術学習をする必要があります。

アウトプットを何にするのかを決めて、そのアウトプットには繋がらない(すぐには必要にならない)技術知識は学ばないこと、技術学習の取捨選択をすることが大事です。


フィードバックをもらって改善点を学ぶ。

f:id:virtual-surfer:20200103151036p:plain

「アウトプットを決めて、そのために足りていない知識を学習する」という考え方の発展形なのですが、アウトプットしたものに積極的にフィードバックをもらって、それを改善する中で学びを広げていくことも効率的な学習方法に繋がります。


たとえば、Pythonで会社の業務の自動化ツールを開発・運用し続ける場合と、Pythonで自動化ツールを個人用に作って一度だけ使う場合とを比較してみましょう。

前者の場合だと、自動で会社の業務の一部を行なっていたけど、年末年始などの特別な扱いが必要な日時の場合の自動処理がうまくいかなかったり、自動で処理するデータ量が想定外に増えすぎて、自動で処理できるデータ許容量を超えてしまった場合など、開発時に考慮するべきことが増えていき、それらを考慮した実装をするにはどうすればいいのか?を考えて、次回の実装時により実用的な知識と経験と学びが増えていきます。

対して後者の場合だと、一度だけ開発したのでパッと開発するスキルは身につきますが、前者の場合に比べると実践的な学びは得られません。また、一度しか開発しないので、知識が定着せずすぐに忘れていってしまいます。


上に挙げたのは一例ですが、アウトプットすることによってフィードバックを得てさらに学びを広げ深めていくことができるので、アウトプットしたものを継続的に運用し、フィードバックをもらってその改善をしていくことも効果的な学習のために重要ですね。


以上、エンジニアの効果的な技術学習のために大事な3つの考え方でした。

ここからは、エンジニアが技術学習する上で活用したい具体的なツールと、それを安く活用する方法をまとめておきます。


動画学習サイトUdemyを活用してスキマ時間で技術学習

エンジニアが業務で使わない技術を効率的に学ぶ上で、個人的に一番効果的だなと思っているのが Udemy です。

Udemy は、シリコンバレー発祥の動画で学べるオンライン学習サイトで、RubyやPythonを活用したWebアプリケーションの開発方法や、機械学習の基礎と機械学習を活用したアプリケーション開発方法、Swift・Kotlin・React Nativeを活用したスマホアプリの開発方法などなど、エンジニアが学びたいと思う技術の多くのコースが提供されています。


たとえば、ぼくの場合は機械学習を活用した仕事を2年以内にしたいと思っていて、2020年の目標の一つに機械学習を活用したアプリケーションの開発・運用をするという目標があるのですが、機械学習の基礎コースから機械学習を活用したWebアプリケーションの開発コースまで、幅広いコースが提供されているので、これらのコースを買って学習しています。

マイコース | Udemy

(画像:マイコース | Udemy


スマホアプリもあるので、アプリでコースをダウンロードしておいて、通勤中に2倍速再生でざっくり学んでおく。

座って作業できる環境が確保できたら、ざっくり理解した部分の中でよくわからなかった箇所だけ手を動かしながらしっかり学ぶ。という方法で学ぶと、効率的に新しい知識を学習することができて重宝しています。

Udemyの詳しい活用方法などは、こちらの記事にまとめているので、詳しくはこちらの記事を読んでみてください。

www.virtual-surfer.com


ちなみに、2020年1月9日までは価格破壊的なキャンペーン中で、普段10,000円〜20,000円程度する一部のコースを1,200円〜で購入できます。

2019年までの実績ベースですと、おそらく2020年を通して一番安いタイミングとなります。


電子書籍Kindleを活用してどこでも技術学習

自分が学びたい技術に関して、ググって記事が見つかればいいですが、見つからないことも多いですよね。

やはり、体系的に技術がまとまっている技術書を手元に置いておくのが大事。


技術書はKindle派と本で買っておきたい派とどちらもいるとおもいますが、ぼくはKindle派です。

Kindleだと自分の手元のPCでもスマホでも読めるし、会社のPCでもKindleを同期しておけば読めるので場所を選ばずに読めるところが使いやすいんですよね。


技術書だと中古で買えば安く買うこともできますが、Kindleでもセールが開催されていることがあるのでそのタイミングで安く買うことができます。

www.virtual-surfer.com

↑直近だと2020年1月9日までKindleの技術書セールで一部の技術書が半額程度で買えますが、このように通年で不定期にセールが開催されているので、どうせならセールになっているタイミングで買いたいところですよね。

そんな方は、キンセリというサイトでKindleのセール情報が毎時更新されているので、たまにこちらのサイトを確認してみるとよいかと思います。


RSSやGoogleアラートを活用して技術のトレンド情報収集

RSSやGoogleアラートを活用して、自分が学習したい技術に関しての記事を自動で収集しておいて、空いた時間でサッと目を通せるようにしておくことも効率的でオススメです。

dev.toMidiumQiitaなど、技術系の記事が集まるメディアの情報をざっと眺めるでもいいのですが、自分の身に付けたい技術以外の情報もたくさん載っていて効率が悪いのがイヤだと思う方はRSSやGoogleアラートを活用した方が効率的なので。


RSSの活用方法がわからないという方は、下の記事にまとめているので参考にしてみてください。

www.virtual-surfer.com


Googleアラートは、自分の指定したワードやサイトの新着記事を自動でGmailに通知してくれるサービスです。

たとえば、「Python site:https://qiita.com/」などと登録しておけば、QiitaでPythonというワードを含む記事が公開された場合に、Gmailにリンクが送られてきます。


自分の気になるワードに関しての技術記事を効率的に収集できるので、重宝しています。


まとめ

以上、エンジニアの技術学習を効率的かつ安くする方法のまとめでした。

エンジニアの技術学習について書いてきましたが、技術学習方法に関してもっと詳しく知っておきたい!という方は、西尾さん執筆の『エンジニアの知的生産術』という本を強くオススメします。

www.virtual-surfer.com

技術学習においてのアウトプットの重要性、具体的な技術学習の方法が客観的な根拠をもとに分かりやすくまとまっているので、全エンジニア必見の書だと感じました。

エンジニア2年目の時に読みましたが、1年目に読んで実践しておきたかった内容が詰まっていた本です。


最後に、ヘンリー・フォード氏(世界で初めて自動車の大量生産を実現したフォード社の設立者)の言葉を引用して記事を終わりますね。

Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning stays young. The greatest thing in life is to keep your mind young. - Henry Ford

20歳から80歳まで、学習をやめる人は誰でも年をとっています。学習を続ける人は若いままです。人生で一番大切なことは、あなたの心を若く保つことです。 - ヘンリー・フォード

Henry Ford - Anyone who stops learning is old, whether at...


老害おじさんにならず、いつまでも若々しいエンジニアでありたいものです。


では。

www.virtual-surfer.com

www.virtual-surfer.com