回路」タグアーカイブ

枯れる分野と研究生活

私がまだ小学生や中学生だった頃,未来は非常に明るいもののように感じられた.その頃は自分がおとなになったときに,どんなことをしてるかは漠然としていたけれど,それでも将来の自分に対する夢と希望であふれていたように思う.ところが大学に入り周りの状況を知るに連れて,世の中がそれほど甘いものではないことを徐々に理解していった.

枯れる分野と研究室選択

一応忠告だが,これからする話はあくまで工学部の情報系に限ったことである.他の分野でどうであるかは,その分野によりすぎるところがあるので,参考程度に留めるように.

研究分野には,当然人気がある分野とない分野がある.今の流れで言えば,人気がある分野は,例えば画像や音声などのマルチメディア系であり,人気がない分野は例えばプログラミングの型システムや,デバイス系などだろうか.実はこういった画像系や音声系などの人気のある分野は,重箱の隅をつつくような地味な研究テーマを扱っていることが多い.今でこそディープラーニングで賑わっているものの,それより少し前はやることに意味があまり見いだせないようなことをやっていることが多々あった.これは,人気があればあるほど研究が進んでしまうために,やり尽くされてしまう傾向があるためだ.アカデミックの世界では既存研究がすでに存在することはやっても意味がないとみなされるため,分野が発展にするに連れてどうしても苦しくなる.そして苦しくなれば苦しくなるほど,重箱の隅をつつくような研究が増えていく.こういった研究は,大抵の場合,やってる側としてもつまらない事が多く,またつまらない研究はインパクトも大したものではないことがほとんどである.しかし,こういった状況はよほどの革新がない限り改善されることはないため,ジリ貧状態は悪化する一方だ.もしジリ貧状態から本当に脱却したいのであれば,異なる分野にシフトするかない.

大学の学部生の段階では,上記のような,分野によってはやることがないくらい堀尽くされていることがあることをよく知らないため,研究室選びのときに,単に面白そうという理由だけで選択することになる.面白くなさそうな分野をやるのは,苦痛にしかならないことがあるため,当然,面白そうな分野を選択するべきなのだが,だからといって本当に面白いことができるかどうかは別問題である.実のところ,入るべき研究室とは,
– 分野が枯れておらず
– 先生が人としてまともで
– それなりに興味が持てる分野
という三拍子を揃えているところをいう.そして,当たり前だが,この3つの要素を満たしている研究室というのは一握りしかない.それ以外の大多数の研究室は,致命的な問題を多く抱えているのが実情なのだ.特に,その先,研究者として生きていくことを考えているのであれば,トップカンファレンスや高インパクトファクターのジャーナルに論文を通していることも重要となってくる.しかし,今の時代,流行に乗った分野かつ,まともな指導教官などそうそういるはずもなく,理想とは一転して暗い研究室生活を経験するのは理系大学ではありふれたことである.

完璧とは絶望だヨ。

サブタイのセリフを知っている人は多いだろう.これはBLEACHの涅マユリの有名なセリフの一つだ.BLEACHの作者である久保帯人が科学についての知識があるとは思えないが,この「完璧とは絶望だヨ。」は科学のある側面を絶妙に捉えている.分野にもよるだろうが,特に工学は人にとっての利便性が最も重要視されるため,研究が進むに連れ,ほとんど完璧とでも言える状態になってしまう事がある.そうなると,研究する意味がほぼ皆無になってしまい,その分野で食っていくのが絶望的な状態になってしまう.例えば,通信路における符号理論,ネットワークセキュリティ,回路設計における論理回路や回路アーキテクチャの研究は大部分がやり尽くされた感があるように思う.加えて,世の中がこれほど便利になったのは,様々な分野が彫り尽くされたことの裏返しなのだから,上に上げた以外にも多くの分野がやり尽くされてしまっているのではなかろうか.

実は物理学の分野でも,このように言われた負の時代があったようだ.大昔,ギブスという有名な物理学者がちょうど学生だった頃,物理学では,まだ量子力学と相対性理論が知られておらず,すべての事象はニュートン力学で書き表されると考えられていた.ニュートン力学では,初期状態として位置と運動量(速度)が与えられれば,あらゆる物体の挙動が一意に定まるという性質がある.そのため,当時はラプラスの悪魔という,世界は実は生まれた直後から将来どうなるのかが全て決まっているという考えに支配されていた.そのため,物理学をそれ以上,研究することに意味があるとは考えられておらず,当時成績優秀であったギブズが物理を専攻した際には,周りに物理学なんてやめたほうがいいと促されたという話が残っている.しかし,その後すぐに相対性理論と量子力学が主にアインシュタインやボーアによって切り開かれることで,そんな負の時代から一転,黄金時代に移り変わったのだから皮肉なものである.

企業で働くという考え

すでに述べたとおり,面白そうなことほど研究が進むため,現状残っている研究課題が面白い内容である保証はまったくない.特にお金になる分野は,企業が一気に投資して研究を進めるため,大学の研究者はジリ貧になりやすい傾向がある.

数学の分野では世の中の問題がすべて解かれることはないことを次のように説明する.すなわち,今の世界に残された問題の数は明らかに加算無限個存在するが,人間がいくら頑張っても永遠にとき続けることは不可能であり,したがって,世の中のすべての問題がとき終わることはない.これは確かに数学では真だろうが,他の分野ではおそらくそうではない.どうしても先行研究があると論文にならないという性質上,ジリ貧になってしまうものである.

面白いことがしたいのであれば,あえて研究者になるという道を選ぶ必要はない.もっと手っ取り早く面白いことをする方法として,企業で働くという選択肢もある.大企業に行ってしまったら,面白いことをするという目的はほとんど叶えられそうにないが,ベンチャーや起業などを行えば,比較的望み通りの結末が得られるのではないかと思う.

内容についてどう思いますか?
  • いいね (5)
  • だめ (0)

関数型言語に関して思うこと

ここ最近というわけではないが,関数型言語に関する話題をよく目にするようになったような気がする.何を持ってして関数型言語であるかというのは非常に悩ましい問題ではあるが,おそらく最も古くに生み出された関数型言語がLispであろうことを考えれば,関数型言語の歴史は非常に古い.それに対して,世の中のコンピュータの基盤であるOSなどの低レイヤを支えるc言語がLispより20年近くあとに生み出されたことを考えれば,c言語やその影響を受けた後続の言語(JavaやLLなど)がいかに新しいかがわかるはずだ.

私はもともとc言語からプログラミングを入門し,次にC++を学び,Java,Pythonと進めてきた.特にC++に触れてきた時間は非常に長く,プログラミングの思考回路がC++をもとに組み上がっていると言っても過言ではない.したがって,初めて関数型言語に触れたときは強い隔たりを感じた.特に違和感を感じたのは,関数型言語の記述がアセンブリから完全に乖離している点だった.CやC++などの手続き型言語が,何をしたいのかを書くのに対して,関数型言語が何が成り立つのかを書くというのはよく言われる話だが,コンピュータの根幹をなすアセンブリ言語が前者の立場にあることを考えれば,関数型言語がそのままの形では全く相容れないことは明らかである.

ではなぜそのような関数型言語が今になって注目されているのだろうか.その一つの答えは,関数型言語を支える非常に強力な仕組みである型システムが,プログラムの記述を簡単にし,更にはバグさえも防ぎ得るということにあるではないだろうか.そもそもc言語やそこから派生した言語は,人間がミスをすると簡単にバグが挿入される可能性がある.これは例えれば鋭いナイフのようなもので,その切れ味をうまく活かせれば大抵のことは効率よく行うことができるが,使い方を誤れば自身を傷つけてしまう諸刃の剣となる.これはc言語の前身であるB言語の更に前身であるBCPLの哲学である

BCPLの哲学は、最良を知ると皆が考える暴君がいるのではなく、何が許されて何が許されないのかという決まりが定められているのでもない。どちらかといえばBCPLは、たとえ明らかに馬鹿げた事態に直面したときでさえ、不平を言わずに自らの能力を最大限に活かしてサービスを提供せんとする召使いとして振舞う。彼が何をしていて、細かい制限に制約されないということを、プログラマーは常に理解しているものと考える。
「BCPL, the language and its compiler」より

にあらわれている.これはプログラマが過ちを侵さないという絶対の信頼のもとで成り立っている.しかし,実際にはそのようなことは絶対にありえない.むしろ世の中にこれほど人為的ミスとしてのバグがはびこっているのは,人間がそこまで賢くないことを示唆しているのではなかろうか.

さて,人の書くプログラムには絶対にバグが入り込むと考えたとき,これを防ぐためにはどのようにしたら良いだろうか.関数型言語における,この問題に対する答えはバグが入り込む可能性があるような書き方は,そもそも許さないというものである.関数型言語では,関数の副作用を極力許さないことと,型に基づいた統一的な記述により制約をかけている.このような制約は,動的型付けであり副作用がてんこ盛りのLLから見れば,非常に強いものだが,バグを防ぐ上では非常によく機能することがわかっている.

ある言語が,手続き型言語と関数型言語のどちらであるかは程度の問題であって,完全な線引があるわけではない.pythonやperlなどであっても記述の仕方によっては関数型言語のように書くことができるだろうし,LispやOCamlでも手続き型言語のような記述ができるはずである.しかし,言語のサポートによって関数型言語として代表されるような記述がどこまで可能であるかが変わってくる.特に大きな線引は高階関数が扱えるかどうかではないかと思う.関数型言語が特に流行りだした頃から,多くの言語でラムダ式(無名関数)をサポートするようになったが,部分適用が言語レベルでサポートされているのは殆ど見たことがない.しかし,関数型言語にとって高階関数が無くてはならない存在であることを考えれば,これをサポートしていない多くの言語は一般には関数型言語とは呼べないのではないか.

とにかく,高階関数はもちろんとして,完全に純粋すなわち副作用を持たない言語としてHaskellが有名である.Haskellのすごいところは,その徹底ぶりにある.多くの関数型言語は,副作用を全く持たないことを保証できていない.これはおそらく,利便性の観点から完全に副作用を除外すると,非常に書きづらくなる恐れがあるからではないだろうか.画面に文字を表示するということですら,簡約のやり方によっては表示の順番が変わってしまう恐れがあるため,そのままでは副作用は避けられない.しかし,Haskellではモナドを用いることで,理論的にも妥当なやり方で副作用を追いやることに成功している.さらに,Haskellは遅延評価を用いることで便宜的とはいえ,加算無限の概念を記述することも可能である.Haskellのすごいところは,そういった,一見達成困難なことを理論的に美しい方法で,コンピュータ上の実装のレベルまで落とし込んでいる点にある.これにより,Haskellは数学と非常に相性が良い.特に関数型言語の利点である,性質を記述することでプログラムが可能であるという点がうまく引き出されており,これは数学の式の記述に非常に近いものになっている.

ここまで思ったことをつらつら書いてみたが,あまりに何も考えてなさすぎてとりとめのないものになってしまった.とにかく,最後に私が言えることは,関数型言語を全く知らない人はどのようなものかを一度勉強してみるべきだということだ.そこには,手続き型言語だけでは感じることができない,理論によって整理されたきれいな世界が広がっているのだから.

内容についてどう思いますか?
  • いいね (2)
  • だめ (1)