zimathon blog

宿泊事業部システム開発部でエンジニアリーダーやってます。楽しくやってます。

エンジニアの学び方を改めて考えた

今回のWEB+DB PRESS Vol.80にとても良いセクション
エンジニアの学び方
がありました。

WEB+DB PRESS Vol.80
WEB+DB PRESS Vol.80

いろいろ参考になったので、今後の為にまとめておこうと思います。

そもそも何故こんなことが話題になるか

今のWEB業界って変化がめちゃくちゃ激しいです。時進日歩(日進月歩より早いという意味)です、はい。
全ての技術を身に付けることは到底不可能なので、必要になるスキルがいくつかあります。

  • 自分に必要な情報をいかにして早く集めるか
  • 集めた情報をどうやって理解するか
  • 理解した情報をどうやって自分の開発に生かすか

こういったスキルをどうやって伸ばすか、その具体的な方法を説明してくれています。

1. 効率的に学ぶには

知識に存在する3つの軸

  • 広い視野
    • 自分が学ぶべきことを見つける為に必要
    • 勉強会が良い例
    • 特定の状況に特化した知識が多い
    • 「時間をかけて学ぶべき対象を見つけるための第一歩」
    • ここで立ち止まらずに、先に進むこと
  • 深い理解
    • この軸が無いと、取り入れた知識を応用できない
    • 得た情報から知識を抽象化することが必要である
    • 「すでに経験して知っていることを、もっと深く理解する」
    • この軸ばかりでは新しいものに築くことができない
    • 広い視野と深い理解のバランスが必要
  • 応用対象
    • 自分の理解を活かして成果を出す
    • 自分の会社の中のコンテキストを理解せずに、他の会社のコンテキストでの解決方法を真似てもうまくいかない(やりがち。。。)
    • 自分の会社をよく観察して、会社の外の知識を会社の中向けに翻訳する
    • この軸ばかりに頼ると所属している会社・組織のやり方に染まってしまう

どこかに特化するのではなく、バランスが大事だと思います。

学びに存在する3つのフェーズ

  • 知識収集
    • やる気を元に知識を得る
    • ただし、材料を集めるだけでは何も生まれない
    • 取捨選択が必要
  • 抽象化
    • 集めた知識からモデルを作る
  • 応用
    • モデルを使って成果を得る
    • 自分が理解したことを実際に使ってみることで、正しく理解できているか確認する
    • 理解できれば、自信につながる

勉強すればするほど今自分はどれぐらいできるようになったか、不安になることがあります。
そういった不安を解決するには(僕の経験則からいくと)、
プロダクトを作る
しかないと考えています。
たくさん書いて、たくさん失敗することで多くの学びを得ることが出来ます。

本書では、解決するべき具体的な悩みに対するアクションが説明されています。

  • 学ぶ時間がない(単純にやる気不足)
    • 2章
  • 知識が浅いという不安
    • 3章
  • 何を学べばよいかわからない
    • 4章

2. 最初の一歩をどう踏み出すか

勉強したいと思っているが、「やる気がでない」という状態を解決し、一歩踏み出す方法について

  • ゴールが大きすぎると圧倒されて踏み出せない
  • 近いゴールを設定し、そこまで走ることを目標にする
  • まずはもっと細かいタスクに分割する
    • 必要なところから学ぶ
      • 目標が明確化されている
      • 目標が実現可能である(たどり着けることが大事)
      • おおまかに全体像を把握している
      • 最初からこんなの無理だから、悲観することない(そりゃそうだ)
    • おおまかに全体像をつかむ
      • まずはおおまかに、徐々に詳細を理解していくというやり方が良い
        • いきなり全部を理解しようとしても頭に入るわけない
      • ドキュメントの大まかな構造を理解する
        • どこに何があるかをある程度把握しておく必要がある
    • 片っ端から写経する
      • 写経
        • しっかりと理解しながら進める
        • もちろん書いていることに疑問を持ちながら
      • 時間を区切る
        • 写経するにも区切りながらやる(じゃないとしんどい)

3. どうやって深く理解するか

「いろいろ学んだけど理解が浅い気がする。。。」
と感じる不安には二通りのタイプがあるらしいです。

  • 「深い理解」方向の知識が足りない
  • 「抽象化」のフェーズに慣れていない
    • 抽象化のフェーズでは自分でモデルを生み出さなければならない
    • 「正解のモデルが本に書いてある、それを見つければ良い」と考えるのは悪い例
    • 不安を解消し自信を持つには、得た情報を「抽象化」してモデルにし、自分の問題に応用して、初めて成果が出る

抽象化の部分に強く共感しました(特に知らない言語に関しては、僕もやりがち)。
答えがどこかにあると考えて正解を探すのではなく、自分でモデルを作り出すことが大事です。
このプロセスを繰り返すことで、抽象力が鍛えられ、その力が付けば付くほど自信につながります。

どうやって抽象化するか

いくつかやり方が書かれていましたが、特に気になったのは以下の手法です。

  • 作って学ぶ
    • 難しい物に挑戦しない
    • 試してみて結果が期待通りか検証する
    • 自分でやってみるのが一番

抽象化によってモデルを繰り返し作り続け、そのモデルが正しいかを検証する
この繰り返しで抽象化力を上げたいです。

4. 何を学ぶか、何を作るか

  • やれと言われたことをやる
    • 意外と大事なとりあえず試してみるというスタンス
  • 他人を真似てみる
    • あこがれのエンジニアの方がやっていることをトレースしてみる − 解決すべき問題を見つける
    • 自分が解決したいという問題を見つければ、自ずと何を作ればいいかがわかる
  • 完璧を求めない
    • 「何を学ぶべきか」に正解はない
      • 進んでみてダメだったら方向転換すれば良い
      • 移り気な自分を受け入れる(w)
    • 大事なことはとにかく進むこと

最後に

大事なことは、それぞれを繰り返すことだと思います。

  • 知識収集
  • 抽象化
  • 応用

具体的には、以下のような流れになると思います。

①いろいろな情報を集めて学び、それに基づいて実際に動くものを作ってみる
②自分が手を動かした中で得た知識を、今までの経験などと照らしあわせて抽象化する
③抽象化された知識を試して、実際に成果を出す(うまくいけば自信につながるし、失敗すれば学びになる)

この繰り返しを続けていけば、抽象力がどんどん上がっていって、
さまざまな分野に応用できるようになるのではないかと思います。

ちなみに、本エントリである「エンジニアの学び方」の内容に関して著者の西尾さん自身がブログに書いているので、是非読んでみて下さい。

「エンジニアの学び方」を執筆しました。 - 西尾泰和のはてなダイアリー

ちなみにブログ内にある「コーディングを支える技術」は今読んでます。

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)