2024.10.21
お互い疑心暗鬼になりがちな、経営企画と事業部の壁 組織に「分断」が生まれる要因と打開策
リンクをコピー
記事をブックマーク
まつもとゆきひろ氏(以下、まつもと):遠い未来について考えてみた時に、25年先って本当にわかんない。私もおじいさんになってるか死んでるか、どっちかしてるんで、よくわかんないんですけれども。
開発効率と保守性の向上が求められる点と、それから、大規模分散環境についての要求がもっと高まること、非均質計算環境というものがもっと広がる、って思っています。これについて考えていかなくちゃいけないな、と思ってます。現時点で私が予想できるのは、これが精一杯なんです。
開発効率と保守性の向上という意味では、Javaとか使っていらっしゃる方は、今でもIDEという統合開発環境をお使いになって、そういう開発環境の支援で開発してる方が非常にたくさんいらっしゃると思います。名前のスペルミスとか、この式に対してどんなメソッドが呼べるかみたいなことについては、コンピュータに教えてもらいながら開発してるという人が多いと思いますね。
ただ、Rubyはそういう静的な情報が少ないので、RubyのIDEがあっても、そういう情報を提供するのはなかなか難しいというのが正直なところだと思います。Rubyの静的解析ツールにはRubyならではの難しさがあるので、今までにはないような新しい、動的型言語に対して情報を集める技術が開発される必要があります。
今でもあるのは、例えばRubocopみたいな静的解析をしてスタイルガイドをするようなソフトです。それから、他の言語ですけれども、Success basedというアルゴリズムによって、静的な型推論を行うようなDialyzerというソフトもあります。さっきのJetBrainsのプログラムのように、実行時の情報を集めて、それを型情報として活用する、プロファイル型の解析みたいなものも登場してきています。
こういうものや、これから開発する新しい技術も含めて、未来のソフトウェアの開発は、もっとインタラクティブになっていくんじゃないかな、と思います。ですから、私たちがタイプミスをすると、なんか吹き出しがあって、「もしかしてこれではありませんか?」みたいなことを、もっと積極的に言われるんじゃないかなと思います。
あるいは、開発環境に対して、ペア・プログラミングAIみたいなものがあるんじゃないかな、と思ってます。テディベア・プログラミングというものがあって、ソフトウェアを開発する時に、隣にテディベアを置いておくんです。すると、もちろんテディベアはしゃべらないし、助けてくれないんですけれども、なぜか生産効率が上がるという都市伝説じゃないんですけどあって。実際、効果があるんですね。みなさんもぜひ、今度ソフトウェア開発をする時に、隣にテディベアを置いていただけるといいんじゃないかな、と思うんです。
何かというと、「このコード、これでいいと思う?」とか、テディベアと相談するんです。もちろんテディベアは返事をしてくれないんですけれども。ただ、発話して、会話のようなものをする時に、問題がわかるんですって。「あー、やっぱダメだったね。直そう、直そう」みたいな。たとえ返事をしてくれなくても、そういう対話というのは、実に人間の思考を支援してくれるツールなんですね。
そういえば、ちょうど25年前ですけれども、Rubyをつくっている時に、私の一番上の子どもが、生後半年ぐらいでした。すごく夜に寝ない子だったので、ソフトウェア開発で家に帰ってきて、夜中の12時とか1時とかに、子どもを寝かしつけるために、「寝ないなあ」とか言いながら抱っこしてたんです。その時に、「今度デザインするRubyのこの機能なんだけど、どうしたらいいと思う?」(笑)。
(会場笑)
そうすると、いいアイデアが浮かぶんですよね。Rubyのすばらしい機能としてたくさんの方にほめていただいたブロック機能なんですけれども、あのブロックがあの文法になったのは、子どもと相談しながら開発した時に誕生したんです。
たぶん未来は、もうちょっとテディベアが賢くなって、いろいろなリアクションも取ってくれるようになるんじゃないかと思います。さらに言うと、未来のコンパイラはテディベアが付いてくるんじゃないかな、と思うんです。
(会場笑)
25年後にはそういうかわいらしいコンパイラ、あるいは、開発環境が、Rubyにとっても一般的になっていくんじゃないかな、と思ってます。
さらに、世の中、だんだん分散になってきてるわけですけれども、コンピュータというものはムーアの法則によって、どんどん性能が向上してきました。過去50年ぐらいの間、コンピュータを構成してるLSIの集積度、つまり、1つのチップの上にのってるトランジスタの数は、2年間で2倍というペースで増加してきました。
そうすると2年で2倍、4年で4倍、6年で8倍、8年で16倍というふうに倍々ゲームで増えていくわけなんですけれども、現実世界で、こんな指数関数的に増加するものって、あんまり見かけないですよね。
そうやって、どんどん性能が向上してきて、私が子どもの頃のコンピュータに比べて、今のコンピュータは性能やメモリ容量においても数百万倍とか増加してるわけなんです。
ただ、やっぱり物理的な限界があるので、いつまでも指数関数的増加というのは難しくなる。そう言われてみれば、最近、パソコンのクロックという点では、あんまり伸びなくなってきてますね。一般向けのコンピュータのクロックは、だいたい2ギガちょっと超えたぐらいで頭打ちです。
Pentium 4の頃は4ギガのものもありましたけれども、Core i9でも、3.何ギガとか4ギガいくものが、オーバークロックしたらいくかなぐらいのレベルです。もちろんPentium 4の4ギガよりもCore i7の2.5ギガのほうがたぶん速いですけれども。そうは言っても、1コアにおける性能の限界は、昔みたいな倍々ゲームで伸びるみたいなことが、もうなくなってきています。
そうするとCPUメーカーの人たちはどうしてるかというと、1つのチップの上にコアをたくさん積むことによって、同じ性能のチップを1つの代わりに2つ積んだら理論値は2倍、4つ積んだら理論値は4倍ということになるので、そうやって増えたトランジスタをコアの数に振り向けて、理論上の性能を向上させようというふうになってきて、マルチコアを活用しようみたいなことが増えてきました。
さらに、コンピュータそのものの値段が安くなったので、1台のコンピュータにマルチコアを積むだけではなくて、システム全体を複数のコンピュータで構築することによって、性能を向上しようみたいな流れも出てきました。
1つのマルチノードでも1つのデータセンターだけだと、例えば「そのデータセンターのルータが落ちました、全部サービスが止まりました」というのは恐ろしいので、複数のデータセンターに分割してフォールトトレラントを実現しようみたいなことも。本当にやってる人はほとんどいないですけれども、でも今後、スケーラビリティが話題になってくるにつながって、そういう選択肢も現実的になってくるかもしれません。
その時に気になるのが、コンカレンシーという概念ですね。言い方を変えると分散処理。1つのコンピュータだけではなくて、複数のコア、複数のコンピュータ、複数のデータセンターにバラまかれた処理が、全体として1つのシステムを構築します。そして、その構築した複数のソフトウェアからなるシステムが、協調しながら1つの処理を行うことが求められる。そういうことを実現するようなスケーラブルなアーキテクチャが求められています。
現在のWorld Wide Webって、すごくプリミティブなわりにはけっこういい線いってて、いいんですけれども、万能ではないわけですよね。25年先のコンピュータアーキテクチャを考えた時に、量子コンピューティングみたいな、現在からいくとまるで予想できないようなアーキテクチャはまったく無視して、現在のアーキテクチャの延長線上に25年後のコンピュータがあるとすると、今、「なんとかas a Service」みたいに言われてるものの近く、その中でも、とくにFunction as a Serviceと言われてるものが、現代では一番近いものではないかなと、私は予想します。もちろん、外れる可能性のほうが高いんですけれども。
Function as a Serviceは、Amazon Lambdaみたいなものをイメージすればいいんじゃないかな、と思います。
そういう未来が来た時に、今のGuildではないと思いますけれども、Guildのその先のものが、大規模分散の、マルチノードやマルチデータセンターからなるシステムを管理する。あたかも1つのコンピュータであるかのように管理するというプログラムを書くことができて、そのプログラムのロジックをRubyで書けると、いい未来なんじゃないかなと思ってます。
非均質な計算環境というものですけれども、我々はコンピュータを考える時に、同じコンピュータが複数並んでるシステムを考えるわけです。マルチコアでも、同じCPUが4つあるいは8つあると考えがちなのです。
例えばARMのBigLITTLEというアーキテクチャは、「8コアあります、そのうちのコア4つは、高性能なコアです、残りの4つは、性能は低いけれども電力消費の少ないコアです」と。ARMはモバイルに使われることが多いので、携帯電話とかだと、無限に電気を消費されても困るわけですよね。
そこで、あまり忙しくない時には、性能は低いけれど消費電力の少ないコアで動いて、忙しくなってきたら大きなコアに仕事を移して、そっちで実行する。つまり、同じコンピュータではなく、複数の種類のコンピュータが混ざってて、それが役割ごとに分担しながら働くみたいなことが非均質計算環境です。ヘテロジニアスですね。
GPGPUもそんな感じですよね。General-Purpose GPU。もともとグラフィックスやCGのレンダリングとかに使われてるGPUを、汎用目的に使おうという試みですね。ですから、機械学習とかデータサイエンスの領域で、GPUを計算に使うということは、だいぶ前からけっこう流行ってるわけです。
だから、1つのコンピュータで、コアは難しいロジックを実行しますが、単純なロジックについては「GPUとかにオフロードして、そっちで計算させます」みたいなことが起きています。これもまた、複数のコンピュータから構成された1つのシステムが協調されながら動く、という基本は変わらないわけですね。
あるいは、FPGAみたいなものもありますね。Field-Programmable Gate Arrayです。プログラム可能なハードウェアですよね。こういうものを使って、難しいロジックの部分をハードウェアで実装してオフロードするみたいなことです。これもまた、均質ではない複数の計算環境によって構成されるシステムが、協調して1つのシステムとして動く。
この時に重要になってくるのが、それをどういうふうにして抽象化するかということです。実際、私は、現時点で答えがでてないんですけれども。ただ、大規模分散みたいなものを簡単なRubyコードで書くことによって、ものすごく大きなことがシンプルに、安全にできるという未来がきてほしいなと思います。
そのためには、開発しなければならないRubyのコアやライブラリの部分とかは、たくさんあると思いますし、これこそが未来ではないのかなと思います。また、それが、ただ単にシンプルなだけではなくて、楽しくできると、Rubyをつくった甲斐があったんじゃないかな、と思います。
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.20
成果が目立つ「攻めのタイプ」ばかり採用しがちな職場 「優秀な人材」を求める人がスルーしているもの
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.21
40代〜50代の管理職が「部下を承認する」のに苦戦するわけ 職場での「傷つき」をこじらせた世代に必要なこと
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.19
がんばっているのに伸び悩む営業・成果を出す営業の違い 『無敗営業』著者が教える、つい陥りがちな「思い込み」の罠
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2024.11.15
好きなことで起業、赤字を膨らませても引くに引けない理由 倒産リスクが一気に高まる、起業でありがちな失敗