明治大学 総合数理学部 先端メディアサイエンス学科 講師
五十嵐 悠紀(@yuki_igrs)
2004年度下期、2005年度下期とIPA未踏ソフトに採択された、、『天才プログラマー/スーパークリエータ』。日本学術振興会特別研究員(筑波大学)を経て、明治大学総合数理学部の講師として、CG/UIの研究・開発に従事する。プライベートでは三児の母でもある
明治大学 総合数理学部 先端メディアサイエンス学科 講師
五十嵐 悠紀(@yuki_igrs)
2004年度下期、2005年度下期とIPA未踏ソフトに採択された、、『天才プログラマー/スーパークリエータ』。日本学術振興会特別研究員(筑波大学)を経て、明治大学総合数理学部の講師として、CG/UIの研究・開発に従事する。プライベートでは三児の母でもある
実家に帰ってきて、父と話をしていた時のこと。50代半ばに差しかかろうとしている父が「最近、プログラミングをしているんだ」と言い出しました。
わたしの父は現在、会社役員をしていますが、もともと技術畑の人間で、専門はCADシステムでした。わたしが今研究している分野と非常に近い分野です。わたしの博士時代の指導教官は、父と20年来の仕事仲間だったりもします。
現場から離れて久しい父が、なぜまた突然プログラミングを始めたのか。今回はわたしが企業勤めの父から聞いた話をもとに、企業とアカデミアにおけるプログラミングの違いと、そこから垣間見ることができる、「一生現役エンジニアでいるために必要な心掛け」について書きたいと思います。
会社での父のプログラミングと、アカデミアに属するわたしのプログラミング。一番大きな違いは、「どこまで作り込むか」です。
アカデミアでは、研究のプロトタイプとしてプログラミングを行います。つまり自分が提案する手法がいかに新しいか、どのような動作をするかを「他人に見せてデモンストレーションする」ためのものです。そうではない人もいるかもしれませんが、わたしはそう割り切っています。アカデミアの研究者は基本的に一人でプログラミングをするので、そう割り切らないと、いつまで経ってもデバッグが終わらない、研究成果を見せられない、ということも多いからです。
よって、提案手法と本質的に関わりのない部分、世の中へのインパクトのない部分(既存のシステムなどに標準で組み込まれていて実装しても新しくない部分など)、実装に時間がかかりそうな部分などは、最初から実装せず除外してしまうことも多いのです。
例えば、私の作ったぬいぐるみのシステム『Plushie』だと、「左耳をコピーして右耳部分にくっつける」という機能はないですし、「左右対称に成形するモード」というのもありません。ワークショップをすると、これらの機能の要望はとても多いのですが、研究として考えた時には新しくないので、あってもなくても研究成果(論文が採択されるかどうか)には影響しない部分なのです。もちろんこのような機能は製品化する時には、重要な開発すべき機能として挙げられることが多いでしょう。
一方、会社で開発している父は、さまざまなケースに対応するように開発しています。また、速く計算させるための最適化も欠かせません。父のパソコンの画面にはVisual StudioにC++のコード。わたしが驚いたのは、それに混ざって書かれたアセンブラのコードです!!
(下図参照、コードは一部省略,モザイク箇所あり)
聞いてみたところ、父はC++で開発をしていた部分を最適化のためにアセンブラに書き下して処理を行ったらしいのです。しかし、処理能力としては大した違いがなくて、びっくりしたと言います。
父はメインフレーム時代から50万ステップものアセンブラを書いていたとよく自慢するのですが、なにせ久しぶりに行ったプログラミング。C++で書いたものよりも、アセンブラで書いたほうが圧倒的に速いはずだ、と思い込んでいたとのこと。ただ、想像以上にC++のコンパイラがとても優秀になっており、コンパイラがリリースモードで自動生成したアセンブラコードと、自らが書いたアセンブラコードを比較するとほとんど同じだったそうです。
人間の頭脳とコンピュータの最適化処理の戦いですね。ハードウエアの動きをよく知っていて、性能の良いアルゴリズムを作ることのできる、そんな人が優秀なSE(システムエンジニア)だと思っていましたが、コンピュータがその代わりをやってしまっているということで、ちょっと寂しいです。
ちなみにわたしはというと、アセンブラは情報科学科の授業で習い、授業の課題(レポート)としては書いたことがありますが、それだけ。すべてコンパイラ任せです(笑)。
父は、アルゴリズムはよく作っているようですが、自分自身が実装という面では10数年ぶりにプログラムを実装したそうです。何でも「手に職をつけるため」とのことで、退職後もプログラミングをするつもりらしいことが判明しました(笑)。
アメリカではエンジニアはエンジニアにしかならないことが多く、経営者は経営者として入ってきますよね。日本では―外資系では違うかもしれませんが、古くからある日本企業では―エンジニアが昇進していくと経営者になっていきます。
「現場から退いたらすでに現役ではなくなっている。たとえシステムエンジニアだったとしても、その後管理職だったがために、定年後、何もできない人になりたくない」
だそうです。定年後、なんだかんだ言って結局役に立つのはずっと現場だった人たち。35歳プログラマー定年説なんてものも世の中にはあります。しかし、「いつまでも現役でいようと思ったら、アルゴリズム、実装、どちらの能力も保ちたい」と話す父の話を聞いて、結局は努力・心意気が大事なんだなと感じました。
また、実装を自らやる利点として、「アルゴリズムを作っているだけではなくて、実際に実装も自分がすることで、アルゴリズムの問題点が見えてくることもある」ということを父は挙げていました。これは研究者のわたしとしても同じ考えで、頭の中でああだこうだと考えて納得してから実装に移るよりも、アルゴリズムを思いついたら実際にすぐ実装してみてしまうことで、アルゴリズムの問題点をクリアにしていく方針で研究しています。
わたしがコンピュータに興味を持ち出したのも父が毎週末仕事のために持ち帰っていたコンピュータ(Macintosh)をいじらせてもらっていたのがきっかけですし、メインフレーム時代の話、プログラミングの話、アルゴリズム、などの面白い話をたくさん聞かせてもらって育ってきました。
普段はイチ聞くと10返ってくるような話の長い父なので、最近はあまり仕事の話は聞かなくなっていたのですが、たまにはこういう時間も良いな、と思ったのでした。
撮影/小林 正(人物のみ)
NEW!
タグ