読者です 読者をやめる 読者になる 読者になる

GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

Static Programming Language for other,Dynamic one for mine

ネタ元

タイトルで言いたいことは「動的言語は自分のために作るソフト向き、静的言語は他人のために作るソフト向き」です。一言で言うと、いいたいのはこれだけ。

ある程度大きな規模の開発案件になると、「余計なことはプログラマにさせたくない」というテーマが持ち上がる。会社も違う今回初めて一緒に開発するエンジニアが多数おります。プロジェクトが終わればアディオスです。当然ですが、開発者によってコード品質の差があるのは大変よろしくありません。均質化が求められます。

よくも悪くも制限をかけることが重要になるので、コンパイル通す段階で問題検知をするってことがとても重要になります。一部の腐れた開発者はコンパイルの通ってない香ばしいソースをCVSSVNにコミットします。ホントこれむかつくんだけどwwww

話題がそれましたが、最近はEclipse先生等のIDEが充実しているおかげで、多くの問題が事前に検知できるようになりました。Aというモジュールはオレ、Bというモジュールは他社さん、でもってAのReturnをBに渡すみたいな開発になりますので、インターフェイスを明確に定義することは大変重要です。可変長引数とかじゃ基本マズイし、Mapを渡すってのも良くないです。Map返すぐらいならBeanの配列を返すべし。BeanDebugerUtilみたいなクラス作ってるプロジェクトいっぱいあると思う。

もう1つは可読性を上げるってのもあるのかと。forEachで空気嫁ループよりも、Genericsでみたいな感じで何が入ってくるのかをコンパイル時に指定する方が、このソース読んだことがない人から見れば可読性があがります。

ここまで書いてきて改めて思ったのが、静的言語って「自分以外の人のために開発するのに向いている言語」だなぁと。そういう側面が色濃くあると思う。

これに対して、動的言語ってのは素直に自分の頭の中をプログラム化できるのがいい所。

メタプログラミングとか、実行時に型をバインドとか、クロージャとか、メソッドの引数に関数を渡せるとか、多分そういうのってやりたいことをCooooolに実現するためには欠かせない道具なんだと思う。何かWebベースのサービスを立ち上げるとか、プロトタイプを作るとか、そういう自分のためにやるソフト開発って、静的言語じゃうっとおしいはずで。素直にやりたいことを実現したい&早く実行結果を見たいという条件が重なる、オレ(もしくは少人数チーム)のための開発に動的言語はジャストミートすると思います。