【雑感】プログラムの宿題や課題をQ&Aサイトで解決する功罪

 

リハビリを兼ねて、teratail【テラテイル】で、回答を書き込んでいる。

感じたのは、技術が多岐にわたっても、結局は”人”が関わっているということだろう。ここ数年の動向はわからないが、20年前と何も変わっていない。

特にこの時期は、新人研修が始まっている可能性が高い。そこで、企業体に属して居るらしき人が”簡単な”プログラムの質問をしてくる場合が有る。

例えば、1000の数字を読み込んで、最大値と最低値を求めるという課題が出たとして、C言語を少しかじった人なら、答えはすぐに導き出される。言語で書き方が違うのは、変数の宣言とファイルの取り扱いだけだろう。

ある程度は、研修なので講師も教えるのだろう。先に書いたが、プログラムを作るだけなら、それほど難しい課題ではない。ファイルにある1000の数字の再利用を考えないのなら、ファイルを読み込みながら、最大値を保存している変数と最小値を保存している変数と比較して入れ替えるだけだ。

変数宣言で二行(読み込んだ数値を保存する。最大値を保存する。最小値を保存する。ループは、whileを使うほうが好きなので、ループ用の変数を保持)

ファイルをオープン(エラーを考えない。考えるのなら、ファイルの存在チェックを入れる)

ループ

ループをカウントして終了かチェック(読み込みエラーでの終了を含む場合はファイルから読み込んでからもチェックする)

ファイルから数値を読み込む(エラーは考えない。考えるのなら、文字列として読み込んで正当性のチェック)

最大値と比較(大きければ入れ替え)

最小値と比較(小さければ入れ替え)

ループ変数をインクリメントする

ループ終了

最大値と最小値を表示

基本は、これで問題は解決する。

実は、これでプログラムが完成したとして動かしても、思った結果にはならない。コンパイラのち外で結果に違いは出てしまうが、最大値か最小値のどちらかが正しい値を示さない。

この時点で、質問してきてくれたら、最大値と最小値の初期値が”不定”だからと質問に答えることができる。

問題は、解決することが”良い”ことなのか、”悪い”ことなのかの判断が出来ないことだ。

課題だと判断すると、出題した人が居ることになる。そして、その人なりの考えが存在していると思う。上のようなプログラムは考え出すといろいろ組み込まなければならない者が多い。表面的な課題だけを呼んでプログラムを作って出来たと提出するのが目的だとは思えない。今後、業務としてプログラムを作るのならなおさらその傾向が強いだろう。

それだけではなく、Q&Aサイトで質問するのは悪いとは言わないが、答えが帰ってこないことに苛立つのは違うと思う。検索しても答えにはたどり着けるだろう。しかし、それでは理解が出来ていない。”なぜ”そうなるのか、”なぜ”そう作らなければならないのか、そんなことを学習する機会を失うことになる。Q&Aサイトで、人の善意に寄りかかって宿題や課題を解決して、次に進んだとして、同じことの繰り返しになっていくだろう。

Q&Aで答える方の人間は、基本気まぐれだ。答えを教える人も居れば、ヒントだけを書いている人も居る。どちらも、正しいと思う。質問者が求めるのは答えだ。しかし、バックボーンを推測してヒントに留めるのも間違いではないと思う。だから、Q&Aで宿題や課題だと思える質問があるときには、私は”宿題?”と聞くようにしている。無視される場合は、簡単にヒントや問題点を指摘して回答して終わる。”宿題や課題”だと答えた人には、ヒントを与える。ヒントに対しての答えがきたら、そこからヒントを加える。横から答えを書く人が現れるまで続けることにしている。

Q&Aサイトで、宿題や課題の答えを書くのはそれほど難しいことではない。元々、初めてプログラムを習う人なら通る道なのだ。教えるのは簡単なことだと思う。

しかし、答えを教えてしまえば、質問者は”技術者”としては終わってしまう可能性がある。困ったら聞けばいい。間違ってはいないと思うが、考え方もわからないで聞き続ければ、どこかで何も出来ない”技術者もどき”か”プログラムパンチャー”が出来上がってしまう。