プログラミングを勉強したり、ソフトウェアエンジニアを仕事としてしていく場合、問題解決能力が必須になります。
問題解決能力というのは、「分からないことに対して自分で情報を集めて解決していく力」です。
プログラミングでは基本的に分からないことや要件に対してそれをどう実現するか不明なことなどが常に出てくるので、その部分を解決していくことが必要になります。
また、「問題解決能力」はソフトウェア開発などのプログラミング言語やフレームワークなどといったもののさらに深いコアなスキルになるので、無意識的に向上するものではありますが、意識的に思い出したいというのもあります。
ChatGPTやGitHub Copilotなど最近ではプログラミングやソフトウェア開発に限らず、何らかの問題に対しての解決策や提案をAIに入力すれば出力として答えやヒントが得られるケースが多いです。
AIに関しては以下の2つのコンテンツを参考にして日々使い倒していきましょう。
問題を解決する能力はAIを使って答えを得るというだけではなくて、AIを使ってインタラクティブに答えに近づいていくといったようなユースケースもあります。
例1
例2
以上のように、実際に分からない事柄に対して自分自身で言語化を行なって答えに近づいていくために、言語化することが非常に重要です。
「AのBという部分が分からない、ここのこういう部分が分からない」と言語化さえできてしまえば、あとはその方法を実際にAIやGoogle検索などを活用したり、該当するコードを調べたりすることで問題を解決していけます。
最近ではChatGPTやその他AIだけで十分に答えには辿り着けますが、いくつかの情報を比較検討する場合などには、Google検索が必要になるケースが多いです。
例えば、GoogleのOAuth認証を導入する場合、Google検索で調べることで、step by stepに実装する方法が複数のサイトの記事でヒットするので、それを読んで比較検討したり共通部分を抜き出してそれをベースに実装していくなどの方針を取ることができます。
実際、何かしらの実装をする際に簡単なハンズオン形式でかつ丁寧に解説してくれている記事は特に英語で多いので、Google検索で問題解決に必要な情報を集めて解決していくことも重要なスキルの1つです。
情報収集力というのは、問題解決のために、AIやGoogle検索に限らずあらゆる情報源をインプットに加える力です。
例えば、メール機能に関するやや複雑なビジネスロジックがチーム内であった際に、そのビジネスロジックを理解するために、Slackのやり取りを参照したりGitHubのRepositoryのコードを参照したり、タスクの要件などを参照したり、といったように複数の箇所から情報を集めて問題解決に至ろうとするようなケースになります。
例1
例2
雰囲気やフィーリングなどとも言えますが、「おそらくこんな感じっぽい」とざっくりと100⇒3ぐらいに絞り込んで詳細細部をデバッグしたり行動することで、より解像度を高めていくような作業がプログラミングやソフトウェア開発でも重要になります。
厳密には、ソフトウェアエンジニアとして必要な1つの能力になります。
この推測力を鍛えるには、日々の勉強や実装や生活から「ざーっと見た感じ(調べたりする感じ)、多分こうなんじゃね?」と仮説を言語化して持ってそこを検証していくことをやるのが有効なトレーニング方法になることが多いです。
仮説を持って検証していく抽象的な思考スキルには練度があります。