プログラムの気持ちになって考える

午前中は自然言語処理の授業。毎回最初の30分は講義をして、あとの1時間は解いてきてもらった課題について説明してもらうスタイルである。課題を解かずに参加する人もいたのだが、授業に出る時間があったら手を動かして課題を解いてほしい、と伝えたところ、正しく課題を解いてくれるようになったので、喜んでいる。結局人の話をいくら聞こうが、やらないと身につかないのである(身につけたくて授業に出ているわけではなく、単に自然言語処理のトピックについて聞きたかっただけの人もいるかもしれないが、そういう人は今年度は対象外)。

お昼から SLP(自然言語処理の教科書)の勉強会。意味論に関する章である。意味に関する章に突入した瞬間、英文が一気に難しくなった気がしたが、何章か読み進めてみると段々慣れてきた。来年度入学する人は、最初からこのあたりを読むと面食らうかもしれないが……。

午後は学部4年生の特別研究(いわゆる卒論)の発表申し込み。とはいえ、今年の4年生は全員言語処理学会年次大会で発表予定なので、それをそのまま流用でき、サクッと終わらせる。英語のタイトルは外に出ないと思ってチェックしなかったが、一覧で見ると出てくるな……。チェックしたほうがよかっただろうか。

夕方は言語処理100本ノックの質問を受ける。自然言語処理のプログラムを書くとき、計算機の気持ちになれるかどうか、というのがポイントのように思うのだが、ある処理をしているとき、計算機からはどの情報がアクセスできるのか、というのを意識するのは、言語処理でなくても大事だろう。プログラムを書く側は、全ての情報にアクセスできるつもりになりがちだが、全くそうではないわけで……。(松本先生がよく「この単語、この段階ではここまで見えてないので、こっちに係りたくなるやん」とおっしゃっていたが、その気持ちがいまはよく分かる)

話は変わるが、プログラミングを勉強するとき、具体例がないと理解できない人が一定数存在するようである。具体例があれば理解できるだけましだと思うのだが、どうやら抽象的な思考ができないようで、どうすれば抽象的なプログラミングができるようになるのか、思案している。抽象的な思考ができないということは、自分で書いたプログラムでも、再利用可能に書いたりせずひたすらコピペを繰り返す、ということである(他人のプログラムをコピペするのと自分のプログラムをコピペするのは、どっちもどっち)。

そういうわけで遅ればせながら研究室内でも SICP(プログラミングの教科書)の勉強会を始めてみたが、学部2年生の前期くらいでこのあたりを一通りやっておいたほうがいいような気がする(今のカリキュラムでは、学部3年生後期になってしまっているが……)。優秀な学生は学部3年で聞いてもあっという間にできるようになるのだが、人によってはこういうメンタルモデルを習得するのに時間がかかるので、低年次から聞いておいたほうが見通しがよいかなと思うのである。

夜は言語処理学会の年次大会関係のお仕事。今週木曜日に半日かけてプログラム編成をするので、その準備である。1年のうちほとんどは仕事がないのだが、この時期は〆切がタイトな仕事が集中するので、神経を使う。去年は2年目の委員の方々がほとんどの作業をしてくださったのを横目で見ているだけだったが、今年は自分が2年目担当なので、やるべき仕事を着々とこなす必要がある。2月上旬までで我々の担当の仕事は一区切りの予定だが、それまでしっかりと取り組んでいきたい。