技術編

Q.プログラミングは必須ですか?

A.グループではなく単独での卒研テーマとなった場合は必須になる可能性が高いかもです。グループの場合は微妙なところです。ただ、原則的にはプログラミングが「苦痛すぎてしかたない」学生は、本研究室を避けた方が良いと思います。ポイントは「苦手」じゃなくて「苦痛」かどうかです。本学に限らず理工系大学でも「プログラミング得意ですか?」と学生さんに尋ねて、「得意だ!」と答える学生さんがあまりいないのは、こちらもよくわかっています。実現すべき機能を実装するために、自分の頭で考え調べものをして、試行錯誤する作業ができれば問題ないです。「あんまり得意じゃないけれど~、というかぶっちゃけ苦手かもだけれど~、こういうシステム作りたいから勉強してみるわ~」といった意識があれば、そこそこ大丈夫かと思います。根気の良さというか持久力勝負ですね。学部長からは、本学の学生さんはガチ理工系と違って持久力ない、地道な学習の積み重ねが苦手で逃げ出すといった旨の話を聞かされているので、私はとても不安ですけれど。なにげに、高校時代に運動部で頑張っていた体育会系の学生さんの一部は、研究室配属時にプログラミングスキルがとても低くても、研究活動を通してかなりスキルアップする傾向にあります。

 あと、プログラミングをただのコピペ作業と認識している学生さんは、とても不味いです。自分の頭で考えて実装する必要がある部分なのに、ググれば完璧な答えが見つかると勘違いして、ググって答えた見つからなかったら「できない」と思う学生さんや、「二度とプログラミングしたくない!」と固く誓っているタイプの学生さんは、他の研究室を希望した方がよいでしょう。

Q.使用するプログラミング言語やツールなどは?

A.法的に問題なければ、別に何がダメってことはないです。お好きな言語やツールをお使い頂ければ。これまでの学生さんで、利用実績があるものは以下のとおりです。

    • C、C++(前職や前々職でプロ基礎などがC言語だったため。)

    • Java(私が学生時代にJava使っていて技術的にサポートし易いため。)

    • Processing(Javaベースの言語で簡易的な統合開発環境がついていて、芸術系ガチ文系学部でも使われるお手軽言語のため+zip解凍型だとPC室や自宅でも使い易いため。たぶん、2020年度までは、配属学生の中で一番人気でした。)

    • PHP(前職の学生さんがなんかの授業で習ったらしいため。)

    • Python(なぜか2021年度から人気になりました。提案アルゴリズムのコア部分だけでなくGUIのプログラミングもします。)

 ちなみに、Web系研究で使うかなーと思って、以前すすめたRubyについては、購入しておいた書籍「やさしいRuby」が、きれいなRuby(未使用)のままです。あと、2021年度から、ゲームエンジンのUnityを使って開発している学生さんがいます。

 主な開発環境は、高級なテキストエディタを除けば、VisualStudioや、AndroidStudioでした。Pythonを使う学生さんはAnacondaを使っていた気がします。ちなみに、私はこれらのツールの使い方を殆ど知りません。前々職のプログラムの授業担当で仕方なく使ったくらいなので、超浅パチャです。引継ぎ資料にセットアップ関連の資料も少しあったと思いますし、関連書籍も渡すので、なんか学生さん自身で勝手に使い方を覚えています。良いことです。

 画像処理ライブラリのOpenCVを使ったり、Processing用のGUIライブラリや、対応言語はともかくいろいろなTwitterAPI関係も昔使っていたりした気がします。データベースとしてMySQL使っていた学生さんがいたようないなかったような。ちなみに、OpenCVは、私自身でインストールして使ったことないです。たぶん、これ使えば作りたいシステムできるだろうなぁと思って、初年度(2016年度)の学生さんに「OpenCVというものがあってね」と紹介して本をいくつか渡しただけです。データベースも似たようなもので自分では使わずです。以前の職場で、MySQLのクエリ書く必要のあるレポートで困っていた学生さんを、横から助けるくらいでおしまい。

 フリーソフトでは、確かAviUtlを使っていた学生さんがいました。これは、私自身、昔、ニコ動とかに投稿する動画を作成するときに使った覚えあるのですが、使い方の詳細は覚えていなくて、どんなプラグインがあって、どんなことができるか、うっすら覚えていただけです。

 ハードウェア面では、デスクトップPCやノートPCを除けば、視線測定装置やゲーム機のPS4やアケコンが利用実績ありです。XBOX360は、未開封のまま前職場からこちらへもってきました。ライブラリ同様、視線測定装置のセットアップやキャリブレーションのやりかたは、私はよく知らないので先輩の残した引継ぎ資料読んで覚えて頂く必要があります。私が良く知っているのは、アケコンの使い方ですかね。これは、そこそこ上手い方かもなぁ~と思います。

Q.ライブラリやツールの細かい使い方ではなく、目的達成のために何を使えばよさそうか教えて頂ける感じですか?

A.ですね。私は、ツール類のリファレンスマニュアル代わりには、あまりなりません。代わりに、「何を使えばいいかなぁ~」といったところではとっとと助言しますし、必要そうな装置を購入します。あと、ググるときのヒントですね。私がライブラリやツール、装置そのものの存在を知っていることと、学生さんの卒研に役立ちそうかどうか判断する点でカンが必要なので、この辺は卒研攻略の効率優先で教えます。使い方は、単純に「よく知らない」から、教えられる範囲が狭いのです。知っていることは、とっとと教えます。

 実際、若い学生さんの方が便利なツール類を色々知っていたりする場合もありますし、すぐ使い方を覚えてしまうので、私がでしゃばるところではないんですよね……。一方、研究内容そのものや研究戦略については、私の話にのっかっていったほうが効率よいと思います。別にイエスマンになれという意味ではなく、教員側の方が知識量と経験値が圧倒的にあるので。ずっと俺のターンドローができます。

Q.プログラミングに詰まったときにはどのように助けて頂けますか?

A.アルゴリズムを考えるのが難しく、もう無理そうな厳しい状態になったなら、紙に疑似コードやなんとなくフローチャートっぽいものを書いて渡すこともあります。ただし、「なんか先生に考えてもらったアルゴリズム実装するだけだと、無理やりシステム作らされている感があって嫌だー!モチベ下がるー!」という学生さんは、自力で問題解決して頂きたいと思います。手助けした挙句、あとで学生さんに恨まれるとか途中で卒研を放棄されるとか、とても残念なので。

 また、プログラミングしエラーもすべて解決したものの思い通りに動かない場合は、どう上手くいっていないのか説明してもらってソースコードみせて頂ければ、なんとなくどこが悪いかわかることが多いので、学生さんの横とか斜め後ろに座って画面みながら助言する状態になります(2020年度以降、コロナ対策でMeetやZoomの画面共有を活用する機会が増えました)

 デバッグについては、まともなデバッグツールの使い方を覚えるのが面倒なら、エラーでググれとか、print文で変数の値表示させてとか、初歩的なテクニックを伝えるほか、やっぱりこれも、隣からソースコード眺めて(または画面共有して)問題点を一緒に探し出すことになります

 ということなので、研究室にちょくちょく来る(またはMeetやZoomで話す)学生さんの方が有利になります。自宅や喫茶店に引き籠って作業すること自体を否定しませんし(特に単独テーマの場合)、私も実は喫茶店オフィスタイプです。しかし、詰まっている報告を「また明日でいいや」とか「来週でいいや」と先延ばしする学生さんは、どんどんデスマーチパターンになってくるので、研究室に来れない場合でも速攻でヘルプを求めることをすすめます

Q.Unityなどのゲームエンジンの使い方がわからないのですが……

A.私は、C#のコードをみて、上記のような手助けがある程度はできるかもしれませんが、Unityそのものの使い方は殆ど知りません。なので、使い方については私をあてにしないで頂きたいです。なにげに、前職場でUnity使う授業担当していましたが浅パチャでした。

Q.数学とか物理が苦手でも問題ないですか?

A.プログラミング同様、数字を見たり式を立てるのが「苦痛すぎて仕方ない」学生さんは困りますが、プログラミングほど致命的な問題にはならないです。ぶっちゃけ、これまで私が勤めた理工学系大学の学生さんでも、中学数学や数Ⅰや数Ⅱの内容を、研究活動中の課題解決に活かそうとすぐ思いつける人はほぼ0人です。言い方を変えると、私からの卒研お手伝いポイントとして多いのは、提案手法の定式化や、採用するアルゴリズムの選択部分です(システムの評価実験計画を煮詰めるところが一番のお手伝いポイントですが)。理科系大学の過去の卒論にしろ学会発表予稿にしろ、学生さんが自力で定義できた式はありませんでした。叩き台(多分こんな感じの式になるのでは? みたいなの)すら作るのが困難な学生さんが殆どでした。

 無料でみられる、本研究室の学生さんが執筆した学会発表予稿がありますので、その中の式をみて、「あぁ、この程度で大丈夫なのか」と理解して頂いた方が良いかもしれません。なにげに、これは後で直さないとな~みたいなのもチェックミスで……。

Q.数Ⅲやっていないけれど問題ないですか?

A.まぁ、殆ど問題ないです。単純に、本研究室で使うというか作る式なんて、中学レベル~数Ⅰ、数Ⅱくらいが殆どです。数学の問題集に載っている問題を解く力よりも、日本語を数式使って表現できる力が重要です。で、この辺は、今まであまり訓練されていないと思うので、すぐにできないからといって恥ずかしがる必要はありません。

 やや具体的な例をあげると、「お買い物する際にお店に支払う合計金額を求める式が必要だなぁ~」に対して、可能な限り一般化した式を、ある程度考えられるかどうかです。商品iの価格をPiとおく、商品iの購入個数をBi(∈N)とおく、商品一種類につきBiPiみたいになるから、Σで……みたいな感じで。

Q.そうはいってもガチなゲームAI関係の研究するには……

A.そりゃ、ユーザインタフェース系じゃなくて、そちらの方面をしたい場合は、結構お勉強が必要だと思います。国立大の理論系大学院生と闘えるようになるのが最低ランクみたいな感じでしょうか。ついでに言うと、学生さんがガチで勉強し続けたとするならば、途中から私では手助けできなくなると思います。というか、そうなってもらわないと困るかなぁと思います。私、別に数学が得意でもなんでもないですからね……。学科教員の半分が数学教員のところに勤めていたこともあって、とてもじゃないですが、数学ちょっとわかりますなんてとてもとても……。前職場の先生方、変態じゃないのか? 頭の中どうなってんの?? とか思います。凄かったなぁと。

Q.簡易AIみたいなのだったら……?

A.インタフェースの研究が中心でAIぽく見えるだけ、というのなら、まだ望みがありますが、AI関係は全体的に私自身の勉強が足りていないので、あまり手助けは期待しないで欲しいかなぁと思います。

Q.英語の力はどの程度必要ですか?

A.力があるに越したことはないですが、DeepLやGoogle翻訳その他「文明の利器を使って」英語の文献を読んで頂いて全然構わないです。プログラミングに対する拒否反応は不味いですが、英語の方はなんとかなります。まずは日本語の文献を読んで関連する知識を増やしてから、英語の文献を読んで内容理解できるようになる感じで。前職場の学生さんも、文明の利器をフル活用して英語論文の内容を理解して卒論に引用したり、国際会議で発表もしました。文法知識は、中学レベルで大丈夫かと思います。ごく普通に英語を苦にしない学生さん、資格試験などクリアしている学生さん、「英語使ってなんか発表したいなー」という学生さんがいれば大歓迎します

 なにげに私自身が、おそらくこの職業に就いている人間の中で全国最低レベルの語学力なので、困ることが……今更勉強するの苦しいです。