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

コードレビュー

火曜日, 1月 17th, 2017

1年次のプログラミング2のレポート採点を通した(レポートと)コードレビューや、3年次の実験4・データマイニング班でのグループ開発してるリポジトリのコードレビューをしたり。

1年次の方は、10月〜12月〆切のレポート課題5件分を通して採点してて、多くの学生に共通するコメントはこんな感じ。インデントがぐちゃぐちゃとか変数名が1文字とかありがちなんですが、最初の2,3回目頃までと後半4,5回目のコードとで全体的に綺麗さが改善してます。こういう風に成長を実感できるのは嬉しい。要因として一番大きいのはIDE(IntelliJ)使い始めたことなのかしら。それでも例外はいて、何でこういう風にブレース書くのだろうとか謎なコードはなくならないですね。ま、それでも1年次だし。「読みさすさを気にしないなら機械語書け」と言っときました(ぉぃ)。

3年次の方は流石に1年次と比べると大分マシなんですが、具体的な課題に取り組んでるだけあってマジックナンバー避けろみたいなコメントが多くなります。リンク先は去年の例ですが、今年も大差はなかったかな。ただし、現時点で「コミットログがない学生」もいて、変なコードを書く学生についてのレビューがそもそも実施できてないんじゃないか説はあるな。

(大学案内原稿) 誌上講義: ペアプロ

金曜日, 12月 9th, 2016

何か去年書いたようなと思って探したら、データマイニング班で誌上講義を作文してたらしい。今年は「ペアプロで書いて」というリクエストが届いたので作文してみました。今回は2パターン用意してねという話で、少し長めに書くこともできるらしい。

450字版。

授業名: [プログラミング1 | プログラミング2 ]

 【N君は戸惑っていた。隣の人と一緒に演習するのは良いが、相手の作業を眺める観察者をやれと指示されたのだ。相手は経験者なのか淀みなくキーボードを操作して一人頷いている。一方のN君は眺めていても今何をしているのか分からない。何をやってるのかサッパリだ。焦ったN君は尋ねることにした。「今、何やってるの?」】
 上記はペア・プログラミングの様子を伝える創作文です。この作文で伝えたいことは2つ、(1)プログラミングに必要な素養は国語、特に伝えたい事を文章や言葉できちんと表現する力、(2)手を動かさないと技術は身につかないということです。
 そこで本科目では「そもそも何を実現しようとしているのか?」を言葉で説明できるレベルまで理解し、その上でプログラミング言語に翻訳するという過程を重視しています。加えて、二人で作業して貰うことで必然的に「今何を考えているのか、やろうとしているのか」を伝え合い、相手の思考を理解しながら歩みます。これにより翻訳過程と思考方法を表現できるプログラマ育成を目指しています。

300字版。

授業名: [プログラミング1 | プログラミング2 ]

一般的なプログラミングの授業形式は従来の英語に似ており、文法中心で話す力は後回しになりがちです。これに対して本科目では「そもそも実現しようとしている対象は何なのか?」を言葉で説明できるレベルまで理解し、その上でプログラミング言語に翻訳するという過程を重視しています。この過程を頭の中だけでやらず、表に出すために「ペア・プログラミング」と呼ばれる手法を導入しました。ペア、つまり二人で作業することになるため、必然的に「今何を考えているのか、やろうとしているのか」を伝え合い、相手の思考を理解しながら歩むことになります。このように過程と思考の表現方法を学ぶことで、応用の効く開発能力養成を目指しています。

久しぶりのペアプロ

火曜日, 10月 25th, 2016

後期始まって4週目のプログラミング2。先週ペア調整を済ませて、久しぶりのペアプロです。前期の経験や授業評価アンケートでのコメントを基に、今回は少しやり方を変更してみてます。具体的には「話しやすい相手を学生自身で選べ+3名チームでも良い」。

前期は、教員側でアンケートや成績を基準として良好の学生とそうでない学生をペアに(中間は中間同士でペアに)してました。これはこれで良かった(今も継続してるペアもいる)のですが、こちらで決めてしまうからか例外的に話ができないペアがでて、気がかりに感じてました。

後期は前述の通り、学生自身に決めさせています。これにより「話ができない」ことは避けられてると思うのですが、それでもたまに突っつかないと「しゃべらないドライバー」が出てきますね。それでも、趣旨説明や具体的なやり方説明したりして、改善してきてるとは思います。

これに伴いペアではなく3人チームで取り組んでるグループもいますが、2名に拘る理由もないし。別観点からは、2名だと何かの要因で決裂した際の修復がしにくいので、「最低3人チーム」の方が機能しやすいという側面もあるかも。

P.S.
デザインスクールまだまだ募集してます! 現在申し込み沖縄側5名(情報3名、法文1名、沖国1名)、京大側12名強。

1日に4コマ授業のある曜日の始まり

火曜日, 10月 4th, 2016

自業自得なところもあるんですが、後期は


という塩梅に。デフォルトで週5コマ。実験2がある週は7コマ。本当は実験4を前期(実験3)に回したかったのですが、実験3が別の授業と被ってて実質無理だったために後期にやることに。しくしく。

上記の内、プログラミング2+ソフトウェア演習2が火曜日の1,2限目にあって、4,5時限目に実験4という塩梅。集中してる分「他のことをやる余裕がない曜日」と決めることでスケジュール的には調整しやすいのですが、授業4コマってやっぱり疲れます。しゃべりっぱなしという訳でもないんだけど。


プログラミング2の1週目は2コマ連続でのC言語入門。2コマで構造体までやったのだけど、もうちょっとボリューム増やしても大丈夫そうな感じがしました。プログラミング1の特別対応について、これから再提出したいという学生が1,2名。それならそうだと自分から行動してくれ〜。


実験4の1週目は、2コマでUNIX哲学機械学習概観。あまり喋るつもり無かったのですが、事例紹介してるとあれもこれもと話ししたくなっちゃうな。もっとも、喋るだけではなく質問当てまくるので学生側も暇してる余裕はなさげ。喋りも早口気味だし。(プログラミング2では早口にならないよう注意してみてるけど、専門に近くなるとどうしても喋りたくなってしまう。。)

(プログラミング2) C programming as a second language

木曜日, 8月 4th, 2016

アルゴリズムへの繋ぎとしては、
  編集、コンパイル、型宣言、配列、構造体、c言語の関数
について説明してもらえると助かります。

という名嘉村先生からの依頼が届き、後期のプログラミング2の冒頭2週間ぐらいでこのあたりをサポートすることに。組み込み周りの開発で要求されることもあるので、最低限は教えておきたいというのもあったし。

ここ数日はC言語入門のための教材作成してます。数カ月先の話ですが、数カ月後には(新規担当の)授業が増えて、学会出張やらイベント対応やらあってで今から準備してないと死ぬ未来が確定してしまうので全力回避する必要があるんですよ。ご利用は計画的に。

ということでここ数日の成果がc_intro (C programming as a second language)です。文章的におかしい所、古い人なのでgccでやっちゃってる人(llvm一択でしょとインパルス先生からツッコミ頂きました)、コードのおかしい所(インパルス先生からry)、まだ修正は必要ですが、大枠は準備できたかな。

P.S.
今日の授業はレポート相談対応のため教室に滞在してましたが、TAで殆ど対応頂けました。ありがとうございます。今度なにか食べに行きましょう。

(プログラミング2) Javaの教科書選定

火曜日, 8月 2nd, 2016

5月頃に候補を絞ってましたが、新しく「新・明解Java入門 (明解シリーズ)が出たとのことで改めて絞り込むことに。

選定時のポイントは、
・既にPythonでプログラミングの基礎は終わっている。
・クラスやオブジェクト、オブジェクト指向、メソッドといったあたりの話はゼロ。
・上記を踏まえて、(a)クラスやオブジェクトあたりの解説が読みやすいか、(b)コード例が豊富か、(c)学生自身が独習(予習・復習も含む)に使いやすいか。
といったところです。

上記を踏まえると、こんな感じ。

3位の「スッキリわかる」の方は、ドラクエ風ゲーム作成を念頭に進んでいくのでそっち方面に興味があって、コード例を中心に頭から最後まで一度通す分には悪く無いです。ただし、前にも書いたように全体的に「対話やり取り」での説明が多く、ぱっと見でどこにに何書いてるかが分かりにくそう(=復習やリファレンス用途に向いてない)なところが難点。あと、ゲームの例が分かりやすいとは限らないという話もあったし。

2位の今回眺めた「明解」の方は、「スッキリわかる」よりは一般的な事例を採用し、対話方式でもない分探しやすい(読みやすい)のですが、解説のボリュームがやや不足気味。「オブジェクトやクラスって何?」という質問に対して「こういうニュアンス。こう使う」という解説が事例で少し触れてるぐらいで、基本的にはチュートリアル+αに近い印象。書き方は分かるかもしれないけど、何故そう書くのかは分かりにくそう。

1位の「新わかりやすい」の方は、オブジェクトの捉え方についても取り上げて解説されてる分、他2冊よりも「読んでて腑に落ちやすい」構成に見えます。帯に「人気No.1の完全独習テキスト」「学生のわからないを徹底的になくした」とあるのに納得の解説具合です。抜けてるというか簡素化しすぎてる部分もありますけどね。Java仮想マシンの話ほぼ無いとか。

ということで、プログラミング2の教科書は「新わかりやすいJava入門編」に決定かな。これ以上新しく探す余裕は(あまり)無いし。

(Java本)全部を取り扱う都合の良い本は無さそう

火曜日, 5月 17th, 2016

1年次後期に使うJava本探しにジュンク堂であれこれ探してみました。那覇店にも洋書の専門書があったような気がしたけど、今はもうなさ気か。ということで今回は和書のみのチェック。隣の棚にAndroid本もあって「そっちでJava&オブジェクト指向導入するのもありか?」と数冊眺めてみましたが、やっぱりなしだな。達成目標に対して回り道過ぎるので。

オライリー棚とか一部にJava関連がある棚含めて4つぐらい棚をチェックしたところ、大雑把に分けると次のようなタイプに別れるのかな。跨ってるのもあるとして。

  • (1)Java言語解説書(言語仕様解説書)
  • (2)特定機能についての解説本
  • (3)取り敢えずコード書けることを目指したチュートリアル本
  • (4)オブジェクト指向開発解説等、設計中心本
  • (5)デザパタ本
  • (6)リファレンスやクックブック的な本
  • (7)周辺知識本

「1冊だけ」という縛りを入れると授業で扱いたいこと(オブジェクト指向プログラミング解説+Java8+コード多め)を一通り触れてるものは無さそう。普通はそうだよね。今やってるPython本もそれ踏まえて足りないところは補う形で使ってるし。何を補うかという点からは、年々updateされる言語最新事情についてはひとまず置いておく(補足対応する)というのがベターかしら。

Java言語仕様ついては基本を抑えるぐらい、オブジェクト指向プログラミング解説とコード例多め」を基準とすると、眺めた書籍の中での候補はこんな感じ。良さそうな順。

帯に「完全独習テキスト」と書いてるだけあって予習復習に向いてそうなのは「新わかりやすいJava入門編」。一方で楽しんでやれそうなのは「スッキリわかるJava入門 第2版」かな。特に「スッキリ」の方はスタックトレースの読み方、エラーメッセージ一覧、構文リファレンスとか痒いところも整理してくれてるのは良さそう。ただし全体的に「対話やり取り」での説明が多く、ぱっと見でどこにに何書いてるかが分かりにくそうなところが難点に感じます。最初から一通り通すだけならそれで良いんだけど、復習するのが辛そう。(復習考えると前者のほうが良さそう)

あと、Java言語プログラミングレッスン第3版が、まだノーチェックで気になる。


少し違うアプローチとして、UMLを交えて設計中心で話が進む「UML&Javaオブジェクト指向開発」も、選択子としては捨てがたい。別の講義で、モデリングと設計があるからそっちに任せるので良いとは思うんだけど。

名前だけ聞いたことがあった「EFFECTIVE JAVA 第2版」はどうかと思ったんですが、これは一度Javaを勉強した後で参考にするノウハウ集なのね。

1年次後期に使うJava本?

金曜日, 5月 13th, 2016

そろそろ後期の授業・プログラミング2の教科書選定するかということで、今週末にでもジュンク堂に行こうかと。オススメありますか?>先輩の皆さん

ちなみに私自身は Java 歴ほぼ0に近いです(ぉぃ)。学生の頃、Javaが出初めの頃にApplication, Applet作って遊んだぐらいか。Application はほぼC言語丸写しでどこにJavaらしさがあるんだ、というソースになってたはずですがw

そんな訳でJava大先輩からのオススメがあればWelcomeです。


去年までは山田先生が担当してて、最後の年は「本格学習Java入門 [改訂新版]」を指定してたらしい。これが良さげなら踏襲するのもありだよね。2011年なので結構古いのだけど、受講済み学生(現2年次)としてはどんな塩梅でしたか?

目次を眺める限りでは基本を抑えつつ、いくつか応用編を組み込んでるらしい。古いだけあって例えば(必要かは置いといて)GenericsやAnnotationあたりの話は書かれてないのかな。一方で、足りない分はオフィシャルドキュメントで補うという形もありそうではあるか。


<対象学生の背景>

  • 対象は1年次。
  • 前期にPython3(留年してる学生はC言語)でのプログラミング経験はあるので、一般的な構造化プログラミングぐらいの知識は既に勉強済み。
  • 一方でPythonしかやってないと「コンパイラ」の存在を知らない。

<教えたい知識の候補>
上記を踏まえると、、、コンパイラ、JavaVM、オブジェクト指向、クラス(軽い話はPythonでもやる予定)、継承、Absract/Interface、Annotation、Generics、といったJava話をメインにする方が良いのかしら。


教科書は置いといて、去年の時点で考えた授業計画叩き台的には次のようになってます。

第1回: プログラミング1の振り返り,インタプリタ言語とコンパイラ言語,静的な型付け,環境構築,実行
第2回: Javaの基本知識(変数と定数,演算子,型変換,配列,制御文)
第3回: コメントとコーディング規約
第4回: バージョン管理,pull request と merge,diff
第5回: ユニットテストとjarの利用
第6回: Gradleによる構成管理
第7回: 振り返り1(プログラムの実行,バージョン管理,ユニットテスト,コード読解)
第8回: オブジェクト指向1: クラスとインスタンス,コンストラクタ
第9回: オブジェクト指向2: 関数 vs. メソッド,処理と情報の隠蔽(カプセル化),継承
第10回: オブジェクト指向3: 多重定義(Overload)
第11回: オブジェクト指向4: 多態性(polymorphism)とオーバーライド,アノテーション
第12回: 抽象クラス(Abstract),インターフェース(Interface)と多重継承
第13回: 例外と例外処理
第14回: Java: クラスライブラリ
第15回: 振り返り2(実践的なプログラミング,継承,隠蔽,オーバーロード,オーバーライド,多態性)

この流れでやれるかどうかはさておき、これがJavaらしい中身になってるかの判断がつかないぐらいには、Javaのことよく分かってないんだよな。