昔 「FizzBuzzが書けないプログラマー」という話題が盛り上がった際に、そんな簡単な問題が出来ないプログラマーなんているわけない! と思っていたのですが、教育の仕事をするようになってから、FizzBuzzが書けないプログラマー、 最近は コピペ プログラマー と呼ばれる人に時々出会います。
非エンジニア向けプログラミング教育 を初めてからは、ソフトウェア開発者は息でもするように自然にプログラムを書いていますが、エンジニアではない人にはプログラムを組立るのは思いのほか難しい事だと知りました。
コピペ プログラマーの特徴
さてプログラムを書く(組み立てる)には、
- 課題を理解する
- 課題を抽象的に捉え、重要な部分を抜き出す
- 自分の持っている技術要素(言語、フレームワーク、アルゴリズム、パターン…)を使い頭の中で課題を組み立てる
- その成果をコーディングする
- 動作させ確認する、間違いがあれば上のステップに戻る
多くのコピペ プログラマーは 2. 3. の部分が出来てない、または弱いのです。コピペ力の高い人は、プログラムを書くのに上の 1. からコピペ力を駆使していきなり 5 (4). に進もうとしています。
しかしコピペ プログラマーでも仕事が出来る
コピペ プログラマーの方に職歴を聞くと、数年間プログラミングの仕事をしている人が多いです? どうしてでしょうか?
ソフトウェア開発の仕事には0からプログラムを作る機会よりも、既存のプログラムを改造したり簡単な機能追加を行うの方が多いかも知れません。既存のコードへの機能追加は似たような機能を実現しているコードを見つけ、コピーし一部を修正するだけで実現出来る事が多いのです。
また新規開発でも、Ruby on Railsに代表される充実した基盤(フレームワーク)を使うと、ネットにあるコード片を組み合わせる事で、深く考えなくてもプログラムが出来てしまいまいます。
ある会社で新人を教えた際に、学生時代からいくつかのゲームを作ったいう、ゲームにはやたらと詳しい受講者がいました。研修の終わりに自由課題の作成を行ったのですが、彼の作ろうとしているプログラムの核になる部分をネット上で見つけたコードを試して悩んでいました。そこで「なぜこのコードを選んだの? このコードの中身を理解した?」と聞いたところ、「コードの中身は理解してないが、Googleの検索結果の上位にあるから」という答えを聞いて驚きました。彼は感やセンスが良い人でこんなやり方で、動くプログラムを組み立ててきたようです。
コピペ プログラマーへの教育
研修でコピペ プログラマーに出会った場合は、まずコピペ プログラミングはプロの開発者にとっては、正しいソフト開発のスタイルではない事を教えます。
そして、プログラミングを組み立てる能力 2. 3. の部分を考えさせるような教育を行います。ただし考える力を訓練するのは時間がかかります。人にもよりますが、何度も何度も組み立てる過程を繰り返し、考える練習をします。
この問題は、数日間の研修で解決出来るような問題ではありません。彼らはそれなりに仕事は出来るので、現場で上位のプログラマーが時々指導しながら考える力を成長させて行くのが理想かもしれません。