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

  • Yuki Sonoda, Niantic LabsのSoftware Engineer (2018年〜現在)

エンジニアの知的生産術と合わせて読むと理解がはかどりそう。

ちょっと経験の浅い分野のことをやると「何をやっているか分からない」「何が分からないか分からない」状態に陥ります。

そういう状態から脱するための対処法

  • まずは試してみて動かすこと

  • 次に概念を体系的に理解すること

  • それから実例と利用できる資源を網羅的に把握すること

  • 最後に実践の機会を作って体得することです。

動かしてみる

  • チュートリアルやGetting Startedのような案内文書

    • チュートリアルに出てくるようなシナリオは比較的小さなつまらない例…そのせいで手を動かさなくても理解できるという誤った自信が湧いてきたり、読み飛ばしたい誘惑に駆られたりするんですが、そこを堪えて愚直にチュートリアルに書かれている通りの手順をやってみます。

    • チュートリアルで実際に手を動かしてみると、何かちょっとしたことについて間違った思い込みをして躓いたり、何か未知の用語が出てきて分からなくなったりします。ここまでくると、「何が分からないのか分からない」からは半歩ばかり脱しています。

    • p.25 (1.3.4.1) 写経というテクニック
    • p.10 (1.2.2.2) チュートリアルはゴールを近くする

体系的概念理解

  • 次の手順は、先ほど体験したつまずきや未知の用語を手がかりとしながら概念を理解することです。

  • 何をやっているのか分からないという状態にあるとき、本当に知るべきは「どうやればよいのか」ではありません。

  • その技術やツールがどういった体系で構成されていて、それらがどのように繋がっているのかです。

  • …概念の話は大切である一方で、いきなりこれに触れると抽象度が高すぎて何を言っているのか、なぜその抽象化が有用なのかわからなくなります。そこでそれを防ぐために、最初のステップで小さな実例を体験したことが役に立つのです。

実例と網羅

  • ただし、抽象的な概念だけを読んで覚えた理解は脆弱です。実例に裏打ちされていないので思わぬ見落としをしますし、すぐに忘れます。また、何となく概念は分かってどのあたりに解決策があるか見当は付くようになったとしても、それで具体的にどうすれば良いのか分からなくて途方に暮れることもあります。

  • そこで、次にやるのが良い実例を読むと共に、利用できる資源を網羅することです。

  • 新規に言語を覚える場合であれば、標準ライブラリのリファレンスを頭からすべて読みます。このことによって、先ほど「概念理解」のステップで読んだ言語要素が、実際のライブラリ設計においてどのように利用されているのか実例を豊富に学べます。また、標準ライブラリを把握することでその言語でコードを書くときに何を利用できるのかが分かるので、あとでコードを書くときに役立ちます。

  • …当然ながら、1度読んだところですべてを頭に入れることはできません。しかし、通読する過程で頭の中に大まかな目次が構築されますし、言語機能の良い利用事例を大量に読めるので有益です。

体得する

  • 最後に、実践してみる段です。

  • ここまで来れば、ちょっとした問題解決は自分で調べながらできるようになっています。あとはそれを実際にやってみて経験を積むだけです。

  • …この過程で新たに分からないことが出てくるのが普通なので、そのときは前のステップに戻って概念理解を整理したり、忘れていたことを復習したりします。

まとめ

  • まずは試してみて動かしてみましょう。手を動かして躓きを体験すれば何が分からないのかの手がかりにもなりますし、動いているもののイメージが湧いたほうが新規技術習得の動機になります。

  • 次に概念を体系的に理解しましょう。単に少し動かすやり方を覚えただけでは応用が利きづらいので、背景にある概念とそのつながりを理解することが大切です。ここでは整理された資料を参考にするのが望ましいので、良い書籍があればうまく活用しましょう。

  • それから、実例と利用できる資源を網羅的に把握しましょう。理解した概念を実例で裏打ちすることと、次のステップで利用できる手札を増やすのが目的です。

  • 最後に、実践しましょう。ここまで来たら何が分からないのかは分かるようになっているので、経験を積むだけです。

image p.v