是什么让其他语言在快速开发上比Java更快?
很多人说用Python、Ruby、PHP等语言开发比用Java快得多。
那么问题来了,为什么呢?是因为编码的速度、开发工具、可用的库等等,还是说只是制作第一个原型的速度快?
我想听听那些在Java和其他语言上都有长时间工作经验的人的看法。
备注:我之前在.Net上开发过,确实有些应用做起来比Java快,但从长远来看(比如大型网站项目),它的速度就会和Java差不多了。
4 个回答
对我来说,Python最大的好处就是简单。你可以像读句子一样轻松地看懂代码。即使别人给你看他的代码,你也能在几分钟内搞明白它在干嘛。
for item in list:
if item in other_list.keys():
new_list.append(item)
我觉得这大大缩短了开发时间。
还有第二点,就是文档写得很好。不过我不太清楚Java的文档是什么样的。
而且我觉得有很多实用的包也是一个很大的优势。
别忘了Python的IDE或者Ruby的IRB。有时候你可以互动式地测试某个东西,这样会省下很多时间。
我之前用Java开发网页应用程序,后来转到PHP,感觉最大的不同就是PHP的设置要简单很多。而且像PHP这样的语言是“松散类型”的,这意味着你不需要写很多代码去把一种东西转换成另一种东西,感觉有点多余。
Java的例子:
//omitting the lines and lines of stuff to set up a request and
//the try catch and the exeptions that *might* get thrown
String numberInput = request.getAttribute('numberInput');
int result=0;
if (numberInput!=null && numberInput.length()>0)
{
result=Integer.parseInt(numberInput)+1;
//but now we need to wrap this in a try/catch to catch NFE exeptions
}
//can't just echo it, need to set up an output thingy... ommitting all that too
out.print(result);
out.flush();
out.close();
用PHP实现同样的功能:
echo $_GET['numberInput']++;
//no setup or tries or catches required, it either works or shows nothing.
这对我来说是最大的优点,因为我在用Java处理用户输入验证时总是感到很沮丧。每次处理每个输入时,我都需要做很多事情,而在PHP中这些都是不必要的。当然,验证还是必须做的,只是在PHP中简单多了。
希望这对你有帮助。
我觉得快速开发语言的主要优点是动态类型,这样你就不需要像在Java中那样去费心处理静态类型。
public List<Tree<N extends Iterator, E super Interface1 & Interface2>>
= new ArrayList<Tree<N extends Iterator, E super Interface1 & Interface2>>();
... 之后还要考虑类型擦除的问题。
使用动态类型语言,你就不用担心这些,可以快速进行类型推断。这种方式更快,通常也能写出更易读的代码(因为少了类型信息的干扰,见上面的例子)。不过,你确实需要进行全面的测试,但现在很多人都采用测试驱动开发(TDD)和通过测试来写文档,所以这些测试通常都会写好。
接下来我们来看看一些关于静态类型和动态类型语言的历史例子;)
当人们对C++感到不满时,动态类型语言Smalltalk开始变得流行。但后来Java出现了。虽然Smalltalk已经有很好的测试技术(xUnit就是在Smalltalk领域诞生的),但全面测试的概念直到后来才变得流行。我认为这就是动态语言现在崛起的原因。因为在动态语言中,你需要非常全面的测试,因为例如在消息调用中一个简单的拼写错误只有在运行时才能被发现。
不过,也许现在类型推断技术越来越好,我们会再次看到类似的情况,Scala可能会阻碍动态语言的第二次崛起;)
更新:我找到了一篇很详细的programmers.stackexchange帖子,讨论静态类型和动态类型。这篇文章列出了很多值得阅读的论文,也考虑了生产力的问题。