午前中は進化計算班の最終提出物(ソース、プレゼン、ドキュメント一式)に目を通し、気になる点へコメント。発表時には「第三者が見ても設計がイメージしにくいな」という点も多々あったのですが、コーディング周り等当日コメント指摘した点についてのブラッシュアップが追加されててGoodです。ベストには遠いかもしれませんが、こういう経験を次回(後期の実験なり4年次での卒研なり、就職後なり)に繋げていってもらえればそれで良いんじゃないかと。「ほぼ終了」なのは、一つ未提出っぽいのがあるのでその確認中ってことです。
ちなみに、進化計算班は3年次向けの学生実験の一つ(サーバ班、コンテンツ班などなど多数あり)で、遺伝的アルゴリズムの実装を通したプチ卒研体験を目指してやってます。大まかな流れとしては、最初の3週間は「お勉強の時間」で、「探索」という概念を勉強しつついくつかの探索アルゴリズムと共に遺伝的アルゴリズムの特徴をイメージできることを目指す。次の2週間程度は「自分で問題を設計する」のが目標で、実際に探索したい問題を設計する。過去の成果物を眺めると分かりますがいろんな提案してきてくれますし、一部は別講義でのオフィシャル・ツールに格上げされたりもしました。残りの10週間程度が具体的な実装。ただし、自分たちで考案した問題を直接実装するのではなく、それを別の人に開発依頼しつつ自分たちはその別の人(クライアント)から開発を請け負うという形式を取っています。
この「開発を請け負う」というのは面倒な方針だし、自分でやりたいことを実装する訳でもないという点で苦痛なこともあるかもしれない。けど、就職後はそういうことが当然になってきたりするし、他人が何を望んでいるかをうまく引き出すスキルであったり、より良いものに仕様をブラッシュアップしていくスキルだったり、実際の現場で求められるであろう事柄の一つは実際に起きるだろうということを期待してこういう方針で続けています。
学生実験という点で特に力を入れている教育効果としては、「同じ世代の人らがどういう風にコーディングしているか」を見ながらコメントすることで、ステップアップしやすくすることを心がけているつもり。例えばFizzBuzzとか小さな問題でリアルタイム・コーディングして貰う様子を眺めつつ、コミットしてもらったソースをベースにリファクタリングをしてみたり。コードのテスト方法や、テストの自動化をTipsとして紹介したり。実際のGA実装に入ってからはコードレビューを主体として「グローバル変数使わないように設計し直そう。例えばここはどうしたら良い?/ここはこういうロジックで書いた方が読みやすい/実際にデバッグしよう!」とか、その時々でやってる事は違いますが基本はコード・レビューです。
そんなこんなで現在やってる学生実験では、主に「ゼロから1,000行程度のコードを書ける」レベルを目指しています。問題設定次第でもありますが、大抵どのグループも最低そのぐらいの量を書くことが多い。当初は「関数って何?」レベルの人もいますが、commit logを眺める限りでは最終的には30回ぐらいはコミットしてて、実験中にもそれなりに説明できつつ、こちらのコメントを理解できるようになってるらしい。勿論そこまで到達できない人もいることはいますが、それでも共同開発を通して自分のコミットが活かされてシミュレーションが動くという体験は必要なんだと思ってます。
という感じで進化計算班をやっていますが、来年度からは別テーマに変更することを想定しています。もう少しNAL研に近い内容にしたい。テーマ次第でもありますが、そもそもの達成目標をどうしようかなぁ、と悩んでいます。便利なツールを使いながら云々という方向にするか、泥臭い所から実装するようにするか、etc.。