give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

ダックタイピングは間違い?

twitterで↓のネタを見つけました。


http://goo.gl/cPvp

現場にはダメエンジニアがごろごろいる、彼らを縛るinterfaceという鎖、この輝きが美しい。


表現が若干刺激的ですが、言いたいことはよく分かります。


つまり、コンパイル型言語は静的な型付けが基本で、冗長なコードを生みやすい。反面、ショボいミスはコンパイラが見つけてくれる。
一方、スクリプト言語は動的な型付けが基本で、短くシンプルなコードを生みやすい。反面、ショボいミスであっても実際に実行するまで分からない。


単純に言い換えると、


信頼できないプログラマ(自分自身を含む)や、意思疎通が不十分な開発チームにはコンパイル型言語がベター


信頼できるプログラマ(自分自身を含む)や、十二分に意思疎通が取れている開発チームにはスクリプト言語がベター


と表現することができます。


確かにダメなエンジニアにダックタイピングを与えると、現場にさらなる混乱を招く気がします。
まあ、それ以前にダメなエンジニアはダックタイピングを使おうとしないでしょうけど。
でもヘタに知識を持ったエンジニアが調子にのって乱用しちゃうと、かなり悲惨なことになりそうですねえ・・・(T T)


ところで、勝手に引用しちゃっていいのかどうか分かりませんが、RubyのMatz先生がtwitterで以下のような発言をしています。


*1」みたいなプログラマがうようよしていますから。
1万行のメソッドが実行するまで分からない、というんじゃ手も足も出ません・・・(> <)
まあ、コンパイラにチェックさせたって発見できる問題はたかがしれてるかもしれませんが、それでも「同じ名前のローカル変数を作っちゃった!」みたいな問題ぐらいは発見してくれそうです。


そんなわけで、ダックタイピングも現場によっては確かに有用ですが、プログラミングスキルの格差がまだまだ大きい現在の開発現場においては、静的型付け(コンパイル型)言語がまだまだ必要、と言える気がします。


2010.9.14追記
ダックタイピングのことに言及しているわけではありませんが、ダックタイピングについても同じことが言えそうなMatz先生のお言葉を見つけました。

Rubyは君を信頼する。Rubyは君を分別のあるプログラマとして扱う。Rubyはメタプログラミングのような強力な力を与える。ただし、大いなる力には、大いなる責任が伴うことを忘れてはいけない」*2


プログラマを信頼するかわりに、強力な力を与える。そのかわりにプログラマには責任が伴う。


ちょっと極端かもしれませんが、ダックタイピングでもこれぐらいの感覚を持ったプログラマに限って使うようにした方が良いかもしれません。

*1:http://togetter.com/li/41782

*2:http://www.atmarkit.co.jp/news/201009/13/spell.html