最初に
まず軽い自己紹介として、私は5月からあるITベンチャーでインターンを行っている難波と申します。初投稿になりますが、よろしくお願いします。
先日から行っているwebアプリ作成に伴い、エンジニア初学の壁に色々ぶつかってきたのでその一部を記事にします。最初の壁にぶつかっている初学者の皆さんの力に少しでもなれれば良いと思い、メモがてらにアウトプットを行います!
導 入
初学者にとって初めのコーディングは、エラー、記述法など、分からないことだらけだと思います。これを解決する手段は、自分で調べながら行う"自走"と誰かに聞く"質問"の2つが挙げられます。この2つをうまく使い分けることで、時間コストの削減をしながら、エンジニアとしての問題解決能力を上げていくことができます。
まず前提として自走と質問による解決のそれぞれの特徴を先に述べます。その後に、私がハマった点を大きく3つに分け、これを解決できた記事を参考に改善法も併記していきます。
自走と質問の違い
まず自走による解決とは、自らが今持っている知識を用いたり、インターネットに落ちている情報を元に問題解決をしていくことです。対して質問による解決は、他人の持っている知識や経験を借りて問題解決をすることです。
これらにはそれぞれメリット・デメリットがあります。自走による解決は、問題について思考、検索をすることで、理解の深化、検索能力の向上などエンジニアとして必要な能力が上がる一方、時間コストが多くかかってしまいます。一方、質問による解決は、比較的時間コストが少ないです。
ハマったポイント
1. いつ自走から質問に切り分けるかが分からない。
これは必ず陥る点だと思います。自走することでエンジニアとしての問題解決力が上がるのは間違いないです。しかし、自走だけでは時間がかかりすぎて、実装も進まない、モチベーションも下がるといった悪循環につながります。私もこの状況に陥ってしまいました。
改善法:自走の時間をあらかじめ決めておく
その問題に直面した時に例えば、「1時間、自走を行なってダメなら聞いてみよう。」など自分の中でルールを決めることが重要であると思います。「こんなの当たり前じゃん。」と思うかもしれないですが、解決作業がどんどん長引いて結局聞いた方が良かったと思う場面が何度もありました。このルールで動くことで、自走能力も上がりつつ作業も前進していくと思います。
検索した記事の意味がわからない時は、そこに載っている単語の意味などを調べた上で理解できない場合に質問に切り替えるといいでしょう。
2. 何が分からないか分からない。
これはそもそも問題点が分からないという事象です。特にキャッチアップし始めはこの状況に陥りやすいと思います。
改善法: 問題を細分化する。
これは、参考記事の文を引用し説明します。
例えば「JavaScriptが理解できない」という風に言われると、疑問は膨大な可能性を含みます。例えばJavaScriptの定数と変数の使い分けがわからない、なのかJavaScriptがブラウザでどのように実行されるのがわからない、なのか、可能性は無限にあります。そこでもう一歩踏み込んで「JavaScriptの非同期処理がわからない」と言われると非同期処理に範囲を絞り込めます。ただしこれでも非同期処理の概念がわからないのか具体的な文法がわからないのか、など範囲の絞り込みが不十分です。これが「JavaScriptの非同期処理でPromiseとasync, awaitの使い分けるタイミングがわからない」まで来ると完璧な疑問と言えます。
とあるように、問題を細分化するだけで、今自分が何が分かっていないかを整理できます。またこの後のハマりポイントの解決にもつながっていきます。
3. うまく質問できない。
上記のように、質問の仕方によっては問題が入れ子構造になり、問題解決のプロセスが増えてしまうことに繋がります。
改善法: 質問の明確化
まず問題を細分化できたら、次に自分がわからない点だけを列挙し、それを以下のような質問フォーマットにまとめましょう。これを行うことで、複雑な問題を分割して整理する能力がつくとともに、互いのコスト削減にも繋がります。
【質問フォーマット】
■ 今、起きている事
(例)ユーザー新規登録をしようと、登録ボタンを押したらエラーになった。
■ 解決したい事
(例)ユーザー新規登録を実装し、データベースに保存したい。
■ 調べた事、考えた仮説
(例)公式リファレンスやQiitaで似たような記事をみた。(記事のURLなども載せる)
deviseのgemがインストールされているかは確認済み。作成したキー名も間違っていないので、データベースが怪しいと思いテーブル名やカラム名を調べてみた。
■ 仮説を元に行った結果
(例)データベースにもテーブル、カラムもきちんと反映されており、スペルミスも見当たらなかった。再度、実行してみたが同じくエラーで解決できなかった。
まとめ
問題解決において自走と質問の使い分けが一番大事だなと感じました。この判断を正確にできることで、エンジニアとして必須能力である自走力、モデリング力を向上させながら、プログラムに対する理解も深まっていくと思います。これを意識しながら今後も頑張っていきたいと思います。記事の改善点などあれば、コメントよろしくお願いします!!