koheiの日記: プログラミング 28
プログラミングの授業が始まっているらしいが、うまくいかねーだろーなーと思いつつ見てる。
公立学校での話に限定すると、プログラミングの経験がない教員が授業を行うにあたってまず頼りにするが、指導書(とよばれる手引書)。これには、プログラミング例なんかが載っているので、それを元に評価をするわけだが、大体において日本の教員は真面目(融通が利かない)ので、例から外れたとんでもないプログラムなんかは間違いと判断するだろう。
例えば、「ある数aを8倍しましょう」とかの問題が出たとき、指導書だとa×8を記載しているだろうが、児童がbit shift 3回で解いた場合は間違いと判定されるという事。
少しでも情報技術をかじったことがあれば、正解としてくれるだろうが、そんな教員はほんのわずかしかいないし。(今後は増えていくことを期待したいが)。
他の例でいえば、ソートとかも考えられる。指導書にquick sortが載っていたとして、児童が一生懸命考え、稚拙なbubble sortの様な物を書いたとする。それを正しく評価できるかという事。いろんなアルゴリズムがあり、それを全部記載していることは無いだろう。その結果、自信(と知識)の無い教員は、間違いだと判断するだろう。前述したように、教員は真面目なので、「結果が正しくても、途中経過が正しくないと、それは間違っている」と考えるクソヒトが掃いて捨てるほどいるからだ。
私立だと、専任教員として詳しい人を雇うことが出来るだろうが、公立学校では、すぐに対応できない所が、なんとも・・・である。公立学校は早めに対策をしないと、児童がプログラミングの面白さに気づく前に、いやになって拒絶反応を示しかねないなと。
追記:高校で情報を教えている教員でも、プログラム書いたことのない人がゴロゴロいる現場で働いてるので、高校の現場も心配。高校は縄張り意識が強いので、他教科が口をはさめないのでさらに悪い状況になるかも。
いろいろ難しいけど (スコア:2)
部活指導員の外部委託に似せてアルバイトを雇うのはどうだろう。
上で懸念される通り教員には期待できないし、
大学生のバイトを1クラスあたり2,3人確保したらいけるんじゃないかと。
しかし大学時代を思い起こすと授業で習ったのはアルゴリズムであって、プログラミングは実習でPCと向き合っていた。
開発環境の構築とチュートリアルを授業でやったら、後は習熟初期のコンパイルエラーの質問に答えるくらいが学校サイドの役割じゃないかな。
というか数週間もあれば、教員のスキルを超える生徒がちらほら出てきそうな気もする。
Re:いろいろ難しいけど (スコア:1)
ただ、「授業」で行うのは教員免許を持った教員でないとダメという部分がネックですね。教員+バイトのTT(Team Teachin)の形も考えられますが、教員は(年配になるほど)プライドが高く、バイトの指摘を受け入れないという別の面での弊害が出てきそうです。
#素直な教員ほど若く、現場に見切りをつけて去っていく
---------+---------+----------+
年をとるのは素敵なことです。
目指す目標 (スコア:1)
高校レベルで、校内のトップクラスの数名でいいから、Linuxのカーネルハックができるレベルを目指してほしいなぁ。
学習していくうちに、生徒さんのレベルに大きな差が生じ、対応する教員側でも教えることが難しくなっていくでしょうから、ネット授業を用いたエスカレーションを取り入れるのがいいかも。
リモートでいいから受け止められる人材を配置して、そのレベルの生徒さんであれば、ネット上での情報交換手法を含めて、レベルアップできる環境と進むべき方向性のアドバイスがあれば、あとは自分とかネット上の生徒同士の情報交換でなんとかするんじゃないかしらん。
Re: (スコア:0)
何でもかんでかも学校でやる必要はないと思う。学校でやってもらった方が親は楽なのはよく分かっているが、それだと学校の負担が大きいし、トップクラスの子供が更に上のレベルを目指すのが難しい。
自分は海外在住だが、こちらの学校には部活のようなものがなく、地域のクラブや同好会に参加しないといけないから、子供が小さいうちは親が連れて行く必要があるし、費用は自前だから、親の負担が大きい。ただ、大人と混じって活動するからレベルは高い。
もちろん (スコア:0)
a * 8と8 * aのどちらかは間違いだぞ(どちらなのかは知らん)
Re: (スコア:0)
クソ教員「バブルソートはクイックソートと違って安定じゃん。×」
……バブルソートをクイックソートに最適化する賢いコンパイラーというギャグが昔あった。
生徒「安定になって困ることあるのかよ?」
Re: (スコア:0)
#define a 2+1
int x = a * 8;
int y = 8 * a;
この場合 x は 10、y は 17 となり、 a*8 と 8*a で結果が異なります。
Re: (スコア:0)
「ある数a」とあるから、aは変数あるいは、少なくとも*演算の前には評価済みである必要があると思うんだが。
#式をdefineしているのに括弧で括っていない時点でアウトにすべきだな。
結果だけ正しくてもダメ (スコア:0)
「たまたまあっていた」を見逃すほうが有害です。
人間は成功より失敗から学ぶのが筋なので、〇を×にしても正しく答えられていたならそれで問題はありません。
テストの点数一つで発狂する自己愛的な人間が怒り狂ってますます自己愛的になるかもしれませんが。
むかしむかし (スコア:0)
入社時の新人研修の課題に、どんな言語でもいいからソートプログラムを書け、というのが出て、
当時すでに下火になった論理型言語で書いたら、一人だけ遅れて一週間後くらいに返却されて、
『内容は理解できないが実行したらソートされたので正解とします』とコメントが付いてた。
日常業務もあって暇じゃないだろうによくやるなぁ、と頭が下がった。
#IT系の会社じゃないのにそんな課題出すな、とも思ったけど
Re: (スコア:0)
課題作ったほうとしては、「こいつ、うちを試そうとしている」と思ったにちがいない。
「ある数aを8倍しましょう」 (スコア:0)
「ある整数」なら正解にしてもいいかもしれないけど、「ある数」が整数とは限らんから、正解にはできないな。と言うか、プログラミングなら「a」は変数だと思うし、それを8倍にするのであればa=a*8やa*=8が正解になる。問題分を作るというところからして容易ではない。基本的には、用意された問題から選んで出題するしか無いだろう。
あと、算数や数学もそうだけど、教えられた範囲で解かないと正解にはならないから、プログラミングも同様に採点して問題ないでしょう。
Re: (スコア:0)
> あと、算数や数学もそうだけど、教えられた範囲で解かないと正解にはならないから、プログラミングも同様に採点して問題ないでしょう。
掛け算の順序の話を誤解して、間違った解釈にたどり着いたしまった人がここにもいますね。
これぞ教育の敗北w
そして「ある数」が整数とは限らないと言うなら、「a」も変数じゃない場合も考えるべきでしょう。「*」だって積の2項演算子じゃないかもしれない。
Re: (スコア:0)
なに、そんなに悔しかったん?
> そして「ある数」が整数とは限らないと言うなら、「a」も変数じゃない場合も考えるべきでしょう。「*」だって積の2項演算子じゃないかもしれない。
無理筋すぎるぞ
Re: (スコア:0)
授業で教えられる範囲において、aが変数でない場合があるだろうか。*を二項演算子として用いたときに二項演算子と解釈されないことがあるだろうか。
「教えられた範囲」と言うルールがなくて、何でもありというのであれば、授業は成立しないし、テストの採点が採点者の能力に依存してしまうので、客観的な評価が困難になる。
Re: (スコア:0)
> 「ある数」が整数とは限らないと言うなら、「a」も変数じゃない場合も考えるべきでしょう。「*」だって積の2項演算子じゃないかもしれない。
そう,「a」が変数じゃない場合や「*」が積の二項演算子でない場合も考えるべきで,
だから「問題文を作るというところからして容易ではない」んだよね。
だからある程度の前提 =「教えられた範囲」や (※ただし…) が必要になってくる。
「掛け算の順序の話を誤解」っていうのは,何をどう誤解しているのか教えてほしい。
私も同じ誤解をしているのかもしれないので。
小学校で「掛け算に『正しい』順序がある」という(間違った)指導がされていている,というのが誤解なのだろうか?
Re: (スコア:0)
八倍するだけなら、for分やwhile分でも掛けるからなぁ。
b=a;
a=0;
i=1;
whie(i=8){
a=a+b;
i++;
}
みたいな?(あってないかも)
Re: (スコア:0)
整数であっても負である可能性もあるから、内部表現が不明なうちにbit shiftで演算するのは不正解だな。
# 整変数なら変数名はI〜Nで始まっていないと、と思う俺はオヤジなんだろうなぁ。
Re:「ある数aを8倍しましょう」 (スコア:1)
一桁シフトしたやつから二回引き算なら正解だったりして
# そういう回答が来うるから、前提条件をそろえるのって大事
Re: (スコア:0)
8倍しろと書いてある仕様書に対して代入までしたらばぐなのでは
れんちゃん式 (スコア:0)
aを8回足す
大喜利ツリーはここでいいですか (スコア:1)
変数を8で割ったらaと等しくなるまでインクリメントしながらループ
Re: (スコア:0)
昔のCPUでは浮動小数点の乗算が30clkとかかかったので、8倍ぐらいなら加算の方が速いなんて時代もありました。
Re:大喜利ツリーはここでいいですか (スコア:1)
ああ、なるほど。実用的な手法だったのですね…失礼しました
# そういえばPentium4はビットローテートが加算の40倍くらいかかっていたのを思い出した…
ビットシフトで行うような生徒は (スコア:0)
教育の課題を達成しているので、先生の評価を必要としていないからいいんではないかな。
受験とかの科目で必須になって、不利になるという事であれば、「通る方法を提示する」という別の学びが得られる。そういうのも大事かな。
Re: (スコア:0)
ビットシフトを独学で学んじゃう生徒の未来の方が心配だけどな
javaですらJITコンパイラ上で最適化されてしまうような時代に、ビットシフトだと処理コストが小さくなるって知識は必要なんだろうか?
それより数式や方程式をプログラム化する能力の方が重要な時代になるだろうし、更に数学的なセンスも高度になる時代になると思う。
そんな中で原理主義にこだわってエンディアンというのがあってとか、メモリバンクも仕組みとか知っても高度なプログラマになれるのだろうか?
Re: (スコア:0)
「教育の課題を達成している」というところのツッコミと捉えていいのかな?
ビットシフトで処理する前に、a x 8という数式をプログラミングする事は思い浮かんだはずだし、書けば書ける。あえて書かなかっただけで。もしa x 8を書かせるのが課題だとしたら、彼はクリアしているんで、先生がそれを認めようと認めまいと、達成している。もし、誰かに認められるのが利益になるなら、その方法を選ばないと損するよ、という話。
それとは別に、ご指摘のように、問題に対してビットシフトが適切なのか?というのは、その通りの面もあるだろう。ただ、プログラミング「教育」として目的を満足できるのかという観点で書いてるので、最終的に元のコメントになったんだな。
彼の未来が心配なのは、部分的にそう思う。同時に若いのにアレゲでいいなとも思うw 間違えずにイッてほしい。
Re: (スコア:0)
.NET FrameworkはEnum値の比較は専用のメソッドでなくBIT演算のほうが速いってのはあった。
C#使いには有名な話。ボクシングされて遅いって落ちなんだよね・・・
.NETCore2.?以降はちゃんと最適化されるので専用のメソッドで書いたほうが読みやすい?かもです。