私の使う言語について

更新日時:

この記事を要約すると「教養学部前期課程の講義は Ruby で行われる(2017 年度まで)から、東大の学生は Ruby が初対面の計算機言語となる人は多く、そのまま Ruby を使い続ける人も多い。そして私もそうである」ということである。

前提:教養学部前期課程

東京大学教養学部前期課程には計算機の講義がある。必修の「情報」は大したことがない1ので置いておくとして、情報科学と図形に分かれる。このうち情報科学は次の 2 科目が選択科目として開講されている。詳しくはリンク先参照。

  • 計算機プログラミング I = 情報科学 = アルゴリズム入門 (1 年生冬学期)
  • 計算機プログラミング II = プログラム構成論 = 計算機プログラミング (2 年生夏学期)

私が履修したのは真ん中の「情報科学」「プログラム構成論」である。科目の名前が変わるだけでやっていることはほぼ同一である。上の方はプログラミング言語を取得して、代表的なアルゴリズムを学ぶ。例えば $O$ 記法や、計算機における様々な誤差、動的計画法などが講義される。大学の講義であるから、単にプログラムが書けるようになるだけでなく、計算機そのものの理解が重視される2。後者はデータ構造を中心の勉強する。線形リスト、スタック、キュー、木、ソート、文字列探索といったものである。基礎から講義されるが、最終的には「論文のエッセンスを…」などという実装もさせられる。これらの講義が前期課程の全学生に向けて開講されているのは、東京大学の大きな強みだと思う。

私が計算機でプログラムを本格的に書き、勉強し出したのは、この 2 つの講義である。そこで、私にとって大事だったのは、 どの言語を使って講義を受けたか ということである。 Knuth の TAoCP のような本はともかく、上記項目を普通に勉強をするなら何かの言語で実装をするのは避けられまい。そこで話を複雑化させているのが、実は上記科目は、開講時期により、勉強する言語が異なるということである。具体的には以下の通りである。

  • 「計算機プログラミング I」「計算機プログラミング II」は Java
  • 「情報科学」は Ruby
  • 「プログラム構成論」は途中まで Java 、途中から Ruby
  • 「アルゴリズム入門」「計算機プログラミング」は 2017 年度まで Ruby 、 2018 年度から Python

そして私は「情報科学」は Ruby で勉強し、「プログラム構成論」は Java で勉強した。ちょうどそのねじれの時期だったのである。

そして、時は過ぎ、修士課程 2 年の夏に「実践的プログラミング」で競技プログラミングの指導を受けた。この講義は教養学部前期課程の主題科目であるが、色々な人を受け入れてくださった。この時 C++ を金子先生が最初から教えてくださった。ここから本格的に(?)計算機にはまり、今に至る。

私が Ruby と C++ を書く理由

上記の変遷を経た私にとって Ruby は母国語のようなもの である。良きにしろ悪きにしろ、「計算機の言語はこういうもの」というイメージが未だにある。だから Ruby と大きくかけ離れた挙動をする似たような言語には、やはり違和感を覚える(別に否定はしない、単に違和感がある)。 Ruby については、今もあまりよくわかってはいないけれども、とりあえずやりたいことは Ruby を詳しく勉強すればだいたいできてきている。例えば Web アプリケーションを作るなら Ruby on Rails を使えばよろしいから、その勉強をした。

このような遍歴を持っている学生は東大には多かろう。大学生になり、情報教育棟で初めて mac を触り、計算機プログラミングをするならば、普通に考えれば上記の講義を受けることになる。したがって、人生初対面の計算機言語は Ruby という人はそこそこ多かろう。私より少し世代が上ならば Java になるわけで、今大学 1 年生の人は Python になるわけである。私に限らず、東大の学生にこういう傾向があることは、少しは知られていてもいいかもしれない。

C++ は、競技プログラミング用の言語だと思っている。詳しくは、難し過ぎてよくわからない。一応柴田先生の入門書は初級編と中級編を読んではいるが、大規模なプログラムを書くならば支障があるだろう。この辺はおいおい勉強していくことになるだろう。

  1. 一部の教員から怒られそう? 

  2. シラバスを見ると 2018 年度からは少々異なっているように思う。「主に大規模データ処理・シミュレーションを題材とし、プログラミングを通して問題解決・アルゴリズムの基礎を学びます」とある。 

コメントする