はじめに
システムエンジニアとして日々開発に向き合っていますが、結構前に、未経験からエンジニアを目指す方にプログラミングの講師(メンター)をする機会がありました。
自分自身、これまで色々な技術を学び、最近ではAIを活用した効率的な開発やビジネスロジックの設計などにも取り組んできましたが、「人に教える」というのは全く別のスキルセットが必要だと痛感しました。
今回は、未経験者にプログラミングを教えた際にぶつかった壁と、そこから得た気づきを共有したいと思います。
1. 「知識の呪縛」:自分にとっての常識は、相手の非常識
最も苦労したのは、無意識のうちに自分が前提としている知識の多さでした。
コードの書き方を教える以前に、「環境構築」「ディレクトリ(フォルダ)の概念」「絶対パスと相対パス」「ターミナルの使い方」といった、エンジニアにとっては息をするように当たり前の概念が、未経験者にとっては巨大な壁になります。
「ここをカレントディレクトリにして」という一言が通じないことに気づいた時、いかに自分が「知識の呪縛」に囚われているかを思い知らされました。専門用語をいかに噛み砕き、日常生活の例え話(引き出し、住所など)に変換できるかが最初の試練でした。
2. 「エラー=悪」という恐怖心の払拭
私たちが普段開発している時、エラーメッセージは「次に何をすべきか教えてくれる親切な案内板」です。しかし、未経験者にとって、画面を埋め尽くす赤い英語の文字は「失敗の烙印」であり、恐怖の対象でしかありません。
エラーが出た瞬間にフリーズしてしまい、「どう直せばいいですか?」と答えを求めてしまう傾向がありました。
そのため、コードの書き方を教える前に、「エラーは友達」「エラーを読んで仮説を立てるプロセスがエンジニアの仕事」というマインドセットを根付かせることに多くの時間を割く必要がありました。
3. 「なぜそう書くのか(Why)」の壁
変数の代入やif文、for文といった「書き方(How)」は、比較的すぐに覚えてもらえます。しかし、「関数に分ける」「クラスを作る」「MVCモデルで分割する」といった概念に入ると、急に手が止まります。
それは、「なぜわざわざそんな面倒なことをするのか(Why)」が腹落ちしていないからです。
コードが数行〜数十行のうちは、すべてベタ書きした方が簡単に見えます。実務で何万行というコードを保守してきた経験がないため、「将来の変更への強さ」や「可読性」の重要性を伝えるのは非常に困難でした。
小さな失敗(ベタ書きで後から修正が地獄になる体験など)をあえて経験してもらうなど、プロセスを工夫する必要性を感じました。
4. AI時代ならではの「コピペの誘惑」との戦い
そして、現代ならではの難しさが「生成AIとの付き合い方」です。
エラーが出たり実装方法が分からなかったりした時、AIに聞けば一瞬で答えが出てきます。これは素晴らしいことですが、学習段階において「理解しないままコピペして、なぜか動いた(でもなぜ動いたか分からない)」という状態を生み出しやすくなります。
「AIをツールとして使いこなすこと」と「AIの出力に依存すること」は違います。
講師としては、AIが出したコードに対して「この行はどういう意味か説明してみて?」と問いかけ、コードの1行1行に責任を持たせる(意図を理解させる)コミュニケーションが不可欠でした。
おわりに:教えることは、最強のインプット
難しかったことばかりを挙げましたが、結果として講師を引き受けて本当に良かったと感じています。
「なぜこの技術が必要なのか?」「なぜこのエラーが起きるのか?」を言語化し続けることで、自分自身の基礎知識の解像度が信じられないほど上がりました。人に教えることは、自分自身のスキルを再構築する最強のインプット作業でもあります。
もし「未経験者に教える」機会があれば、自身の成長のためにもぜひ挑戦してみることをおすすめします。