论坛首页 综合技术论坛

静态类型语言的优势究竟是什么?

浏览 54003 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-15  
BirdGu 写道
编译器对程序员的帮助到底有多大,这个还是要应人而异的。编译器能查出来的很多都属于打字错误,拼写错误。对于robbin来说,即使没有编译器,检查这种错误也是小菜一碟。可是对于经验不是很丰富的程序员来说,情况恐怕就大大不同了。毕竟程序员经验方面差异的一个重要方面就是Debug能力和经验的差异。对高手来说仔细读上两遍程序就能发现的错误,对一些新手来说可能会花上一两小时,这种情况我在实际项目中碰到很多次了。



真的是这样的,编译器其实能够检查出来的错误实在有限,一般来说不外乎两类:

1、语法拼写错误,变量/对象名字拼写错误
2、传入参数的类型搞错了

对于第一类来说,像Radrails已经能对ruby语法进行很好的语法检查了,语法错误就会报告的,至于变量对象名字搞错,频率到是比Java高,但是只要写过一次的变量/对象,下一次写的时候就可以autocomplete的,所以拼写错误发生的频率是比Java高,但是没有想像中那么高,而且这种错误也很容易定位。

对于第二类来说,ruby会抛出类型错误异常的,也挺好定位的。
0 请登录后投票
   发表时间:2006-11-15  
抛开这个话题,随便谈谈对于项目开发的看法:

一个新手,让他用PHP,还是Java,他肯定觉得PHP好用,我一个搞photoshop的朋友,中专毕业,PHP都用的比我熟,给别人开发了好多个网站了,可他拜我为师学习Java好几年了,至今没有入门。

最近我看到一些团队开发的情况,非常有感触。其实真的项目周期压力一大,任务一多,那个时候最简单最快捷的东西就是最顶用的。

0 请登录后投票
   发表时间:2006-11-16  
最简单,最快捷。
这个东西很难下定义,如果比简单,似乎jsp+javabean,比mvc都简单多了。可实际上玩java的人却都在推复杂的东西。
0 请登录后投票
   发表时间:2006-11-16  
我有朋友在开发一个CRM。开发这个项目开发人员有70多个人,他每天接到任务只是按文档(专门有个系统分析组写程序总体结构。并且出设计文档)上标准实现就行(专门写EJB(sessionbean)调用hibernate 根本不用考虑其它的方面),不必知道他以后用在什么,也不可能知道。反正按照标准写。然后,他们有个组专门对这些组件装配。然后给测试部门测试。
0 请登录后投票
   发表时间:2006-11-16  
引用
最简单,最快捷。
这个东西很难下定义,如果比简单,似乎jsp+javabean,比mvc都简单多了。可实际上玩java的人却都在推复杂的东西。


这个例子有些牵强,jsp+javabean结构存在大量冗余,不能算快捷,这也是框架存在的原因。
0 请登录后投票
   发表时间:2006-11-17  
“高司令Gosling”老爷爷说静态语法检查是个很好的东西,这应该是有道理的。robbin大叔也倾向于这是个好处。当然它带来了限制。
我想,从程序员的分布上来说:上进的是一部分,而更大部分的是并不在乎技艺的庸人(千万别生气,放眼身边很多公司的确如此)。
对于在思考的人,动态带来了很多好处,不用列举,用过都知道。但是如果让所有的程序员都用动态语言,那么就可怕了,没有了静态检查,低级错误就多了好多,一个拼写失误可能就是一天的调试时间……

Java比较容易拿个AST就检查好大部分错误,运行期错误可以通过单元、组件、系统测试挽回,对测试的压力相对小。而动态语言,由于运行时推断绑定等特性,拿个AST检测不到很多错误,对测试压力就大了,对开发者对QA的要求就会高一些。这样说,动态语言是不是应该和过程改进结合起来实施?
0 请登录后投票
   发表时间:2006-11-17  
Tin 写道
“高司令Gosling”老爷爷说静态语法检查是个很好的东西,这应该是有道理的。robbin也倾向于这是个好处。当然它带来了限制。
我想,从程序员的分布上来说:上进的是一部分,而更大部分的是并不在乎技艺的庸人(千万别生气,放眼身边很多公司的确如此)。
对于在思考的人,动态带来了很多好处,不用列举,用过都知道。但是如果让所有的程序员都用动态语言,那么就可怕了,没有了静态检查,低级错误就多了好多,一个拼写失误可能就是一天的调试时间……

Java比较容易拿个AST就检查好大部分错误,运行期错误可以通过单元、组件、系统测试挽回,对测试的压力相对小。而动态语言,由于运行时推断绑定等特性,拿个AST检测不到很多错误,对测试压力就大了,对开发者对QA的要求就会高一些。这样说,动态语言是不是应该和过程改进结合起来实施?



我是相当反对认为静态类型检查是好东西,可以提高大型应用生产力的观点的。也反对认为动态语言会带来很多低级错误的观点。



0 请登录后投票
   发表时间:2006-12-07  
对于能不能做大型的系统来说,最重要的一点还是随着规模的扩大,人员的增多,交流和理解变得越来越重要了,有时候语言方面如果易于各层次人员理解的会占优势,也就是说,功能强大、容易理解成了一个语言选择的标准,并不一定足够灵活,呵呵,因为灵活的东西也是由不够灵活的东西实现的。
0 请登录后投票
   发表时间:2006-12-07  
robbin 写道
BirdGu 写道
编译器对程序员的帮助到底有多大,这个还是要应人而异的。编译器能查出来的很多都属于打字错误,拼写错误。对于robbin来说,即使没有编译器,检查这种错误也是小菜一碟。可是对于经验不是很丰富的程序员来说,情况恐怕就大大不同了。毕竟程序员经验方面差异的一个重要方面就是Debug能力和经验的差异。对高手来说仔细读上两遍程序就能发现的错误,对一些新手来说可能会花上一两小时,这种情况我在实际项目中碰到很多次了。



真的是这样的,编译器其实能够检查出来的错误实在有限,一般来说不外乎两类:

1、语法拼写错误,变量/对象名字拼写错误
2、传入参数的类型搞错了

对于第一类来说,像Radrails已经能对ruby语法进行很好的语法检查了,语法错误就会报告的,至于变量对象名字搞错,频率到是比Java高,但是只要写过一次的变量/对象,下一次写的时候就可以autocomplete的,所以拼写错误发生的频率是比Java高,但是没有想像中那么高,而且这种错误也很容易定位。

对于第二类来说,ruby会抛出类型错误异常的,也挺好定位的。

ruby我这几个月天天用,但写一段代码往往还是有变量名、方法名写错的情况,开发效率是高,不过排错也比较麻烦,好在reload也是超快。

静态类型还是有不少好处的,昨天用我从来没用过的C#语言写了个客户端程序,调用rails编写的WEB服务,分析数据再多线程下载相应文件。现学语言现查文档,所有功能包括界面一天就完成了,还生成了一个安装程序 它的IDE实在太棒了。

C#这类静态类型语言,编译时就能检查出大部分错误,所以即便我边写程序边聊天,也能写出正确运行的程序。而ruby则不然,如果我要写出稍复杂点的数据结构(用Array, Hash组成),可能就得关掉音乐全神贯注地写,还要加很多log输出以确定取的值是正确的。

我简单比较了一下,C#即便我不熟悉,不过因为语法和C++/java相似,所以还是很容易上手,ruby目前也算是用得比较熟了,虽然没有深入,开发效率我认为ruby比C#快3倍,比java快4-5倍。代码行数肯定是ruby少多了,光是数组的map, select就可以省不少行。
0 请登录后投票
   发表时间:2006-12-07  
使用Ruby的时候,脑袋要像Ruby的解释器一样工作。因为所有的东西都是动态。而Java的静态类型呢,就像一根静态的拐杖,可以给你一些可以抓得住东西撑着。撑着你,就是靠IDE提供的静态分析的能力。类型兼容,变量名检查是静态分析。提供者和使用者的互相查找是静态分析。抽象者和具现者是静态分析。更高级的IDE,还可以通过简单的推理,得知你的某些代码是没有用上的。没有个函数在某种情况下是缺少返回值的。这些都是静态分析。静态类型给Java带来的是用IDE做静态分析的能力。
要这些静态分析能力的原因很简单。人脑不是电脑。人脑不是生来运行程序的。人会累,人会烦,人会出错,人不擅长动态模拟程序运行。所以我们要拿拐杖来撑一下,扶一把。
也许只是我老了,才会有这种想法……

btw:单元测试是大家共同的动态拐杖。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics