はじめに
こんにちは、Watanabe JIn(@Sicut_study)です。
今回はエンジニアの必須スキルである「問題解決能力」について紹介していきます。
問題解決能力というと範囲は広いですが、ここでは新人エンジニアに必須のデバック力などを含めた自分で開発を進めるための問題解決能力について書いてきます。
私はプログラミングコーチングJISOUの中で多くの未経験エンジニアを見てきましたが、成長が早い人の共通点は問題解決能力であると確信するようになりました
そこで問題解決能力がある人とない人との違いを比べながら、エンジニアのプログラミングにおいての問題解決について考え方をまとめていきます。
この記事を読んで考え方を実践していくことができれば、どんどん問題解決能力は向上して「スキル上達」「キャリアアップ」などにつなげることが可能です。
1. なぜ問題解決能力が重要なのか?
私はJISOUのメンバーには最初に「問題解決能力」を身に着けてもられるようにカリキュラムを作っています。
未経験〜ジュニアレベルのエンジニアにとっていかに早くジュニアレベルを抜け出せるかは大切なことだと考えております。
問題解決能力が身につくとエンジニアとして多くの恩恵を受けられます。
✅ 自分で進めることができる
初心者エンジニアのプログラミングの勉強(行動)が止まってしまう最も大きな要因は「エラーに遭遇すること」だと考えています。
私もエンジニア1年目を振り返ると勉強していて一番怖かったのはエラーに遭遇することでした。
エラーに遭遇すると自分で解決しないといけないです。しかし、何を調べたら良いかもわかりません。
もちろん解決できることもありますが、その道は険しいことが多かったです
調べることが苦手すぎて「Teratail」などで質問を投げていたこともありました
なんとかエラーを解決できてもすぐに次のエラー
エラーが解決できないことは行動量が落ちる原因になってしまうのです
しかし、とあるタイミングで問題解決が突然できるようになります。
面白いもので私も過去に実感した瞬間があります。
もちろんJISOUのメンバーもとあるタイミングで見について自走力がつくのです。
✅ 不確実性を解決する
プログラミングは不確実性が発生します。
開発のスケジュールは時間通りに終わることなどありません。
思ってもいなかったところで問題が発生して、時間を取られることもあります。
私達はそのような問題を自分たちで解決する必要があるのです。
チームを引っ張るようなリーダーを想像すると問題解決をしているはずです。
つまり問題解決能力があることはエンジニアとしてチームに貢献することにつながります。
✅ 技術の進化についていく
技術は日々進化しているので、キャッチアップをしていくことが大切です。
新しい技術を学ぶとネットに情報が少なかったり、英語しかドキュメントがないことも多いです
そんな中でキャッチアップしていくのにも自分で解決していく力は大切になります。
素早くキャッチアップすることができないと、技術のゲームチェンジャーが現れたときについていくことができなくなる可能性もあります。
必死に勉強した技術が明日使えなくなって、別の技術を学ばないといけない
こうなってもすぐに適応する力が問題解決能力なのです。
2. 早く身につけることが大切
エンジニアは若さが価値の1つとなる職業です。
どこの会社も若く(経歴が少なく)優秀な人材を求めています。
会社というのは将来的に会社を引っ張るようなリーダーを探そうと必死です。
若くて将来的にトップエンジニアになれるような人材をみつけているわけです。
ジュニアレベルであってもポテンシャルとやる気があればキャリアアップはしやすいのです。
なるべく早いうちにキャリアアップができる最低限のスキルを身につけて
「この経験年数でここまでスキルがあるなら、将来スゴイエンジニアになれそう」
そんな期待を抱かせることができれば、知名度のある大企業への転職も叶うのです。
なるべく早いうちに問題解決能力を身につけて、最速で成長ができればよりキャリアアップしやすいというわけです
短期的に考えても、将来を考えても「問題解決能力」をプログラミングスキルよりも先に学んだほうがいいと考えます。
3. 問題解決能力を身につける方法
ここでは私がJISOUの中で指導している問題解決能力をみにつけるための方法について紹介します。
早いうちから徹底して取り組むことで、最初は成長が遅いかもしれませんが長期的にみると最速成長につながることへ繋がります。
3-1. 公式ドキュメントを読む
公式ドキュメントを読む力を身につけることは、プログラミング全体で有効な問題解決の手段です。
初心者エンジニアにとっては難易度は少し高いと思います。
公式ドキュメントを見る前にQiitaをものすごく調べて解決しているのではないでしょうか?
公式ドキュメントを使わないでなんとか解決したいという心理が働いてしまいQiitaを読んでしまいます。
実際、公式ドキュメントを読むことで大半の問題は解決できます。
それはなんとなく誰もが理屈をわかっているはずです。
しかし、公式ドキュメントを読もうとは思わないのです。
これは 「公式ドキュメントを読んで解決した経験がないから」 だとわかりました。
公式ドキュメントを読まないでなんとかやってきた人からすると、読む理由がありません。
ベテランのエンジニアが「Qiitaじゃなくて公式ドキュメントを読もう」と話していることを聞いたことないでしょうか?
公式ドキュメントを読めるようになると、早く問題解決につなげることができます。
では、どのように初心者エンジニアは「公式ドキュメントを読む力」をつければよいのでしょうか?
「新しく勉強する技術を公式ドキュメントだけで学ぶ」ということをすると読む力は簡単に身につけられます。
JISOUの中では「自動テスト」を学ぶときに経験します。
自動テストを学ぶことは公式ドキュメントを読んで比較的簡単に問題解決ができるのでおすすめです。
エンジニア歴が浅いうちに公式ドキュメントを読んで実装する経験が積めると、将来的に成長することにつながります
3-2. 問題をすぐ検索しない
エラーがでたときに脳死でエラーをコピーして検索する人がいますが、しっかり分析することが重要です。
ここでわかりやすい別の例え話があるので紹介します。
「Cultivate」
この単語の意味は何でしょうか?
おそらく英語が得意な方以外はネット検索や辞書を引いたりするでしょう。
答えは「培養する」という意味です。
では、この言葉の意味は何でしょう?
「推断」
推理の「推」と決断の「断」
「推測して決断する」 という意味を調べず予測ができたのではないでしょうか?
日本語の文章に対しては、単語をネットで調べながら読む人はいません。
しかし、英語になるとすぐにネットで調べてしまうのです
さきほどの「推断」と英語も全く同じです。
「Cultivate」の「cult」をみると「Culture」'文化)が浮かびます。
「土地を耕すこと」は才能、趣味、風俗、習慣などを養成する「文化」がわかればイメージができるのです。
プログラミングのエラーも全く同じです
大事なことはエラーから原因をイメージできるかどうかなのです
ここで大切なことは、「エラーを分解すること」と「原因を推測して仮設を立てること」
エラーは長文ですがしっかりと分解して読み進めることで、解決すべきエラーがわかります。
そしてエラーから推測して仮設を立てることができれば、解決に近づくのです。
原因を推理して当たりをつけることができれば、ネットであきらかに違う記事を見る時間も減りますし、目当ての記事を見つけられるスピードも早くなります。
3-3. デバックで問題の範囲をせばめる
デバックの能力も問題解決において重要になります。
コンソール表示などを活用して、問題が起きている範囲を徐々に狭めていきます。
またどのようなパターンであれば動く、動かないなどを知ることができれば原因をピンポイントで検索できるため解決しやすくなります。
どこまで正しく動いているのかを把握する
これはものすごく大切なことです。
いきなり実装を全て行うのではなく、小さく要件を満たすように実装していくとエラー解決は簡単になることが多いです。
問題解決ができない人は、検索の精度が低いということがここまでの話でわかってきました
3-4. ルールを設けて聞く
ある程度調べてわからなかった「すぐに聞く」というのは問題解決において重要です。
しかし、調べていると熱中してしまい「聞く」という選択肢が後回しになりがちです。
詳しい人に聞けば、あなたが1日かけて悩んだエラーも一瞬で解決できることすらあります。
あなたが初心者エンジニアであればなおさらです。
ここで「自分の中で聞くルールを作る」ことが大切になります。
JISOUの中では10分調べてわからなかったらすぐに聞くというのをルールにしています。
裏を返せば10分は絶対にネット検索しないと質問ができません。
Googleには15分ルールというのも存在します。
問題が起きた時は
【1】最初の15分は自分自身で解決を試みる
【2】15分後も解決していなかったら必ず人に聞く
前者を守らないと他人の時間を無駄にし、後者を守らないと自分の時間を無駄にする。
質問をする上で重要なプロセスがあります。これを守らないと問題解決能力は身につきません
それは 「どのように質問した人が解決までを行ったのかプロセスを知ること」 です。
質問サイトに投げるのもいいですが、問題解決ができるようになるためには詳しい人とペアプロをするのが有効なのです。
JISOUでは時間がかかってしまっているものは基本ペアプロで解決するようにしています。
実際に私がどのような仮設を立てて解決しているかのプロセスをまず見せ解決まで導き、そこからもとのコードに戻して実際に自分で実装をするように教えています。
3-5. あきらめて次の日に
「あきらめる!?」
そう思った方も多いかもしれませんが、プログラミングにおいては不思議な現象がおきます。
あきらめて次の日にチャレンジしたらあっさり解決する
睡眠を挟むことによって脳が整理されて問題解決がしやすくなります。
これは面白いほど効果的なので、ぜひともやってほしい方法です。
しかし、プログラミングをやっているとこの問題を解決するまで寝られないと感じてしまいます。
私もそれで深夜まで作業することがよくありました。結果、寝たら解決しました。
ここも3-4の自分ルールを作ることが大切です。
「1時間解決しなかったら諦める」
これも問題解決をする上でのルールとしては大切なのです。
問題解決の大切な考え方
プログラミングの勉強を始めるとエラーにたくさんぶつかり、解決の大変さと道のりの長さに絶望して「燃え尽き症候群」を発症する人も少なくありません。
またエラーにぶち当たるのが怖くて行動ができなくなってしまう人も多いです。
ここでJISOUの中で大切にしている考え方を紹介します。
あなたのわからないは必ず誰かがわかる。真の絶望はネットにも情報がないこと
ジュニアレベルの遭遇するエラーであればおそらく世界中の誰かが遭遇していますし、周りの人に聞けば解決することがほとんどです。
そう考えればエラーに遭遇することは怖くなくなります。誰かに聞けば必ず解決できる保証があると思ってよいです。
本当に大変なのはネットに情報すらないことで、そういったケースはほぼないはずなのです。
「エラーが怖い」
「問題にぶつかりたくない」
そう考えてプログラミングを勉強する足を止めないでほしいです。
おわりに
今回は私の考える「問題解決」についてまとめてみました。
この記事がこれからエンジニアとして活躍する方の参考になっていただけると嬉しいです。
ここまで読んでいただけた方はいいねとストックよろしくお願いします。
@Sicut_study をフォローいただけるととてもうれしく思います。
普段はTwitterでエンジニアに関する情報を発信していますのでよければ友達になってください👇
また明日の記事でお会いしましょう!
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページからお気軽にご連絡ください!
▼▼▼