アイキャッチ

まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉

スキル

    社会人になったばかりの若いエンジニアの中には、一度この道に足を踏み入れたからには、自らの技術一本で身を立てていけたらという、強い思いを胸に秘めている人も少なくないのではないか。

    そう考えて今回、Rubyの父として知られるまつもとゆきひろ氏に、あえて「これからの時代に技術だけで生き残るには?」という偏ったテーマで取材を依頼した。返ってきたメールの冒頭にあったのが、次の一文である。

    「技術だけで生きるというのは幻想である」

    まずはその真意を聞くところから、取材は始まった。

    まつもとゆきひろさん

    まつもとゆきひろさん(@yukihiro_matz)

    1965年生まれ。筑波大学第三学群情報学類卒業。プログラミング言語Rubyの生みの親。株式会社ネットワーク応用通信研究所フェロー、一般財団法人Rubyアソシエーション理事長、Speeeをはじめとした複数社の技術顧問、Herokuチーフアーキテクトなどを兼任。松江市名誉市民。通称 Matz(マッツ)◆Matzにっき

    「技術だけで」という言葉の持つイメージと実体のズレ

    —— 本日はお忙しいところお時間いただき、ありがとうございます。さっそくですが、まずはいただいたメールにあった「技術だけで生きるというのは幻想」という言葉の真意、まつもとさんのお考えから伺いたいのですが。
    まつもとゆきひろさん

    「技術だけで生きるというのは幻想である」と語るまつもと氏。その真意とは?

    まず、多くのエンジニアは技術を使ってモノを作ることに興味を持っているでしょうから、エンジニアとしてその技術を追求したいという気持ちは分からないわけではありません。

    一方で、日本の場合はキャリアパスとして、ある程度の年齢になるとプロジェクトリーダーやマネジャーになってくださいと言われる流れがありますよね? マネジメントは多くのエンジニアにとって直接開発するよりあまり面白くないことでしょうから、マネジメントの方に行きたくないという気持ちも分かります。

    結果、「技術だけで~」と表現したくなるのは理解できます。

    けれども、マネジメントの方へ行かないからといって「技術だけで」生きているかというと、必ずしもそうではない。設計するためには使う人が何を求めているか把握する必要があるし、効率よく問題解決する方法を考えられる必要もある。

    エンジニアとして成果を出すためには周りの信頼を得ないといけない。もちろん「Javaのこのプログラムについては何も見なくても書けます!」という風に技術によって信頼を得ることもありますが、それだけで成り立っているわけではない。

    分からないことがあったら調べるための能力だったり、誰かに相談するためのコネクションだったりがあることも信頼につながりますし、普段から勉強して得た知識量や、痛い目に遭った経験が重宝されることもあるかもしれない。

    そのどれをとっても、単純に技術とはいえないですよね?

    日本語で「技術」という言葉を使う時には、あるプログラミング言語を使うか使わないかとか、あるテクノロジーのテクニックを使うかどうかとか、コンピュータに直結するようなことを連想しますが、ソフトウエア開発はそこだけでは終わらない。テクノロジーに関する知識だけでは測れないのが、優秀なエンジニアの特質だと思うんです。

    そういうことを踏まえた上で、ソフトウエア開発と「技術だけで」という言葉をつなげて考えると、「マネジメントがしたくない」という思いを満たす上で、違うものを示してしまう可能性があるのではないかと感じました。

    この言葉の持つイメージと実体のズレというのは、放置しておくと選択を誤ることにもなりかねない。そう思って、「幻想」みたいなちょっと強い言い方をしたんです。

    僕自身、マネジメントに行きたくないというのは最初からずっと考えていたことだし、モノを作ることからずっと離れたくないと思っていた。

    なので「技術だけで~」と言いたくなる気持ちはすごく分かるんですよ。ただ、それがキャッチフレーズのようになるとかなり危険ではないかと思ったんです。マネジャーにならないでモノづくりに専念するという時に必要な、かなりの大部分を落としてしまうような気がしたので。

    プレイヤーとして生き残るために必要な3つのこと

    —— それではあらためて質問させていただきたいのですが、モノづくりに直接的にかかわる形で生き残るためには、どんな素養が必要でしょうか?

    個人的に思いつくことは3つあります。

    1つは、自分が作ったモノがどんな影響を与えるかを想像できる力だと思います。

    「このソフトを使ったらユーザーの仕事なり生活なりがこんなにも良くなるに違いない」と思うからこそ、ソフトを作るわけです。このイマジネーションの能力こそが、エンジニアとして一番大事な力だと思いますね。

    世の中の多くのエンジニアは残念ながら、上司やお客さんから言われた通りに部品を作って、それを組み込んでいくという働き方になりがちですが、ある程度より上のレベルになるには、それだけでは十分ではありません。自分が作ったものの影響力、時には世界的なインパクトも含めて、未来を想像できる力がけっこう大事だと思います。

    次に大事なのは、新しいことを学んで自分で問題を解決する力です。

    新しい技術はどんどん出てきます。そうした中で、「私の強みはこの技術だから、これしかやりません」ではうまくいかないことの方が多いです。必要に応じて新しいものを学び、発生した問題を自ら解決していく姿勢が必要だと思います。

    ソフトウエア開発のかなりの部分は問題解決ですから、そのために学び、実践していくことが重要なのは当然です。ここで他の人に頼っているようでは、最終的に「あなたはいりません」となってしまう。生き残っていくには必要な能力でしょう。

    そして最後は、コンピュータサイエンスに関する体系的で基礎的な知識でしょうか。

    日々新しい技術は出てきますが、それは計算速度が速くなったとか、ネットワークが太くなったとかいった状況の変化によって、さまざまある技術の中で重要とされるフォーカスが変わってきているだけであって、コンピュータの基本的な原理原則というのはこの50年くらい変わっていません。

    だから、コンピュータサイエンスの基礎的な知識を持っていると、最新の技術が出てきても体系の中で理解できるので、非常に効率が良い。惑わされずに済むんです。逆に表面的なことだけを学んでいると、なかなか頭に入ってこないということがあり得ます。

    思いつくのはこの3つですね。

    若いころから裁量権を自ら求めていくことが重要

    —— では、その3つの力をどうやって身に付け、向上させていったらいいでしょうか? 例えば3つめのコンピュータサイエンスに関する体系的な知識は、コンピュータの発展の歴史を体感してきた上の世代と比べて、デジタルネイティブな若い世代の方が実感を得にくいというところはないですか?

    ゲームを例に話すと分かりやすいでしょうか。

    私が子供のころのゲームといえばピコピコと動くだけのシンプルなもので、それは今から見ればゲームとしてはすごくつまらないものですが、雑誌に載っている100行程度のプログラムを打ち込んで、よく自分で作ってみたりしていたものです。

    対して今の子供たちにとってのゲームは『モンスターハンター』であっても『ファイナルファンタジー』であっても、とても素人には手のでない世界ですから、自分で作ろうとは思わない。僕らの時代のゲームがちょっと頑張れば作れるものだったのと比べて、そのマインドの差は大きいです。

    だから精神的な参入障壁は大きくなっているかもしれないですね。そしてだいたいの場合、大き過ぎる夢というのは挫折する。そういう意味では不利かもしれません。

    逆に言うと、100行ゲームの面白さに気付いてくれるといいですね。人間、段階を踏まないと成長はしていけません。いきなり雲の上を見ていても「自分ができる」というイメージを強く持てないから、なかなか辛いですよね。

    私自身は高校に入る前くらいから小さなプログラムを作っていたし、大学でも研究をしていたので、届かない巨大なものがあったわけではない。そういう意味ではラッキーだった面もあります。

    —— エンジニアにとって最も大切と言われた想像力に関しては、どうやって育んでいったら良いですか?

    経験を積むしかないですね。たくさんプログラムを書いて、たくさんの問題を解決する。幸い、ソフトウエアを開発していると、やれバグが起きた、やれ仕様が変わったと、どんどんと問題が発生します。それを解決する中で、次第に想像力が身に付いていくのではないでしょうか。

    ただ、その時の態度として、言われたから直すというのではなく、積極的な関わり方が必要です。

    例えば、次に問題が起きないためにはどうすればいいか、お客さんに仕様に不満があると言われたのなら、不満が起きないモノとは何だろうかとか、そういったことを自分で考え、訓練することで身に付くのではないですかね。

    —— エンジニアによっては、大きなプロジェクトの一部分だけをやる立場の人も多いです。なかなか想像力を働かせたり、積極的な関わり方をしたりするのが難しい場合もあるのでは?

    もちろん立場によるところはあるでしょう。ただ、できないということはない。

    受け身で言われた通りにやることを繰り返しているのか、次はこうしようと自発的に動くのか。それが違いを生むんです。

    そしてもう一つ、仕事や会社を選ぶ段階で、そういう状況に陥らないよう、自分の裁量が多くなるようにという観点で選ぶというのはすごく重要なことです。

    目先の待遇や安定性を求めて大企業を選びがちですが、小さい企業だったら自分の裁量は増える。長い目で見たらそっちの方が得ということもあり得ます。

    この業界で働いている人からは、いろいろと辛い話を聞くことはありますよ。ただ、ひと口に「辛い」と言っても、自分の責任のないところで理不尽な理由で辛い思いをするのと、積極的に関わってそれでも辛い経験をするのとでは、意味合いがだいぶ違うのではないでしょうか。若いころから裁量権の多さを自ら求めていくというのは、けっこう重要なことだと思います。

    その観点から実践してきた私の処世術は、「何でも言え」というものです。相手が上司であっても、これはダメだと思ったらダメだと若いころから言うことは言ってました。扱いにくい部下だったと思いますよ(笑)。

    —— 誰が言っても許されるものですか? それはまつもとさんに上司に有無を言わさない圧倒的な技術力や仕事の成果があったから成立したのでは?

    まあ、言うのはタダですからね(笑)。とはいえ、自分の都合だけで言っているわけではないということを分かってもらうのは大事なことです。

    自分の立場からだけ言う一面的なことではなく、上司の立場に立ってみても損にならないなら、声を上げていいということ。自分の都合だけで「こうした方がきれいだから」とか「後々ラクになるから」とか言っても、「でも開発は半年遅れます」では上司の立場で聞けるわけがないですよね?

    その積み重ねの末、うるさい奴だけれど意味のないことは言わないと思ってもらえれば、少しずつ自分の裁量は大きくなるのではないでしょうか。

    ただ、誰もがその方法でうまくいくと言い切れないのは、私が最初に入ったソフトウエア開発の会社は新卒同期が200人くらいいたものの、大学でコンピュータサイエンスを勉強していたのは私を含めて6人しかいなかったんです。だから知識がある分、尊重してもらえたという側面はあったと思います。

    その後2回転職を経験していますが、裁量権、自分の意見を聞いてもらえるかという点はいつも意識していました。他の誰かではなく私が仕事をする意味というのを考えていましたね。

    「プログラミングをつまらないと思う人たちはもういいよ」

    まつもとゆきひろさん

    あらためて、「プログラミングは楽しいんですよ」とまつもと氏

    —— 仕事を決める上では、他の人の「逆を張る」ことも意識されていたそうですね。

    生活の安定を考えたら大企業に勤めた方がいいし、私が就職した20数年前はITの仕事がやりたいと思ったら東京の大企業というのが普通に考えてたどり着く結論でした。

    でも東京には住みたくなかったし、さっき言ったような理由で大きい企業も嫌だった。それが結果としてプラスに働いたことはあったかなと思っています。

    東京にはたくさん仕事があるからという理由で東京を選ぶ人がいる。他にもよくあるのは、「●●という技術を選ぶと求人が多いから」という理由で取り組む技術を選択するケース。働く地域にしても分野、職種にしてもそういった「多いから」といった理由で選びがちですが、自分ができる仕事は一つだけ。だから一つあればいいんですよ。

    希少価値がある方が値段は高くなるわけだから、少ない方がむしろいい。求人数が多いということは他の人もみんなそこへ行くということだから、希少価値はない。そんなに自分を安売りする必要はないでしょう。

    —— 他の人と違う道を歩むことに対する不安はなかったですか?

    なかったですね。そういうことに鈍いタイプなんでしょう。日本の学校の同調圧力が辛かったくらいですから。

    周りを見ていると、確かに他の人と同じことをしないと不安に感じるという人が多いみたいですね。自分はどうやらそこの回路が切れていたようで。だからこそできたことがあるのかもしれません。

    —— 一方で企業側も採用目的で技術選択をすることがあると聞きます。本筋からはやや逸れるかもしれませんが、そのことについてはどうお考えですか?

    技術者個人も企業側も、どちらもすごく固定化しているという印象ですね。日本の求人市場は、何も知らない新人をその企業が望む色に染めるか、「自分の得意な技術であればやります」という人が条件に合ったら採るかのどちらかしかない。

    実際は必要が生じたら何でも学ぶというのが正しい姿じゃないですか? そして大概の人は、それまでやったことがなくたって学べば分かるようになる。どうも実体と違う思い込みが横行しているような気がします。

    —— そこで2つ目に挙げていただいた、新しいことを学んで自分で問題を解決する力が試されるというわけですね。この能力はどうやって磨いていったらいいですか? やはり自発的な姿勢がカギとなりそうですが。

    例えばJavaを学んでくださいという状況を与えられたから学びますという態度だと、そういう環境に行かないと学ばないということになってしまいます。誰かから「こういうことはできないですか?」と聞かれたって、「それを学ぶ機会はありませんでしたので」で終わってしまう。

    エンジニアであるのなら、積極的に勉強するとか、新しい技術に興味を持つとかいうのは自然とできることだと思いますけどね。そうでない人というのは仕事として渋々やっているわけで、できれば勉強もプログラミングもしたくないのでしょう。お金さえもらえれば、エンジニア以外の仕事であっても特に変わらないわけで。

    でも本当はプログラミングってすごく面白いんですよ。何が面白いかって、例えば使っているソフトに気に入らないことがあったら、すぐにカスタマイズして自分の思い通りにすることができる。

    時には何か間違いがあって思い通りに動かないこともあります。でもそれを直すことで問題解決が起きる。

    問題解決ってすごく面白いですよね? 新聞に載っているクロスワードパズルとか、何がもらえるわけでもないのにみんな解くじゃないですか。人間は本来、問題解決が好きなんですよ。プログラミングをしているとそれが毎日現れる。それがすごく楽しいんです。

    そう思ったら自然と学ぶだろうし、より効率的に問題解決ができるよう、自分を磨くはずです。逆に言うと、そう思えない人はプログラミングしないでいい時代が来てほしいなと思っているんです。

    全員がプログラミングを楽しいと思えるわけではないというのは、私も経験的にもう分かっています。より少ない人数で、より効率的にソフトウエア開発ができたら、やりたいと心から思う人たちだけでできるようになる。やりたくない人の首に縄をつけて引っ張る必要はもうない。

    Rubyを作っているのも究極的に言うと、効率よく生産性よく作れるようにすることで、「プログラミングをつまらないと思う人たちはもういいよ。僕らだけで作るから」、そう言える世界を作りたいと内心で思っているからなんです。

    —— となると、最近盛んに議論されている学校でのプログラミング教育を必須にしようという動きに対しては真っ向から反対の立場ですか?

    そういうわけではありませんよ。

    現時点だと、プログラミングに興味を持つ入り口が、たまたま雑誌から入ったり、お父さんが教えてくれたりといった限られたものしかありません。仮に授業があったとすると、より多くの人にリーチして、その中からは一定数のプログラミングのことを面白いと思える人が出るでしょう。そういう人は一緒にやろうよ、関心が持てないという人はどうぞ別の道へ行ってくださいということです。

    全員がプログラミングできて当たり前とは思っていません。入り口としてのプログラミング教育ということですね。

    内なる衝動でドライブしているか

    まつもとゆきひろさん

    内なる衝動でドライブしているか?とまつもと氏は問いかける

    —— まつもとさんが社会人になりたてのころに意識して取り組んでいたことが他にもありますか?

    できるだけ仕事を早く終わらせて、自分の環境を整備する時間を作るようにしていましたね。世の中には開発のためのいろいろな道具がありますが、どれがいいのかは試しに使ってみないと分からない。仕事の空き時間ができるとすぐに、どちらのツールがいいのか比較検討したり、ないなら自分で作ってみたりということをやっていました。

    そうやって効率化して作った時間を使うことで、仕事と並行してRubyの設計も行っていたんです。もはや時効だから言えますが、仕事は通勤時間で終わらせてしまって、会社に着いてからはずっとRubyのこと、という時期もありました。

    就職自体はバブル末期で非常に良かったのですが、入ってすぐに崩壊したので、ボーナスはなくなるし、大変なこともありましたけどね。

    —— そうなるとせっかく作った環境も思い通りにならないんじゃないですか?

    逆ですね。私の仕事は社内で使うツールを作ることだったんですが、お金が入らないのでチームは解散。私はメンテナンス要員として残されましたが、やることはトラブル対応と言っても電源を入れ直すくらいのこと。だからむしろ空いた時間を使ってRubyのことをやれるようになりました。

    人によっては同じような環境に置かれたらやる気をなくす人もいるかもしれませんが、私は自分のためのプログラミングとか、やりたいことがいっぱいあったので楽しく過ごしていましたよ。今ほどコンプライアンスは厳しくなかったですし、クビにはならないから、ある意味で理想的とさえ言えますね。

    私の場合は常にやりたいことがあって、「一つ終わったから、さて次は何をやろうか」と改めて考えるようなことは一度もありませんでした。一番大きなテーマはプログラミング言語。Rubyもその一つです。それをどう使うかとかいった周辺のことも含めると、その関心は過去30年変わりません。

    私の場合はモチベーションがプログラミングそのものに近い部分に向いているので分割できませんが、中にはアプリを作って世界を変えたいというところに情熱を注いでいて、その手段でしかないプログラミングは特に好きではないという人もいるでしょう。それはそれでいいのではないかと思っています。

    いずれにしても、自発的にやりたいことがあるから足りないことを勉強する、この部分を高める、といった内なる衝動でドライブしているというのはいいと思いますね。逆にお金によってドライブしているとかなると、けっこう辛いと思います。

    —— それにしても30年間ずっと変わらず自分をドライブできるものに出会えたということは素晴らしいことですよね。出会える人と出会えない人の差ってどこにあるのでしょうか?

    興味深いと思うんですけど、私自身はあまりにも早い段階でそれに出会ってしまって、嫌だともつまらないとも思ったことがないので、やりたいことが分からない人の気持ちを察して一般化するのは難しいです。

    ただ、自分がやりたいことがはっきりと分かっている人というのは、俗っぽい言い方になってしまいますが、やっぱり輝いて見えますね。自分を絶えず高めようとする方向へドライブするような内発的な動機が見つかるまで、頑張って探し続けるほかないのかもしれません。

    「技術だけで生きる」ことを考えるような人はすでにそれと出会っている人たちなのかもしれないですが、そういうものを日々の生活の中で忘れてしまうというのもよくあること。こういう機会に思い出してもらうというのも、意味のあることかもしれません。

    —— 非常に貴重なお話をありがとうございました。

    取材・文・撮影/鈴木陸夫(編集部)

    Xをフォローしよう

    この記事をシェア

    RELATED関連記事

    RANKING人気記事ランキング

    JOB BOARD編集部オススメ求人特集





    サイトマップ