現役フリーランスエンジニアが普段やっている技術の勉強方法

どうも、現役フリーランスエンジニアしんのすけでございやす

相変わらずやってますよ。ストアカ活動。

先日もやってきまして、そこでこんな質問を受けました。

普段どんな方法で、勉強されてますか?
ーー現役マーケター(33歳男性)

なるほど。そうか、自分ではあんまり意識したことはありませんでしたが、勉強の仕方って今の時代いろいろあって、迷いますよね。

というわけで、今回は私が普段、技術の勉強をするときに行っている方法をご紹介します。
みんなだいたい似通ってる気もしますが、まぁエンジニアによって違うかもしれませんので、ひとつの例としてご参考にしてください。

動機づけ

まず、勉強しようと思う動機づけは、

  • 仕事で使うことになったので、学ぶ必要性がある。もしくは技術を使った案件を取りたい。
  • 世間的に流行ってる。流行に乗り遅れないために触っておきたい
  • 流行ってはいないが、個人的に興味がある。その技術でやりたいことがある

といった感じでしょうか。

いずれにせよ、エンジニアさんはみなさん勉強熱心で、仕事中もそうですし、帰宅後も、土日も、割と日常的に勉強していらっしゃいます

新しい技術勉強をしなくなったら、エンジニアとして枯れてしまう恐怖心もあるので、一生懸命勉強するというのもあるかもしれませんが、エンジニアになる方たちは新しいもの好きの人種でして、マンガ、ゲーム、ガジェット、パズルなどが大好きな方が多いので、仕事ではありつつも趣味の一環みたいな感覚で、特別な努力をせず自然体な感じで勉強しておられるかもしれません。

私も動くものをつくるのは好きです。
最近はブログが忙しいので、勉強に割ける時間がなくて、逆にちょっとストレスたまってます。

勉強方法

普段、意識してやらないので、自分の行動パターンを考えてみました。
たぶんこんなもんだと思います。(また、思い出したらリライトしますね。)

  • 公式サイト、公式ドキュメント、Qiitaをザッと眺める
  • 書籍を読む ソース写経
  • ドットインストール
  • 詳しい人に聞く
  • 自作の検証環境で、むちゃくちゃにする
  • 技術交流会/もくもく会/イベント
  • 資格取得
  • うごくもの(アプリ/ツール/サイト)を作る

1つの技術勉強で、これ全部をやるわけでもないです。
適切だと思う勉強方法を選んで採用する感じです。

公式サイト、公式ドキュメント、Qiitaをザッと眺める

まぁまずはその技術の雰囲気とか概要を知りたい場合ですね。
勉強したい対象技術の公式サイト(公式ドキュメント)があれば、ザザッと眺めます

しんのすけは英語非対応なので、英語サイトだけの場合は、Google翻訳かまして、単語を拾い読みしてわかった風の顔をします。(読みながら、ふーん。とか言います。←全然わかっていません)

公式ドキュメントやチュートリアルがあれば手を動かさず目でどんな感じか探ってみます。
Wikipediaの概要文読んだりもします。

Qiitaのトレンド記事を読んだり、ランキングを見ると何が流行りかわかったりしますね。

あと、SlideShareで、知りたい技術の発表スライドがないか見たりもします。

「やってみた」「試してみた」という記事はこのへんでだいたい探せますね。

書籍を読む ソース写経

ガッツリ勉強するときは、なんやかんや言って書籍ですね。
書籍はまとまったノウハウを勉強できるので、WEBの記事よりも体系的な知識が手に入ります。

また、紀伊國屋書店みたいな大型書店に行くと用がなくとも技術本コーナーには必ず立ち寄る習性になっています。どんな技術の本が、本棚のうち、どれくらいのスペースを占有しているかで、技術トレンドがわかるからです。

私のお気に入りスポットは、ヨドバシカメラ梅田店の技術本コーナーです。結構マニアックな技術本の品揃えが良いです。リアルの書店は立ち読みできるところがいいですよね。

最近はAmazonでkindle電子書籍を購入することが増えてきました。
ディスプレイの一画に電子書籍を広げて、それを読みながら、ソースの写経がしやすいからです。

  • アナログ書籍はパラパラっと触れるので、リファレンス。(何度も読むやつ)
  • 電子書籍は、画面に並べて「初めての◯◯」みたいな写経・学習用

という棲み分けで勉強してます。
ひととおり書いてあるソースを打ち込んで動かしてみますね。これだけで十分な学習になると思います。

ドットインストール

触ったことない技術で、ドットインストールにレッスンが用意されていれば、それは一通りレッスンを受けます。

動画で解説してくれるので、本当にわかりやすいです。
便利な時代になりました。
オススメの学習方法は、プレミアム会員(月額980円)となって、「女性ボイス」を選択することです。女性ボイスは、勉強が捗りますw

ドットインストールは大阪ミートアップというイベントで、中の運営の方とお会いしたことあります。
みなさんとてもいい方ばかりでした。

詳しい人に聞く

やっぱり、人のクチコミが一番、質の高い情報源です。
各技術分野ごとに、それぞれ詳しい知り合いがだいたいいますので、そういった人に聞きます。
しかし、口頭で伝えられる情報量には限界がありますので、詳細を聞くのではなくて

  • 今困っていることをピンポイントで相談する
  • 先行者に「あの技術触ってみてどうだった?」という空気感を聞く

という2つの方法のいずれかになるかと思います。
捕まえて拘束するのは相手の時間も奪うのであんまり生産的ではありませんから。

既にそういう人は、大量の情報をインプットされていて、その中から厳選して、「このサイトがわかりやすかったよ。」みたいな感じに、一番良質の情報をくださいます。ありがたいです。
圧倒的感謝の気持ちが大事です。

自作の検証環境で、むちゃくちゃにする

私の場合、技術検証目的、個人的な趣味での研究用に試験サーバを用意していて、それを通称「むちゃくちゃ環境」と命名しています。

家に転がってる不要ノートパソコンにLinuxを入れて自宅サーバ化したり、VirtualBoxとVagrantを使って仮想環境を作ってそう呼んでるだけです。

むちゃくちゃ環境には、ぶっ壊す気持ちで、いろいろと無茶なことをやらせてみて、マシンやミドルウェアやプログラムがどんなコケ方をするか見守ります。わざと極端にデカイ数値を与えたり、高負荷条件下で動かしてみて、エラーを吐かせます。

例えば...

  • phpのINT型値の限界桁100京の計算
  • Redisに大量データを保存して、最大メモリ容量を越えたときの挙動確認
  • Redisを正しくstopしないでkillしたときのデータ保存状態の確認
  • nginxとapache両方に対して、同時接続数500のコネクションを貼って、応答速度比較
  • mysqlに1億行のinsertを繰り返す速度検証。indexを作成して検索速度チューニング検証。

みたいなことをします。別にそういう仕事ではなく、遊びです。でも知見は深まります。

技術交流会/もくもく会/イベント

交流会やもくもく会に参加して、参加者の人に普段どんな技術やツールを使っておられるか聞いたりします。
これは勉強ではなく、情報収集とかの部類ですかね。
カンファ系のイベントだと、先行して触った人が最新技術の感想とかをLT(ライトニングトーク)で教えてくれたりします。

あと、まだ未経験なのですが、今度ハッカソンとか出てみたいですね。

そういえば、一昨年にはISUCONに参加しました。(ISUCON;いい感じにスピードアップコンテスト)

こういうイベントに参加すると、楽しみながら、技術レベルが上がるのでいいかもですね。(結果は予選敗退でしたw)

イベント探しは connpass とか使うといいですよ。

資格取得

これはごく稀なのですが、資格取得の勉強を通して、対象技術への理解を深めることもあります。
最近でいえば、AWSについて詳しく理解するために、AWS認定(ソリューションアーキテクトアソシエイト)を取得しました。

この資格を取ると、名刺などにバッジ(認定ロゴ)を貼ることができるのでちょっとドヤれます。(有効期限3年)
取得そのものが仕事上必須だったわけではないのですが、どうせ仕事で触ってるんだったら取っておいて損はないかと思って受験しました。結果的に、開発現場ではきちんと学べていなかったAWSの設計思想の基礎などを抑えることができたので良かったです。

資格はエンジニア自身のキャリア向上にもつながるので、そういった意味で「無くてもいいけど、無いよりあったほうがいい」といった感じでしょうかね。

あと、私自身は取得してませんが人から聞いた話で、サーバサイド初学者はLPICを受験するといいらしいですよ。
Linux/インフラ系の全般的な勉強になるそうです。

自分の腕試しにもなります。合格すると嬉しいものですので、楽しみながら取り組めたらいいですね。

うごくもの(アプリ/ツール/サイト)を作る

やっぱり、仕事でも自主企画でもいいのですが、自分の手を動かして、うごくものを作ってみる。というのが一番の勉強になりますね。

私は、自分の意思が弱く、自主企画でなにか作ろうと思っても、ついついおざなりになってしまって完成までもっていけないこともあるので、「作ったもん見せ部」という部活動を作りました。
完成したものを持ち寄って見せ合うという部活動です。他の参加者はちゃんとしたもの持ってくるのにサボるわけにいかない...というプレッシャーを自分にかけてます。

なんか実例を挙げるとすると、FirebaseのRealtimeDatabaseという技術を使ってみたかったから、自分が発起人となっているジョギング部のスタンプカードをネタで作ってみました。DBの更新処理をかけると、リロードなしで即時web画面反映するのでおもしろいなーと思いました。なので、チャットアプリとかもカンタンに作れます。実際に作ってみて大変勉強になりました。

補足

あと私の周囲で、プログラミングの勉強を最近始められた方が、活用しておられるサービスやスクールの共有です。

TECH::EXPERT

udemy

ウェブカツ

プロゲート

コードキャンプ

私はやり込んでなかったり、または利用してなかったりするので、なにかを言う立場にありませんが、また利用者に取材してみて記事にしてみようかなーと思ったりしてます。

まとめ

以上、勉強法のご紹介でした。いかがでしたでしょうか?

重要なことなんですが、「方法論」自体はみんな大して変わらないと思うのですが、どこまで真摯にやり込むか?という部分は人によって異なっていて、それがスキルの差として大きく現れるのだと思います。

私もさらなる自己研鑽に励みたい所存です。
こんな勉強法もあるよ!というアドバイスあれば教えてください。よろしくお願いします。