サイエンスかエンジニアリングか
最近、エンジニアリングかサイエンスかという分類を教えてもらった。それが出てきたのはGoがエンジニアリングから出た言語だと言われた時だった。
その時私はRustを推していたのでRustはサイエンスから出た言語だと言った。
Goが出た時は「コンパイルの速いシステム記述言語」という触れ込みだった気がする。C++のコンパイルが遅いからGoを作った、ならエンジニアリングから出た言語と言える。 Rustは触れ込みがあった気はしないが代数的データ型やトレイト、リージョン推論(ライフタイム)などサイエンスの成果を反映している。サイエンスから出た言語と言って良いと思う。
サイエンスとエンジニアリング。この言葉を知ってから随分ともやもやを説明出来るようになった。
先のGoとRustの話に関連して。Goがここ15年のプログラミング言語の歴史を無視しているだとか、平ぺったい言語だとか言われるのを良く聞く。Goがサイエンスの成果をあまり取り入れなかったからだろう。 折しも関数型言語が流行っている今、サイエンス寄りになったエンジニアには物足りないのだと思う。
私が競技プログラミングをあまり好きになれない(※個人の感想です)のはあれがサイエンスの一部分を競技化したものだからだ、と説明出来る。何故かというと私が興味があるのはエンジニアリングだから。エンジニアの募集に競プロを使うのは違う気がしていたのもそこなんだな、と気付いた。プログラムの書けないプログラマがどの程度いるのか知らないけど少しずれてる気がする。
まあ、競プロが好きになれないのは他にも"コード"という広い意味の単語を競技プログラミングの意味で使ってるだとか私の好きな言語が使えないだとか勝てないだとかの理由もあるのだが。一応、補足しておくと私も競プロは競技としては楽しむ。
逆に、以前後輩にISUCONのことを説明したらサイエンスの大会と理解されたようだった。違う。あれはエンジニアリングの大会だ。多くのエンジニアが腕を競う。実際にやってみないとエンジニアリングで何十倍も高速化するというのが理解出来ないかったのだろう。
偶に院進を勧められることがある。理学部に居るし、普通なら院進する。特に父親は心配していた。その時は「なんとなく違う」と返していたが今ではちゃんと説明出来る。私がやりたいのはエンジニアリングだ。実際に手を動かさないと出来ない経験をしたい。エンジニアリングのためのサイエンスをやることはあるがサイエンスのためのサイエンスはしない。