はじめに

はじめに一言

私も何年か前は学生でどの分野を学ぼうか迷っていました.コンピュータサイエンスは数学や情報系の様々な知識が必要で学んでいく自信がなかったときもあります.しかし,すっかりその学問の面白さに魅せられて大学院に進学し大変な幸運の巡り合わせで大学教員として採用して頂いて今日に至ります.おかげさまで現在でもコンピュータサイエンスの勉強と研究を仕事として継続することができています.コンピュータサイエンスは役にたつ学問ではありますが,皆さんにはその理論の美しさや楽しさも是非とも味わってもらいたいと思います.

読書のすすめ

コンピュータサイエンスやプログラミング言語については自分から進んで書籍を読んで学んで欲しいと思います.ウェブページだけでなく,紙の本で読書をするようにしてください(2020年時点では圧倒的に紙の書籍がオンラインの情報より質・量共に勝っています).授業のテキスト以外は1冊も本を読まない,ということが無いようにしてください.まとまった時間に知識を体系的に学べるのは学生の特権です.是非,読書を習慣として欲しいと願っています.

コンピュータサイエンスの初歩

皆さんは1–2年次においてコンピュータサイエンスの分野の勉強をしてきました.例えば,アルゴリズムとデータ構造,プログラミング言語,コンピュータアーキテクチャ,数値計算,オペレーティングシステム,ソフトウェア工学,データベース,(人工知能,ロボティクス,人間とコンピュータ)といった分野の勉強をしてきました.研究室配属後にも京都大学の理系1回生(1年次生)向けの入門書[OhGN99][TaNH99]を配布します.入門書とは専門分野の前提知識がない人向けに書かれたおり,その専門分野の学習を始める際に読むのに適した書籍です.ゼミでもこの一部を用いて学びを深めます.

ゼミでは直接は扱いませんが,よりとっつきやすいコンピュータサイエンスの入門書としては次のものがあります. [Bier93]は,MIT(マサチューセッツ工科大学)の教養課程のテキストです.語り口がやさしく,理系向けのテキストよりも数学を前提としていません. [Kawa17]と[Yama17]は,東京大学の教養学部の文系理系の両方が対象の教科書です.古典的な良書と知られているものとして[GoLi00]があります.現代からすると記述がやや古風で読みにくいところもあるかもしれないので,初歩を学ぶための1冊目としてはお勧めません.

読み物として読めるものには[Saka02]があります.[IsMi17]は,基本的なアルゴリズムを絵で見て直観的に理解するのにおすすめです.

南山大学図書館における横山研究室の指定図書を利用してください.

文章の書き方

論理的な文章が書けるようになることは重要なことです.1年次に用いた 理工学基礎演習(後半)資料 をよく復習してください.このテキストに掲載されている問題の一部を,WebClassの「テスト/アンケート」の「課題 文の技術」という自習教材にしてありますので,満点になるように回答してください. 出版年が4半世紀以上前の1981年でありながら,現在も継続して売れ続け累計100万部出版された[Kino81]は理系の学生には必読書です.エッセンスを手軽に学べる漫画版[KiKu18]を先に読み始めてみても良いでしょう. 私が学生のときに文章の書き方を[Sugi01]の元となるテキストで著者である杉原先生に学びました. 卒業論文の書き方は[Naka10]も参考になります.理科系で共通するところが多いので分野や大学が違っても参考になる部分は少なくありません.

スライドの作り方は,京都大学学際融合教育研究推進センターの宮野先生が執筆された書籍[Miya09]の豊富な実例も参考になります.

LaTeX

本研究室ではLaTeXを使えるようにしておくことをお勧めします.理工学基礎演習で学んだ内容に加えて本分野でよく使うコマンドや慣習を学んでいく必要があります(cf. 2021年度「理工学基礎演習 [TS],[TM],[TD],[TC] 講義資料 南山大学理工学部におけるコンピュータリテラシ」の後半部分).

我々の分野の多くの論文誌や学術会議で,LaTeXで書かれた原稿を投稿することが推奨されています.例えば,情報処理学会,日本ソフトウェア科学会,電子情報通信学会といった学会の研究会やプレプリントサーバarXivにおいてLaTeXによる原稿の投稿が推奨されています.貸与ノートPCのVirtualBox上のUbuntuにはLaTeXの環境が用意されています.

LaTeXはこの分野の文章を記述するのに便利です.2016年度3年次生Q3の課題に対するLaTeXで作成したレポートの例を見てください(氏名だけ変更しています).このソースコードを見ることで書き方を学べます.複雑な数式やフォントの使い分けが多ければMicrosoft WordなどのワープロソフトよりもLaTeXを用いるのが便利です.過去の卒業生では8割がLaTeX, 2割がMicrosoft Wordを用いています.

LaTeXの開発環境としてクラウドサービス(例えば,Overleaf)も研究者に用いられるようになってきました.クラウドサービスならば手間がかかる環境構築が不要です.手軽に試すことができます.リアルタイムにグループで同一の文書をバージョン管理しながら編集するときに特に便利です.とりあえずOverleafに登録して試してみると良いでしょう.

LaTeXのクラウドサービスが使用できるようになってからはLaTeXの使用率があがっており、2019-2020年度は全学生がLaTeXを使用しました.2021年度は14名中13名がLaTeXを使用しました.

プログラミング

プログラミング言語OCamlを研究室の共通のプログラミング言語とします.2019年度の卒業研究において使っていたプログラミング言語はOCamlの他に,Python, Asymptote, MATLABがありました.2019年度のゼミで主に用いたプログラミング言語はOCaml, C, Java, JavaScript, PHPです.かつてはRubyもゼミで用いました.他にも研究用の小さなプログラミング言語Janus, R-WHILE, SRL, RL, Petitも扱いました.

OCamlは関数型言語の1つです(使う人をあまりみたことがありませんが,オブジェクト指向もサポートしています).プログラミング言語の処理系の制作にはとても力を発揮します. お茶の水女子大学 理学部 情報科学科 2年生用のテキスト[Asai07]やこのテキストを使った授業の資料で初歩を学ぶのも良いでしょう.

開発環境

テキストエディタ,ファイルマネージャ,ターミナルなどをはじめとする開発環境を整備し習熟しておくことはコンピュータサイエンスの研究を進める上で重要です.1–2年次に使ってきたテキストエディタのGNU Emacs,ファイルマネージャのNautilusやExplorer,GNOME端末を使い続けるので構いません.上級生は,GNU Make, gitなども使っていました.

Emacsを使用する場合は,Emacsのチュートリアルをやっておくこと.

情報環境の整備

  1. 【推奨】パスワードマネージャを使ってパスワードの管理をすること.1Password(有料)をお勧めする.Google パスワードマネージャ,iCloud キーチェーン,Microsoft Authenticatorでも可.
  2. 貸与ノートPCの調子が悪い場合は整えること。「Windows 10 のメモリ使用量を減らす」を参考にすること.
  3. Google Workspace for Education Fundamentalsのアカウント(例 19se000@yokoyama-lab.org)でログインして初期パスワード(学生番号になっている.例 2019SE001)を自分しかわからないパスワードに変更する.具体的には,Google Driveに 19se000@yokoyama-lab.org のようなアカウントでログインできることを確かめること.Education版のライセンスであり,教育研究に関することに使用すること.
  4. Overleafに登録する.LaTeXをクラウド上で編集するのに用いる.
    今後,文章を作成するときに,設定をする.
  5. githubに登録する.開発するソフトウェアのバージョン管理に用いる.organization「横山研究室」に登録してもらうこと.
  6. 横山研究室のSlackに大学のメールで登録する.研究室内のディスカッションに用いる.

以下のソフトウェアのインストールをすること。

1年生から学んできた内容を踏まえて,推奨する環境は次のとおりである:
Windows 10 + WSL2 (Windows Subsystem for Linux) の「Ubuntu 20.04 LTS,emacs,OCaml, BNFC, git」 + overleaf (LaTeX) + github

英語の辞書の購入

輪読,輪講,研究報告

3-4年生の演習(いわゆるゼミと言われるもの)では,理系の研究室で一般的に行われているような輪読・輪講,研究進捗報告を行っていきます.ときに講演会へ出席することもあります.基本的に講義を受講することはありません. 輪読と輪講は,それぞれ書籍と論文の担当部分を読み以下の内容をレジュメやスライドにまとめて発表をするものです.ホワイトボードを使うこともあります.発表者は,その当日の「指導者」であり「先生」になります.

  1. 内容の要約
  2. 補足説明(途中の式変形,数学的な補足,指定された書籍以外から補っても可)
  3. 疑問や理解できなかった箇所(理由や原因もあるとよい)

文献の一部のコピーアンドペーストだけで資料を作ったり英語の文献やスライドの全訳をするようなことはしてはいけません.ただし,定義や数式はむしろ文献にあるとおりにしてください.

研究進捗報告は,研究進捗状況の報告や研究討論を行うものです.こちらも主にレジュメやスライドを用いて発表をします.

対面授業の場合:発表担当者は,レジュメおよびスライドを事前に参加者の人数分のコピーを用意します.さらに,電子的なファイルを配布するとよいでしょう.スライドの印刷をするときは,1ページに6ページや8ページを割り付けるなどして,紙の節約を心がけてください.