システムのパフォーマンスチューニングしてますか?
皆さんこんにちは、起業もできるコンピュータ言語開発者を目指しているi3planetの飯塚です。
皆さんは、システムを開発したときに、そのシステムのパフォーマンスをきちんと計測してチューニングしていますか? 筆者は最近、この部分にかなりこだわっています。
やはり、ソフトウェアのパフォーマンスは非常に重要です。筆者が扱っているソフトウェアは物流やECサイト関連のソフトウェアなのですが、やはり、この分野はソフトウェアの処理速度は非常に重要です。
■Javaを選んだ理由
筆者は、開発には主にJavaを利用しています。もっと言うと、Java上で動く、Webとデータベースに特化した「Alinous-Core」というドメイン特化型開発言語で開発しています。言語も、自分用ですが、開発環境もEclipseベースで自分で作って、最近はかなり快適に開発ができています。
Javaは、とても良くできた言語です。どういう視点で良くできているかというと、言語とVMの仕様がソフトウェアの検証をとてもやりやすくしています。特に、継続的な開発をする場合、どの部分を変更したら、どの部分が変更が必要かを、エラーなどで教えてくれます。 また、JDK 6 Update 7以上に含まれる管理ツール「Visual VM」を利用することによって、動いているJavaのVMの中の状態を検証でき、非常に重宝します。
■Javaは、コードを増やすより「成果物を評価するための言語」
海外でJavaの人気が非常に高いのは、このように、作成したソフトウェアを継続的に検証する仕組みがあるからと筆者は考えます。海外では、テストエンジニアの単価が一番高く、開発者よりも上だったりするので、エンジニアの評価基準が、「作れること」よりも「作ったものを検証できること」の方が圧倒的に優勢なのです(※1)。
本音を言ってしまえば、自分でどう動くか理解できていないプログラムに価値があるかと言えば疑問です。日本でも、作業量よりもアウトプットの評価に対してきちんと社会的に評価してもらえる基盤ができてほしいものだと切に思います。
(※1)
・シリコンバレーのプログラマー(Programmer)のサラリー指標(Salary index)http://www.indeed.com/salary?q1=programmer&l1=Silicon+Valley%2C+CA
→昔(2011年4月ころ)は高かったが、今は下落傾向。
・シリコンバレーのテストエンジニア(Test Engineer)のサラリー指標http://www.indeed.com/salary/q-Test-Engineer-l-Silicon-Valley,-CA.html
→昔(2011年4月ころ)から上昇傾向。今後はもっと高くなるだろう。
■VMの中身をのぞいてみよう
したの写真は、実際に筆者がパフォーマンスの検証で使っているものの一部分です。
どのメソッド(関数)がどのくらいの割合で実行されているか分かるため、ボトルネックがすぐ分かります。これは、とても重要なことです。ボトルネックが分からない状態で、勘でパフォーマンスアップをさせるのは、やはり限界があります。
この例は、スレッドの並列処理のパフォーマンスチェックを行っている部分です。キューを処理してスレッドプールに待機しているスレッドを起動(launch)したり、処理が終わったものを待機させたりする部分と、実行している部分の比率を見ることで、並列実行の有効性を確認しています。
■自分の言語も「検証重視」で作る
筆者は、自分でも開発環境を作っているのですが、やはり、実務で使って一番うれしいのは、ソフトウェアの検証をするのが楽になることです。検証がしっかりできていれば、不安な気持ちや暗い気持ちになることがありません。 やはり、自分が作った成果が自分に返ってくる場合には、この「検証」の価値がとてもよく分かります。
しかし、ソフトウェアは、もともと形がとらえにくいものですが、「検証する」こと、さらに形をとらえにくいものです。SIビジネスになると、検証に対価が発生したりするかどうかという話になり、「分からない人に分かってもらう」という不可能なタスクが生まれます。
そうならないように考えて、エンドユーザーに理解できる形のパッケージソフトウェアを販売する会社を思いついたのですが、自分としては、今の自分の本業は、「開発効率化のためのツール開発」だと思っています。 今後も、ソフトウェアの開発効率だけではなく、検証力に力を入れて開発をしていこうと思います。