Archive for the ‘プログラミング1’ Category

(プログラミング1) おやつタイムの開催

金曜日, 6月 17th, 2016

サポート学生の皆さんへの多謝!

来週は休講で授業がないということもあって、その時間を利用して何か美味しいものでも食べようと声掛けした所、おやつタイムの希望が出たのでその時間に開催したいと思います。参加希望する人は以下から参加下さい!

日時: 6/23(木), 15時
場所: 工学部1号館5階会議室 (予定)
参加申請: 調整さん

P.S.
買い出し部隊にやる人(要車持ち)がいたら、別途何らかの形でコンタクト取ってもらえると助かります。

(プログラミング1) 残り6週で何をやるか

金曜日, 6月 17th, 2016

6週のうち1回は90分丸々演習(ペアプロ)の予定なので、実質的には新しい話をできるのは5週分だけらしい。

授業の達成目標を眺めると、、、

  • 目標1番目は、ペアプロ+レポートで対応中。
  • 目標2番目は、File I/Oを除いてレポート3で終える予定。File I/Oの方はこれから演習かレポートに盛り込む必要あり。
  • 目標3番目は、クラスを除外する形になりそうな予感。モジュールと関数自体はこれまでにもやってて、同じくレポート3で一段落予定。ファイル名とモジュール名を区別できてない学生まだ多いけど。
  • 目標4番目は、ミニテスト+ペアプロ+レポート諸々で対応中。
  • 目標5番目はレポート2で一度はやってみたのと、先日のPyCharm+デバッガで抑えてみているつもりです。ちょっと足りないとは思うので、今後のレポート課題に組み込みたいけどどうしよっかなー。
  • 目標6番目は、部品提供+αに留まってるレベル。現状最も足りてない部分
  • 目標7番目は、変数名や関数名等の命名規則は当初から何度か盛り込んでるし、ドキュメンテーションとユニットテストはレポート2で対応済み。

という状況で、予定していた達成目標からは6番目が一番足りてないかな。


後半戦が始まってるということで、残りの週(6回+期末テストの週)でやりたいことを列挙&優先順位を付けてみるとこんな感じかしら。

  1. データ構造: list, dict, setの利用
  2. 関数設計の考え方(話すだけ?デモ?演習?それ以外?)。前述の達成目標6番目。
  3. バージョン管理: gitかなぁ(悩)
  4. numpy
  5. matplotlib
  6. wxPythonか何かGUIツールキット
  7. その他有用なモジュール: math, pandasとか
  8. エラーと例外、アサーション
  9. 余裕があれば: クラス導入
  10. 余裕があれば: C言語イントロ。

1番目の「データ構造(list, dict, set)」で2週かかりそう。使えるように、というよりは「こういう構造がある(教科書とにらめっこしながら読み書きできる)」で十分なので、サラッと流すだけで良いかもしれないけど。レポート3の先生役する時間も必要なので、恐らく10回目(6/30)と11回目(7/4)はこれかな。この2週は演習時間取れるか怪しいので、12回目(7/7)は丸々演習の日にする予定。この予定で進めると、ここまでで残り3週に。(この間に File I/O and/or データ構造なレポート課題4出したいかも)

2番目の「関数設計の考え方」は、paizaのスキルチェックAtCoderみたいな課題(最初の入力と、最後の出力だけを指定した課題)が出された時に「どんな関数を作るか」というお話。関数1つじゃ済まない(済ませたくない)ぐらいの問題を用意して、関数入出力設計*2,3個してその組み合わせで問題解決するという、設計自体に焦点を当てたい。これで少なくとも1週は潰れる予定で、この順で進めるなら13回目(7/14)が終わり。ここまでで残り2週に。

3番目以降は仮に順番付けてみたけどどれも同じぐらいの優先順位かな。この時期には線形代数の基本が終わりかけらしい。ベクトル・行列演算ということでNumpyをどこかで触らせてあげたい。軽くコード例示したりデモやるぐらいなら、授業1回分も使わないけど、どこまでやるか次第だな。Matplotlibと合わせて入門編1回ぐらいか? その予定なら、14回目(7/21)が終了。(ここで最後のレポート5回目?)

15回目(7/28)にバージョン管理かしら。後期に回すという手もあるけど、一度話をしておいた方が良い気もするし。

16回目(8/4)はテスト期間。プログラミング1ではテスト無しなので、レポート等相談対応の時間に使うつもり。

んー、こうしてみるとペアプロに使える時間が足りてないかも。ソフトウェア演習1の山田先生と相談してみよう。

1年次のうちにC言語も少し触る予定だったけど、前期の最後にちょろっとやって後期に忘れてしまうぐらいなら、後期で触ったほうが良いか。

(プログラミング1) PyCharm入門+デバッガ体験

木曜日, 6月 16th, 2016

9回目の授業が終わりました。今週は統合開発環境PyCharm入門しつつ、デバッガ体験させるという1日。予想以上に時間がかかって演習やる時間は取れず。だけどIDEの良さは伝わったと期待したい。「ブレークポイントって何?」とか初めての用語はまだしっくりこないかもだけど、エディタとしての機能だけでも良いし、printデバッグ以外にこんな方法があるんだと思えるだけでも良いです。発展的な話としてやってみた「条件付きブレークポイント」の便利さに気づけてたら、十分凄い。

来週は慰霊の日で休講(大学設定)ということで、次回は2週間後。レポート課題は確実に抑えて欲しいif文、for文、while文、関数を「先生役として相手に教えるための資料を作れ」という復習丸出しな課題に。教科書読み+授業解説+演習で理解できないなら、自分で教えるつもりで準備(勉強)しろ、と。

(プログラミング1) レポート2の採点

火曜日, 6月 14th, 2016

1年次のレポートということもあって、レポートの書き方を含めた細かいフィードバックをしたいなと。でも教員で全部やるのは辛いなと。1度目のレポートはやったんですが、そのままだと辛いので誰か採点TAやりませんか。という話を大分前にやったのですが、それに対してやりたいという声が上がってくれて、先週締切のあったレポート2の採点からお願いできることになりました。

解答例と大まかな基準を用意してお願いした結果、TAスコアと教員スコアとでは平均点の違いを除くと傾向的にはほぼ同じ(相関係数0.98強)ということで、院生でもレポートの良し悪しは気づいてくれる訳で、安心しました。今回私の方はざっくりと眺めるだけにしたのですが、それでもおおよその結果は良いらしい。一方で見逃してた点に気づけたので、細かいところをTAにお願いするのは正しいらしい。

ということで、フィードバックを活かして下さい〜>受講生の皆さん

(まだフィードバック公開はしてないけど)

(プログラミング1) レポートに書けても理解できてるとは限らない

木曜日, 6月 9th, 2016

8回目は、やり忘れてたFile I/Oに、新しいデータ型 Tuples、そしてツール紹介として Jupyter Notebook を触ってみました。

今日が締切のレポート2は、未提出が1割強。難しいとは思うのだけど、教科書や授業でやった内容ではあるのだよな。そういう意味では「(a)問題の意図を理解していないか、(b)取り組み方が想像できない」のどちらかで詰まってるようです。

(a)は私の問題(設問文の質の問題)であるケースと、書いてるけど読み飛ばしてるケースに分かれてて、後者のケースも少なくなくて。最初は文章の問題が主要因かとも思ってたんですが、そうじゃなくて読んでなかったり、もしくは読んでるだけで咀嚼されてなかったりというケース。具体例を出すと、授業中に何度も「int型オブジェクト」という表現を多用していますが、個別に対応してるとこれが通じない学生がいたりするという。もう8週目なんだけど、まだ共通の辞書が作れてないらしい。いや、「オブジェクトって何?」とかいう話もありそうなんだけど、int や integer でも通じないので、テキスト・授業を理解できてないのだなぁと。身に染みます。

(b)は、この授業の中で達成させたい目標の一つ。「次の一歩が分かる」ように、問題分割して取り組む方法をデモしたり、過程を言葉や文章で表現させたり、リファレンス参照させたりといったことをさせてみてます。まだまだな学生が多いかもですが、一方で頑張ってる学生もいて。元から素養があった、という話だと悲しいですがw それだとしてもそういう思考方法を共有させるためにペアプロを標準導入してる訳で。

ということで、中間地点を過ぎましたが、前途多難だなーという話でした。

(プログラミング1) そろそろ中間地点に到達

木曜日, 6月 2nd, 2016

先週からやや高度な話が増えてきてるので、今週はコード例を交えつつ振り返り多めの内容でした。同じ内容繰り返しても面白くないし、聞く側もツマラナイよねということでユニットテストに絡めてリファクタリング・テスト駆動開発の話したり。再帰の例で木構造探索する迷路問題紹介してみたり。伝わったかどうかは怪しいですが、新しい話がない講義というのも学費泥棒だよねということで、それなりに準備してみました。

内容の入れ替えが多々あったものの、今のところペース的には予定通りです。予定通りに早すぎるので、来週は少しペースダウンというか演習メインの週になる予定です。課題なりペアプロなり、オフィスアワーなり活用して自分から学ぼう。自分から行動しない人は置いて行かれるだけです。それを少しでも防ぐ工夫としてのペアプロ導入ですが、話せない人が減ってきた感はあるかな。ついてこれてるかは別なんですがw

まだまだ「関数って何?」「変数って何?」とかいるし。

P.S.
学科パンフ掲載用の授業撮影があるらしい。実際には先週やる予定だったのが忘れられて、今週も忘れられて、と延び延びになってるんですが。といいつつ私自身も授業対応でアップアップしててその日のは忘れてるんですがw

(プログラミング1) 今日から中盤入り

木曜日, 5月 26th, 2016

先週までで構造化プログラミングな話に区切りがついて、今日からはやや高度な話に。具体的にはスコープ、ドキュメンテーション(docstring)、ユニットテスト(doctest)といった話を具体例も交えつつ解説。スタックフレームって何とか目視テストじゃなくてテストを自動化しようとか。一度の話では理解できてない学生が過半数かもしれませんが、一応「事前に教科書読んでこい」なんだよな。予習で疑問に思ったところを授業中なり質問なりを活用して乗り越えて欲しいです。

進捗確認アンケートで「今日の授業は何やってるのかサッパリ」みたいな書き込み(1件)を貰ったのですが、それなら質問してくれ〜。書き込むだけだったり、書き込むにしても具体的な質問じゃないと対応できないです。という回答をして終了。うーん、演習中に手を上げてる人は結構いるのだけど、「質問する人が目立つだけで、全体としてはやっぱり質問しない人もいる」のね。

ただ、演習をペア・プログラミングで強制してる分、「隣の人に話しながら・質問しながら取り組む」というのをしてない人(ペア)は目立ちます。その分、そこに対してのフォローはしやすくなった。勿論「授業中は問題無さそうに見える」人もいて、そっちはレポートでの判断になるか。

去年の例だと6回目で制御文、9回目でスコープなので、やっぱり今年度はやや早めらしい。そのつもりで進めてますが、前述の通りそろそろついてこれてない学生が目立ち始めたかな?というところです。 ペアプログラミングのペアをそろそろ調整(理解度高い学生と低い学生とをペアにする)しよう。

ゲームの例が分かりやすいとは限らない

木曜日, 5月 19th, 2016

プログラミング1の5回目が終わりました。そろそろ半ばに差し掛かると考えると15コマの少なさを強く感じます。5回目の中身は「for文」を中心としつつ、派生話題としてシーケンス集合と浮動小数点取り扱いについてのお話。

毎週やってるミニテストの出来が芳しくなかった(正解率6割)こともあって解説時間が少し長くなりましたが、それでも演習時間を40分強確保できました。手を動かしながら考えないとね。

それにしても辛い。DQやFFをやったことがないはともかく、「グループ攻撃というのを聞いたこと無い人?」でも手を挙げる人がちらほら。そ、そうか。ゲームネタの方が分かりやすいと思って演習にちらほら盛り込んでたけど、そうでもないんだな。反省。(何で演習や課題でのネタ作り悩むな)

ゲームネタを避けて、for文の例としては「例えばこの講義の受講生全員に対して、個々人の点数に応じて何か処理したい場合、ひとりずつ繰り返して処理するよね」という話したり。whileでもforでもどちらでも書けるケースはあるけど、書きやすさという点で向き不向きがあるから特徴を抑えよう、と。

P.S.
授業開始前にレポート出せてない学生に声掛けしてみたところ、提出し忘れただけ1件、理由をうまく説明できないかもしれない人が2件、といった感じかしら。自分から動いて欲しいけど、切っ掛けとして一度呼び出してみるか。

レポート出せないこと自体はともかく、友人・先輩・TA・先生なりに質問できない、のだとするとそれは問題なわけで。そうだと決まったわけじゃないけど、授業前後だと時間撮れないからちゃんと話ししづらいので、一度時間取って話してみようかと。

(プログラミング1) 連休明けの内容は「課題への取り組み方・レポートの書き方のデモ」

木曜日, 5月 12th, 2016

GW直前に初めてのレポート課題を出したのですが、友人・先輩・教職員らへの相談含めて頑張ったようです。(GWめちゃくちゃ頑張りましたという報告ありw)

毎週やってるミニテストは趣向を変えて、(他の科目はともかくプログラミング1では)初めてのレポートということもあるので「他の人はどう書いてるだろう?」をやる時間に使いました。自分の学籍番号付近のレポート4件眺めて貰ってそこから良レポートをセレクト。それを隣の人と良さを説明しあってベストレポート1本を互いに検討し、投票。結果としてはダントツで票をゲットした学生が1名、3,4名から投票ゲットした学生が9名、それ以外にも1,2票ゲットした学生が20名弱でました。

投票するだけではなく理由も記入してもらったところ、

  • エラーについて詳しく調べられていた.また,web検索で色々な関数を調べて使っていた.
  • 整数以外を入力した際に整数を入力するように促すようにするなど私には思いつかなかった気遣いがあって優れていると感じたため。
  • 実行コードや結果などを四角で囲っていたのがとても見やすかったです。
  • 失敗例を漏らさず書いており、正解へのアプローチの過程がしっかりできていると思う。ファイル形式をPDFなど簡単に見られるようにしてほしかった。
  • しっかり図も踏まえて説明していて、しっかり分析できているから。さらに、より良い、方法を試そうと試みが現れてるなあと思いました。

等、多数のコメントが寄せられました。提出されたレポートはいつでも閲覧できるようにもしてあるので、次回からは良い所を真似て書いてくれることを期待します(ニッコリ)。

一方で、取り組み方への相談も少なくなく。初めてのことなので当たり前なんですが、これをどうにかしたいなということでスライドp.13のような抽象的な話をしつつ、これに基づいて実演しました。課題を読みながら「まずはこの部分について取り組んでみるか」「ここを分割するとこうなるかな」「これなら余り使えばできるな」みたいに考えてることを喋る&テキストに残しつつ、それにもとづいて書いたコードとその結果をそのテキストにコピペ。こうして「プログラミングのプロセスを残そう」という話を最後まで。所々でTips加えて「ヒストリを使おう」「置換しよう」「インデント対応してるエディタだとこういうことできるよ」「Markdownってのがあってね」等など。その結果がこんな感じに。最後らへんはテキスト化端折ってるところもありますが、「後でレポートにまとめる」のではなく、「取り組んでる最中から記録に残すことでプロセスが見れるようにしよう」と。取り組み方やレポートの書き方にどれだけ心響く形になったか分かりませんが、大分噛み砕いて実演してみたつもりです。

次回からのレポートがどれだけ質向上するか分かりませんが、相互レポートチェックと実演とで課題・レポートへの取り組み方が何となく分かってくれてたら嬉しいのですが。

P.S.
今はインタプリタ+エディタという形で進めてますが、後でJupyter Notebookも導入してみるつもりです。コピペする必要もなくなると思うので。

今日はwhile文の演習でガチャシミュレータを用意してみた

月曜日, 5月 9th, 2016

プログラミング1の担当をすることになってから、「学生の頃こうだったなー」というのをよく思い出してます。当時は「自分のパソコン」とかそんなもの無かったので、基本的には学内で課題。これは「皆とやる」とかそういう要因ではなくて、環境制限のため。そういう環境だったので今の学生よりも触れる時間は短かったはずですが、逆にPCルームという形で何やるにしても集中しやすかったからか、課題はちょちょいで済まして比較的「お遊びしてる」時間もあったと思います。そこの境界ははっきりしないのだけれど、やってる本人的にはかなり遊んでました。

「printf(“Hello world!¥n”;)」でも楽しかったし、そもそもタイプするだけでも楽しかった。コンピュータに触れてる感があって。そういう意味ではやっぱり「24時間自由に触れなかった」という制約がハングリー精神に繋がったという側面はあったのかも。

if文やループを覚えてからはミニゲーム作成に精が出て。
関数を覚えてからは main() 関数から何か一つ関数コールして終了するみたいなことしたり。
ポインタは何がなんだか分からないままだった気がしますが、アドレス見て「あ、メモリってこういうことか」と感動したり。
デバッガで処理途中の状態確認できるの見て震えたり。

そんなこんなで道具を少しずつ増やしていく都度あれこれ遊んでました。今の私がやってる授業でももっと遊んで欲しいという気持ちはありますが、今はまだそこまで余裕が無い学生が多いかなー。演習含めてあれこれ詰め込みすぎかしら? でも一人でやるのと、ペアでやるのとではまた違う勉強になるからなぁ。ということで今回は演習課題あれこれ作りまくっております。