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

(プログラミング1) 最終日コメントへの回答

金曜日, 7月 28th, 2017

授業評価とは別に、プログラミング1の最終講義で出欠兼ねて実施したアンケートにて、希望など応答が求められているコメントがいくつかあったので、それらに対する回答です。


Q: 綺麗なコードの書き方などの具体的な説明もして欲しかった。
A1: 初学者向けではないこともあり、変数等の名称程度に留めています。他講義になりますが、例えば3年次の実験では可能な範囲で書き方解説や、コードの読みやすさに関するコメントもしています。
A2: 参考書としてはリーダブルコードをオススメします!

Q: 今後pythonは使いますか?
A1: 使うこともあります。私が把握している範囲では2年次の実験で少し出てくる可能性があるのと、3年次の一部の実験班で使ってるぐらいかな。
A2: 「Pythonの習熟度を深めるべきか?」という質問なら、アンケート後に例示したように「他言語でも良いから目的を持って取り組むことを推奨します。

Q: 実際に何か目に見えるもの(例えばアプリとか)を作ってみたかったです。
A1: iOSアプリ作成なら2年次の必修講義「モデリングと設計(情報工学科時代の科目名なので、知能情報コースでの科目名は変わるかも)」で、作成します。ちなみに、シラバスの「事前学習」という欄に明記されてますが、アプリ作成のためのに使われるSwift言語は独習する必要があります。1年次の今は、独習するための基礎力を学んでもらってる段階ですね。
A2: お試しでiOSアプリ作りたいのであれば、ググると関連ページはいろいろあります。実機でテストしたいのであれば、情報工学科でライセンス持ってたりしますので、當間までメール連絡下さい。

Q: レポート課題で出されるような問題を授業でも解説してほしい。
A: 他の人のレポート&コードを見れるようにしている(普通はそうしない)ということと、遅れて出す人に有利になりすぎないようにという2点で避けていたのですが、悩ましいところですね。一応コード例自体は、最後の授業で告知したように 8/5 以降に公開する予定です。

Q: doctestが苦手です。
A1: 課題レポートで取り組んで貰ったことがありますが、その際に他の学生がどう書いてるかを眺めてみよう。他の人のコード例を眺めるのも勉強になります。
A2: より一般的な情報源としては、以下が参考になるかな。
 ・公式ドキュメント
 ・解説記事の例: Python: doctest を書いてみよう「Python でビンゴゲーム の確率シミュレーションしてみた」で doctest を書いてみた

Q: 教科書が読めなかったので授業についていけなかった
A: 英語教科書を読めるように頑張ろう。辞書(英英辞書をオススメ)使っても良いです。英語だからと避けていると今後も辛いだけです。

Q: まだまだわからないことだらけです。。。
A: 一つずつ潰していくしか無いです!一度や二度で理解できる人は頭のいい人だけなので、今回の授業15週でわからない部分があること自体は構いません。それを放置し続けるのは問題です。調べ方なり勉強の仕方なりを身に付けよう。

Q: 課題として自由にプログラムを作るのも面白いかもしれない
A: はい、それもやる予定です。去年の後期は、最終課題でそうしました。

今年度のプログラミング1終了

木曜日, 7月 27th, 2017

プログラミング1に関しては、テスト期間にあたる来週は授業はありません。ということで本日が最終日です。最後の授業は、これまでの振り返り、今後の道標、ペアプロ演習の3部構成(完)でした。

振り返りで話した内容は例えばこんな話。

  • プログラミングはいきなりコードを書くのではなく、(1)実現したいことを理解し、(2)理解したことを手順として整理し、(3)プログラミング言語へ翻訳する。
  • 友人らの書いたコードを参照するのは良いし推奨する。ただし、コードだけからはどのようにそこにたどり着いたかの過程を読み取るのは不可能ではないが、困難。過程をよく書けてるレポートを読んでみて、どのように表現すると良いのか参考にしてみよう。
  • IDEのデバッグ支援機能であるデバッグ実行を活用しよう。どう動作するか細かく確認できる。
  • スタックフレームとスコープの関係を理解しよう。関数実行する度にその関数内で自由に変数名を使えるのはこのお陰。

今後の道標では、(来週のテスト期間過ぎたら)夏休み入るよねということで今後どういう道があるかをプログラミング以外の話も含めて軽く例示してみました。いんぱるす先生に教えてもらったRubyで学ぶRubyに興味持つ学生もいたな。

アンケートに質問等貰ったので、後で回答しとこう。

夏休みを目前にした1年次向け情報?

木曜日, 7月 20th, 2017

プログラミング1の14週目が終わりました。前期で触っておきたい所は凡そ終わったので、最後の回となる15回目はプログラミング周りの独習に向けた情報提供してみようかと。

Python関連についてはpython_chartからゲーム/GUI向け、機械学習向けとかいくつか紹介する予定。

Python以外だと、現時点で確定済みなのは、、、

  • いんぱるす先生から教えてもらったRubyで学ぶRubyという、「(ミニ)RubyをRubyで作ってみようぜ」ネタ。
  • Regex Cross­word。いきなりこれから入るのは「??」なので、何かに入門コンテンツ付きで紹介することを想定。
  • paizaのスキルチェックか、AtCoderなプログラミングコンテストあたりも何か一つ紹介予定。
  • まだ特に見つけてないけど、コマンドライン復習できるコンテンツあれば紹介予定。

ぐらいかな。

先輩方から何かオススメしたいものってありますか? 何かあれば slack/twitter/mail とかで情報提供頂けると嬉しいです!(量によっては全部紹介する時間は無いと思うので、紹介ページを用意するぐらいになるかもしれないのだけど)

P.S.
流石にそれは不味いという話をしましたが、可視化するためにミニテストを実施。やっぱり2〜3割ぐらいは身についていない学生いるな。

流石にそれは不味いぞっと

木曜日, 7月 13th, 2017

プログラミング1の13週目が終わりました。元々用意してた分量多めだったので、毎週やってる「今週のお告げ(プログラミングに限らない新入生向けアドバイス)」も省略。それでも予定してた後半部分は時間切れ。ま、それ自体は予想の範疇ではあるので良し。問題は、、、

  • 今作ったクローン、ディレクトリになってるからそこに移動して作業しよう。(という説明でcdできない学生がいる)
  • 「test1.txt」という名前のファイルを作って、中身に「必要」とか書いて保存して。好きなエディタ使っていいよ。(という説明でファイル作成できない学生がいる)
  • あ、違う場所でファイル作っちゃったのね。また作るんじゃなくてファイルを移動しようか。(という説明でmvできない学生がいる)

前期終了間近の今の時期でこの調子なのは不味いぞ〜。一部の学生なんだけど、少なくないぐらいの割合(2,3割ぐらい?)な気もするぐらいにはいる。初見の単語ややり方が分からないのは良いけど、cd, エディタ利用あたりは他の授業でもやってるだろうに。。

余裕でついてこれてる学生も同じぐらいいるから、難しすぎる訳ではないのだよな。

自分なりに索引作れてないと効率良く振り返れられない

木曜日, 7月 6th, 2017

プログラミング1の12週目が終了。今日はこれまでの振り返りを兼ねて、説明不足だったところを補う程度の解説をして、残り時間はペアプロ演習。ちゃんと聞いてる学生もいる一方で、解説中に寝る学生も増えてきた気がするな。

ペアプロ演習中に相談対応してると、ファイル読み込みで戸惑ってる学生がちらほら目につきます。授業的には(1)8週目に初めて出てきて(解説のみ)、(2)9週目のレポート課題で手を動かさせて、(3)11週目のレポート課題で手を動かさせて、ということで都合3回は触れる機会を提供済みです。そろそろ「ハンドラ用意して、ハンドラ操作して、閉じる」ぐらいの流れは身についてて欲しい(自分で調べながら書ければOK)ですが、今日新しくペアプロ演習を用意したら「読み込み?」と悩む学生がちらほら。「授業ページなり教科書なり、ファイル操作したのってどこだった?」と聞いてもうまく探せない。ううーん。それは悲しいぞ。

ラーニング・パターンでいうところの、鳥の眼と虫の眼を行き来できてないから「毎回その場しのぎ的な対応」に留まってるのかなぁ。ペアプロで対話しながら取り組むことで「腑に落ちやすい」学生もいるけど、もう一工夫必要なのかな。それともまだ純粋に回数が少ないだけ(今回の気づきで次回からやれるようになる)のかなぁ。少なくとも、教科書かなにかを振り返って参照できないのは不味いのだが。

単に機能紹介するだけだと眠くなる

木曜日, 6月 29th, 2017

プログラミング1の残りの時間は教科書でやり残した部分や、開発周辺知識を少しずつ話題提供する程度に留め、なるべく多くのペアプロ時間を確保する予定です。とはいえ「dict.keys()すると〜〜」みたいな機能紹介だけになると沈没する学生もそこそこいて。ま、そうだよなという気持ちもわかるのでもう少しどうにかした方がいいのだろうとは思いつつ、実装例紹介し始めると解説時間が結構かかっちゃうのがネックなんだよな。解説するぐらいなら手を動かす演習課題として用意した方が良いだろうし。

ペアプロは割と盛り上がってるし、質問も度々出るので良い時間の使い方だと思うのだけど、もう少し工夫のしどころがありそう。「気づいたことをまとめろ」ぐらいでも良いのかもしれないけど、何か無いかなー。

P.S.
昨晩学外から投稿できなかったのだけど、学内からだとできるっぽい?
もう少し状況確認して変なところがあったら報告するか。

関数定義周りで戸惑ってる学生もいるし、デバッグ実行不要なぐらい理解してる学生もいる

木曜日, 6月 22nd, 2017

プログラミング1もそろそろ終りが見えてきました。重要項目はdict型・バージョン管理あたりか。例外処理・関数オブジェクトあたりは後期にやるだけでも良いかなと思わなくもない。どちらかというと、もう少し復習兼ねたペアプロ演習の時間を取ったほうが良さげな気がする。解説聞くだけじゃ使えるようにならないし。

例えば、未だに return が分からず、

def hoge():
    return 1

def fuga():
    print(1)

の違いがしっくり来てない学生がいます。説明はしているし、課題としてもやらせてるけど、まだゼロにはなってません。そこを別視点から理解させるつもりでユニットテストも教えているのですが、ここにきてようやく「違う」ことに気づいて、戸惑ってる(まだ理解にまでは至っていない)ようです。

他にも、

  • 関数の仕様として引数・戻り値指定しても、無視(?)したコードを書いて次に進み、辻褄合わなくて悩む。
  • 関数定義しただけのスクリプトファイルを実行しても、何も結果が出力されないことに悩む。
  • 不等号で数値比較できることは分かってても「処理結果が0〜100の範囲にあることを確認する」ことを想像できない。

とかとか、いろいろあって楽しいです。「はじめてのプログラミング」だし、いろんなケースに遭遇して、デバッグできるようになろう。

P.S.
デバッグ実行してる学生どのぐらいいるかアンケートとってみたところ、

  • 今のところ理解できてるので、デバッグ実行しようと思ったことがない。: 12.5% (8人)
  • 理解できないコードがあるが、デバッグ実行したことはない。: 51.6% (33人)
  • 1,2回ぐらい試したと思う。: 31.3% (20人)
  • 読めないコードがある都度試している。: 4.7% (3人)

でした。わからない人ほどデバッグ実行しようよ〜。(と、理由付きで伝えておきました)

まる覚えするのではなく、探し方等の対処方法を身に付けよう

木曜日, 6月 15th, 2017

授業後半戦ということで、プログラミング1は先週〜今週にかけて復習メインにやってます。足りてなかった箇所の補足説明も加えているのですが、今週は

あたりをやりました。特に調べ方と、ThonnyPyCharmを使ったデバッグ実行を覚えておけば、これから新しいコードが出てきたとしても対処し易さが段違い。ということでかなり時間かけてこの辺りは解説&デモしつつ、実際に動かさせているんだけれども、ペアプロ演習の様子を見ている限りではそこまでやろうとしてるのはまだ見かけたことないです。IDEでコード書くぐらいはやってるか。

前回与えたコード読み課題ではどのぐらいの学生がデバッグ実行してみたんだろう。アンケート取ってみたほうが良かったか。

振り返って整理してみよう

木曜日, 6月 8th, 2017

先週のプログラミング1を終えてターミナル作業は半数近くがしどろもどろ?とか書いてますが、今週のプログラミング演習1を見てもその思いがより強くなりました。

今週の内容はgnuplotで、新しい内容で戸惑うのは問題ないです。けど、説明時に「$はプロンプトなので除いて、この行をコピーして実行して下さい」と言ってるのに

oct:tnal% $ brew cask install aquaterm
zsh: command not found: $
oct:tnal%

と$付きコピペ実行して(まだ分かる)、結果としてエラーが出ている(エラーだと分からなくても出力されてる内容を読めば何か怪しいことは気付ける)にも関わらず「出来たと思い込んで次に進む」みたいなケースが少なくないです。

シェルスクリプトの例とgnuplotスクリプトの例を区別できていないケースも多い。というか「シェルスクリプト?」と悩むだけで、過去にやった資料を参照しようともせず、単にうんうん悩むケースがあって。それは時間を浪費してるだけで、勉強になってないです。「忘れた時にどう行動したら良いか」、「習ったことをどうやって身につけるか」といったことを自習時間でやらないと、「以前やったことを踏まえて次に進む」ことができない。それはとても悲しい。

プログラミング言語に関して言えば、これまでに出てきているのは「Python, shell (bash/zsh), gnuplot」の3種類。Python言語で書いたスクリプトをシェルで実行するのは無理だし、gnuplot言語で書いたスクリプトをPythonで実行するのも無理。シェル言語で書いたプロぐあr無をシェルスクリプトと呼ぶし、Python言語で書いたものをPythonスクリプトと呼ぶ。ファイル拡張子はファイルの中身を見なくても想像しやすくするための慣習。シェルスクリプトなのに.py拡張子付けちゃうと、混乱の元です。

言語 ファイル拡張子 実行方法
Python .py python3 file.py
Shell .sh sh file.sh
Gnuplot 特になし or .gplot gnuplot < file.gplot

とか、自分なりに整理してみよう。鳥の眼と虫の眼のように、「今自分がやってるのは何なのか」を見やすくする工夫をしてみよう。

ターミナル作業は半数近くがしどろもどろ?

木曜日, 6月 1st, 2017

プログラミング1の7週目が終わりました。

先週はThonnyを使ったデバッグ実行を補助教材として使いつつスタックフレームの話。ユニットテスト(doctest)もやったのですが途中でタイムオーバー。

今週は先週やり損ねた部分からということでユニットテストにモジュールの話。そこはすぐ終わるだろうと思いきや、「ソースダウンロードして、ターミナルでダウンロードしたディレクトリに移動する」だけで手間取る学生多数(半数近い)。意図的にcdコマンド使う説明省いて「移動する」ように指示だけしてみたのですが、駄目な学生多いらしい。しくしく。

先週の残り物やっつけるだけでそこそこ時間かかってしまい、今日の本題・再帰関数の話&PyCharmでのデバッグ実行・スタックフレーム移動のデモ&演習し終えるだけで90分過ぎてしまいました。去年と比較してえらく時間かかってるな。でも、それだけ時間かけたので、これで「デバッグ実行知らない」人はいなくなったものと期待します!

デバッガ利用は去年もやったのだけど、前期には1回だけで軽く流したからか後期になってから「もっと早く教えてほしかった」という学生が多くて。今回はその便利さを印象づけるために例題&デモ&演習を増やしました。

もう前期はデバッグ実行やらないぞー。

P.S.
出欠代わりに書いて貰った「授業に関するコメント」では、「ついていけない。しったむずい。難しい。課題レポートが大変です」といったネガティブなコメントが4件。「今の授業がとても楽しいのでそのままに感じでお願いします。他の資料などを見て先に進むことはあまりやらないほうがいいでしょうか?プログラミングのスキルを向上させる参考書はありますか」といったポジティブなコメントが3件。つまり今のペースで良いわけだな(ぉ)