みなと国際会計事務所 Accounting Intelligence blog by a CPA in Tokyo

みなと国際会計事務所 Accounting Intelligence blog by a CPA in Tokyo, tax tips, accounting, running business

PythonとJavaとリーン・スタートアップ

time 2017/07/05

プログラミング言語としてはPythonとJavaではJavaの方が、作ったサービスは圧倒的に安定しています。実行する前にコードから実行ファイルをコンパイルするので、文法や型のチェックも行われバグも出にくいです。またPythonは実行時にファイルを読み込んで解析するのに対して、Javaは実行する前にコードをコンパイルして中間ファイルを作るので、スピードも速いらしいです。Pythonをやっていて速度で問題を感じたことはありませんが、事前の文法チェックが無いので、実行して初めて引数が足りてなかったなどの文法に誤りがあったことがわかることがあります。

文法チェックができるかどうかは、結局バグの多さに影響するので、コードの品質は最初からPythonやRubyなどの動的型付け言語に比べてJavaの方が圧倒的に上にナルト思います。ですので、Javaで既にWebサービスをサクサク作れるスキルのある方は、あえてPythonなんかを始めてみる必要など無いように思います。

こう考えるとPythonに比べるとJavaの方が品質的には圧倒的に上に見えるのですが、世の中ではPythonやRubyが人気です。なんとなくJavaやRubyが新しくて、Javaが古くてダサいもののようにも感じられます。世の中の多くのIT関連のスタートアップはPythonやRubyを使っています。言語のランキングでもPythonは着実に順位をあげています。

求人情報やIT関係の雑誌なんかを読むと部外者でもわかるのですが、有名どころのスタートアップのfreeeやCookpad、snapmartなどもサーバー側はRubyで開発しているようです。

そういう多くのスタートアップで、何故そうなのを考えてみたのですが、多分最近よく言われるリーンスタートアップと関係があるのかなと思いました。VCなどから出資を受けているところは、VCから開発言語についてもなんらかの助言を受けるのでは無いかと思います。そういうところがRubyなんかを使っているのは理由があると思うのです。

考えてみたのですが、一番大きな理由はきっとITサービスやアプリは、出してみない「当たる」かどうかわからないからでは無いかと思いました。よくある話は、一生懸命作ってみたけど、そんなサービスは誰も必要としてなかったとか、既にそんなサービスあったとかいう話です。つまり最初から当たることの方が珍しいので、いくつも素早く作ってマーケットでどんどん試せるスピード感のある言語の方がいいということです。

結局、自社でのITサービスの開発は何が難しいかというと、多大なコストをかけて投資をしても、誰にも必要とされず投資が無駄になってしまいガチだということです。私も、税理士・会計士という立場で開発に大金をつぎ込んで経営が苦しくなってしまう会社を沢山みてきました。

これはあくまで私の想像なのですが、Javaなんぞで作ると一つのアプリを作るのに時間がかかりすぎるので、世の中のニーズが無いとわかった時には傷が大きくなりすぎてしまっていると、世の中のITサービス企業を経営するような人達は考えているということなのかも知れません。

最近、今更なのですがJavaのJSFを触ってみています。Javaでもそんなにコーディングに時間がかかるようには感じません。以前はデータベースとクラスインスタンスの相互の変換やhtmlとして表示する部分の実装が大変だったのかも知れませんが、今のJPAやJSFは十分に簡単なように感じました。

コードは一度書かれると何年も使われるものです。使われるコードでしたら5年どころか10年くらいもざらに使われます。ですので、言語選択の際にメンテナンスのしやすさや機能の追加しやすは実はとても重要なファクターです。コードは機能が追加されていくごとにだんだん複雑になっていきます。型チェックが厳密にされる静的型付け言語の方がコードの規模が大きくなっていくにつれてどんどん有利になっていきます。IDEなんか使っても、静的型付け言語のIDEはEclipseでもNetBeanでもインスタンス名の後にドットを打つと、ちゃんと入力候補が出てきます。PythonのPycharmではそこまでよくできていません。動的型付け言語なので原理的にも無理なのかも知れません。

PythonやRuby、PHPなどの一瞬手軽にできるように見える軽量言語よりも、最近のJavaは、静的型付け言語のメリットがあるので、長い目ではもちろん有利で、短期的にもそれほどデメリットが無いのでは無いかと感じているところです。結構大手がRubyを使っていますが、コードが複雑化していくと、機能の拡張やメンテがこれからどんどん大変になって、開発効率が急激に落ちていくかも知れません。そこはテストなどのノウハウを使って上手にできているのかも知れません。

でも、これからのスタートアップはコードがどんどん複雑化していきそうならJavaなどの動的型付け言語を使う方が競争的にも有利に立てるかも知れないと思いました。