技術とかの雑なToday I Learnedメモ

「何をやっているか分からない」「何が分からないか分からない」状態の対処法

「何をやっているか分からない」「何が分からないか分からない」状態の対処法

今日のタブ記事

出来るプログラマーやエンジニアの方でも「何をやっているか分からない」「何が分からないか分からない」状態に陥りますか?その時は、どの様にして対処・解決しますか? - Quora

質問を見て「分かる……」となったので読んだ。

まず「私はできるエンジニアじゃないせいか」から始まっている一番上の回答者が、Ruby コミッターの Yugui さんというものすごい人なのがすごい。

僕も質問者の人と同じことを知りたいのでとりあえず雑〜にメモする

  • まず試してみて動かす
  • 次に概念を体系的に理解する
  • 実例と利用できる資源を網羅的に把握する
  • 実践の機会を作って会得する

まず試してみて動かす

  • まずチュートリアルをやる
  • チュートリアルは比較的つまらない例であることが多く、そのせいで手を動かさなくても理解できそうとか読み飛ばしたいとかそういう衝動に駆られるが我慢して愚直に手順通りにやる
  • オンラインに良質なチュートリアルがない場合は軽薄な書籍を頼る

体系的概念理解

  • 何をやっているか分からないとき、本当に知るべきなのは「どうやればいいか」ではなく「その技術やツールの体系の構成やどのように繋がっているか」
  • 技術やツールを整備した人が分かりやすく定義してくれた概念を理解して、それを自分の状況に合わせて考える
  • 概念の話は大事だが、いきなり触れると抽象度が高くてよくわからなくなるが、それを防ぐために「まず試してみて動かす」経験が役に立つ
  • ここまでこられれば「何が分からないのか」はだいぶはっきりしてきているので、分からないことを更に調べたりして理解を深める

実例と網羅

  • 抽象的な概念だけを読んで覚えた理解は実例に裏打ちされていないので脆弱だし具体的に何をすればいいかがまだ分からない
  • 次にやるのは「良い実例を読むとともに利用できる資源を網羅する」こと
    • 新規に言語を覚える場合は標準ライブラリのリファレンスを頭から全て読む(!)
  • 一度読んだだけで全てを頭に入れるのはもちろん無理だが、通読することで頭に大まかな目次が構築される

体得する

  • ここまでくればあとは実際に問題解決をしていき分からないところを調べつつ自分で進められる
  • この過程で新たに分からないことが出てくるのが普通なので、そのたびに前のステップに戻り概念理解を整理したりする

個人的まとめ

自分は「試してみて動かす」フェーズをすっぽ抜かして概念を理解しようとしていることが多いなということに気づけたのでそれがよかった。

新しい技術を習得しようとするときもそうだけど、新しい機能を実装するときにも、もちろん仕様の確認こそちょっとやるけど、とにかくメモして頭の中を整理して完全に理解してから手を動かそうとする(=手を動かし始めるのが遅い)癖がある気がする。

最低限の仕様を把握したら、まず手を動かしてみて自分の思った感じに進めてみるほうがよさそう。それでそのまま何事もなく完成することはほぼないと思うので、トライアンドエラーを繰り返すほうがいい。

「完璧主義」というとだいぶ大げさだが、「自分が把握していないことがない」状態になるまで不安で行動しない、みたいな傾向がある気がする。この記事を読んでそれに気づいてそれを改善できるチャンスを得られたと思うので、「まず試して手を動かす」を最初にやるというのを自分の行動の指針に据えてやってみる。