coding, photo, plant and demo

*情報工学でコンパイラを学ぶべきか

memo 20130623 174259
高専の友達と呑んでいた。

なんでそういった話になったか覚えていないが、情報工学畑の僕が
「大学の実験ページを見たらコンパイラ演習が無くなっていて驚いた。情報工学でコンパイラも作ったことないってどうなのよ?アカンでしょ」
と言ったところ、電気電子畑の友が
「そんなもの『電気科で8石スーパーヘテロダインラジオも作らないで卒業するのは許せん!』と言っている老害と同じ。やるべきことは時代で変わる。会社でも特定の技術に長けて成功した人ほど、視野が狭くなって老害化してほんと困る云々」
というようなことを言った。

ちょっと話は逸れるけど、家電メーカーでもあるよね。一度テレビで成功しちゃったが故に、赤字になってもテレビをいつまでも家電の王様と信じて作り続けちゃう、みたいな。バカは死ななきゃ治らない、って言うけど赤字事業でもそれに従事するエンジニアは超一級で、そもそもかつてテレビは最先端の花形事業であって、選り抜き天才秀才たちが集まった精鋭部隊なんだ。だから当然バカじゃないどころか、凄く頭が良い(人が多い)し凄く頑張り屋(が多いん)だ。けど赤字。なぜかって?それは技術力とビジネスってあまり相関がないからなんだ。技術的に凡庸な人が集まっていてもビジネス的に正しいことをしていれば儲かるし、逆にどんなに優秀な輩を集めてもビジネス的に間違っていれば金は消えていく。昔は世界を征服するかの如くの勢いだった企業が、今や沈没寸前になっているとする。それは何故か。大企業化して官僚化したから?安定性を求めるようになったから?一流大学の人間ばかりが集まって人材の幅が無くなったから?開発プロセスが古くなったから?どれも関係ない。官僚化しても儲かる企業は儲かるし、安定性を求めて盤石の体制を作り上げる会社もあるし、一流大学の人間ばかりで成長する会社も当然ある。その答えは単にやってるビジネスが時代に合わなくなったから。それに経営者が気付けないから。

もちろん、儲かっている会社は技術力が基本高いのだけど、それはどちらかというと儲かっているから技術力のある人間を雇えた、というのが正しくて、技術力が高いから儲かっていると捉えるのは間違い。鶏と卵ではなく、ビジネスが先。意味のあるビジネスだから資金を調達して優秀な技術者を集めることができる。


コンパイラ演習に関しては、実際は他のコマに移っただけで本当はまだあるのかもしれないし真相は知らない。ただ、情報系ならソフトウェアを動かすインフラとしての、プロセッサやコンパイラの基礎的な知識は常識として知っておくべきだし、そのためには演習は不可欠なのではないか、と思っていたけど、いざ真にそれは必要なのか?と問われると意外と悩ましい。例えば、何らかの情報システムを構築する場合、重要なのは仕様を決めてデータベースやネットワーク、UIをどう設計するかであり、データベースエンジンのVMやJava VMの仕組み、プロセッサのパイプライン構成を知る必要はない。道具としてどう使うべきかを知っていれば十分である。同様に、Webサイトを作っているエンジニアがカーネルを熟知する必要はないし *0 、カーネルのエンジニアがプロセッサの半導体プロセスを知る必要もない。同様に、大規模なシステムLSIを設計するエンジニアがスーパーヘテロダイン *1 のための詳細なアナログ回路設計について知る必要もない、のかもしれない。さて、コンパイラやプロセッサ設計はそれを専門にしない人が殆どだと思うが、これをどれほどのコストを掛けて情報工学科として習得すべきなのだろうか?

コンパイラもプロセッサもスーパーヘテロダインもどれも現在の文明におそらく不可欠な技術ではあるが、同様に不可欠な技術というのは無数にあるし、これからも増え続ける。基礎的な技術にさらに技術が積み重なって科学技術の体系は生い茂る。その全てを知るのは不可能だから現実に最も市場に必要とされるだろう技術領域を重点的に学ぶべきだ。果たしてそれが現在の情報工学において、コンパイラなのかと言われれば違うのかもしれないし、けど代わりに時間を掛けて演習すべき基幹技術は何か、というのもよく分からないよなあ。等とぼんやりと思った。
*0 : これはサーバサイドを入れると無関係ではないけど
*1 : そもそもLSIなら普通はダイレクトコンバージョンですかね

13.06.23 19:34 Tanaka
組込屋さんには必要じゃないですかね(そういう議論じゃないですが
情報工学のくくりが広すぎる気はします。
13.06.23 22:15 mtm
そーそー、情報工学というのが学問として広くなってるのもあると思う。
弱電と強電じゃないけど、うまく分割した方がいい気もする。

僕もそうだけど、組込みでアセンブラも読めなきゃいけない仕事だと、当然コンパイラの知識は欲しいよね。最適化とか考えると当然プロセッサのパイプラインとかの仕組みも知らなきゃだめだよね。って思いはするけど、冷静に考えて情報工学科卒でそういうのが役立っている人ってどれくらい居るんだろう?もっとも僕は学校関係なく、そういうの好きでやってたようなもんだから、気にしたことなかったけど。

あと大学は職業訓練所じゃないって話もあるけど、工学は少なくとも現実の問題を解決するための学問だからなー。情報工学において、現状どこが問題で社会に何を求められているのかを認識して、その打破に繋がるように資源を割くべきだとは思う。
13.06.24 12:50 anon
コンパイラの原理の学習と一緒に、字句解析・構文解析・構文木などの重要なアルゴリズム・データ構造を実地に応用しながら学習できることが貴重なのでは?
13.06.24 17:38 nigohiroki
仮に今回のテーマがコンパイラではなく、LISPの作成やn進カウンタだったらどうかな?
anonさんが言っているようにコンパイラはそれに関わる重要事項が多すぎる。
というわけで時代によって学ぶものが変わるというのには同意。
でもコンパイラは重要なのでなくさないべき。という意見です。
13.06.24 18:34 guest
情報工学で学ぶべきことは多すぎ。コンパイラ演習はなくても、少なくとも知識としては学ぶ(はず)コレを老害といって切って捨ててると本当に大学が学問をする場所じゃなくなっていくと思う。
13.06.26 01:04 mtm
そうなんです、コンパイラの学習には様々な重要な概念が必要ですし、情報工学出身者からすればやらなくてどうするの?って思うわけです。

ただ、情報工学って電子工学から生まれたわけですが、そこで情報工学はアナログ回路とは決別したわけです。FFも論理演算もアナログ回路で動いているわけですが、そこは無視したわけです。あまりにデジタル回路上でやることが増えたので、情報工学を新しく作って、アナログ回路を学ぶ資源をデジタル回路より上の概念に振った方が良いという判断だったんでしょう。

現在、アナログ回路をマスターしなくても情報工学は十分にやれると思います。同様に情報工学が応用範囲が広がっていくと、コンパイラの中身を知らずとも十分な分野が情報工学の中に現れるのではないか、というか既に現れている気もするのですが、そういうのって固定観念でなかなか認められないよなあ、自分含めて。などと思ったんです。

結局、科学に境界はなくて全部繋がってるんですよね。全部は一学科に詰め込めないから、それをどう取捨選択してどういうパッケージ群にするのが社会の利益を最大化するか。そういう問題だと思うわけです。
コメントする