本記事では、エンジニアとしての学習過程で特に効果的だと思われるアプローチについてお話しします。
学習プロセスの3ステップ
効果的な学習と成長には、以下の3つのステップが不可欠だと感じます。
1. 課題を解明する力
最初の一歩は、与えられた課題や問題を正確に理解し、それを解決するためのステップに分解する能力を養うことです。実際の業務においては、このスキルがタスクを適切に管理し、ToDoリストへの振り分けを可能にします。
- 具体的なアプローチ:期待される成果物を明確にし、それを達成するために必要なステップを順序立てて考えることから始めます。
2. 課題の言語化
課題を理解したら、次にその解決策を明確な言葉で表現することが求められます。このスキルは、思考を整理し、具体的な行動計画へと落とし込むために必要です。
- 実践例:先に考えたステップを文章化し、実装に移る前の行動計画としてToDoリストに記載します。これにより、漠然とした理解から具体的なアクションプランへと移行することができます。
3. コードの実装
最後に、具体的なコードを書き始め、問題の解決に取り組みます。この段階では、必要に応じて既存のコードを参考にしつつ、自らの理解と試行錯誤を重ねることが重要です。
- 効果的な学習方法:「~をする実装法」などと検索しながら、似たようなコードを探し出し、それを参考にしつつ自分のニーズに合わせてカスタマイズします。ただの写経ではなく、理解を深めながら実装を進めることが肝心です。
例)課題:ユーザーが数値を入力し、その数値が偶数か奇数かを判断して結果を表示するプログラムの作成
具体的なアプローチ
- ユーザーから数値の入力を受け取るための方法を確立する。
- 入力された数値が偶数か奇数かを判断するロジックを実装する。
- 判断結果をユーザーに表示する。
ToDoリスト
- ユーザー入力の受け取り:標準入力を使用して、ユーザーから数値を入力してもらう。
- 数値の偶奇判断:入力された数値が偶数か奇数かを判断するためのロジックをC言語で実装する。
- 結果の表示:判断した結果を、偶数の場合は「XXは偶数です。」、奇数の場合は「XXは奇数です。」と表示する。
コードの実装
#include <stdio.h>
int main() {
int number;
printf("数値を入力してください: ");
scanf("%d", &number); // 1. ユーザー入力の受け取り
// 2. 数値の偶奇判断
if (number % 2 == 0) {
// 3. 結果の表示(偶数)
printf("%d は偶数です。\n", number);
} else {
// 3. 結果の表示(奇数)
printf("%d は奇数です。\n", number);
}
return 0;
}
成長へのキー
学習のこの3段階を繰り返すことで、技術的な能力だけでなく、問題解決能力も同時に鍛えられるのではないかと考えています。特に、課題の言語化は、思考を整理し、複雑な問題に対しても効率的に取り組むための基礎を築けるのではないかと考えます。
私自身、ある時期には本を読んでの写経や、GitHubを探索してコードを理解するといった学習方法に頼っていました。しかし、このアプローチは、自分自身での言語化のプロセスをすっ飛ばしてしまっていることに気づかされました。エンジニアにとって最も核心をなす、課題や与えられたタスクから解決策を導き出すための思考プロセスを完全に見過ごしていたのです。ある時期から成長している感覚がなくなってしまいました。
問題解決能力を磨く上で、課題の言語化は非常に重要なステップです。それは、頭の中だけでなく、紙やデジタル上にも、自分の考えを明確にすることを意味します。このプロセスを通じて初めて、着実な理解ができるのだと実感しています。
一緒に楽みながら成長していきましょう☺️