锁定老帖子 主题:静态类型语言的优势究竟是什么?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-15
引用 dongbin 写道 但是要做到语句覆盖以上的覆盖率(前面有个弱条件组合覆盖的例子),这个代价和能力不是多数人所愿意付出的。 难道又要开始扯什么是TDD中的T这个冷饭了么? 首先我没有扯“什么是TDD中的T这个冷饭”! 其次,“但是要做到语句覆盖以上的覆盖率(前面有个弱条件组合覆盖的例子),个代价和能力不是多数人所愿意付出的” 是谁得出的结论? 基于我个人的实践,我不敢苟同。 引用 拜托,难道你在写java程序的时候真的测试了getter/setter这类方法?如果是的,恭喜你......... robbin已经说了,ROR没有get set. 再说我针对的是你那个logger的例子,请不要跑题。 引用 兄弟,没人说编译器还是单元测试能保证代码正确无误啊。没必要自己树个靶子自己打吧。 拜托,我说要打谁了么?我只是说工具和流程不能代替人!仔细读读好么? 引用 关键是代价。如果不考虑代价,那么每个项目团队都会去做这件事情。 TDD的优劣每个人都有自己的看法,我只是表达我的意见。我不会把自己的看法强加给别人,我也没这个能力。 |
|
返回顶楼 | |
发表时间:2006-11-15
jack 写道 BirdGu 写道 编译器对程序员的帮助到底有多大,这个还是要应人而异的。编译器能查出来的很多都属于打字错误,拼写错误。对于robbin来说,即使没有编译器,检查这种错误也是小菜一碟。可是对于经验不是很丰富的程序员来说,情况恐怕就大大不同了。毕竟程序员经验方面差异的一个重要方面就是Debug能力和经验的差异。对高手来说仔细读上两遍程序就能发现的错误,对一些新手来说可能会花上一两小时,这种情况我在实际项目中碰到很多次了。
所以我也强调静态语言编译器对于初学人员的帮助. 如果是robbin这样的高手,说不定就已经能够做到,一次code完,一次编译过,到处运行不需要debug的程度了. 不过吗,世界上还是新手菜鸟多. code once, run everywhere? 新广告词? 也许比较好的折衷是Erlang那种动态语言+类型检查器。C这么容易出错,我们靠lint/splint也挺过来了。 |
|
返回顶楼 | |
发表时间:2006-11-15
floating 写道 robbin 写道 没有,边开发边设计,一边添加表上去。RoR本身也有比较强的DataBase Migration功能,强调了数据库表设计的敏捷化。 RoR就是feature驱动的,我觉得比现在主流的工业语言来说,更加贴近用户需求,更加强调反馈速度,迭代次数。这和现在主流工业语言的架构驱动确实感觉上很不一样。 robbin,那是不是可以认为这样的工作方式对开发人员的素养和开发习惯都有比较高的要求?你能不能推荐一些介绍如何采用feature驱动的方式进行团队协作开发的资料? 像XP就是比较适合RoR的软件开发方法阿,先讨论userstory,制订userstory card,然后一个card一个card进行小步骤迭代实现。 其实我觉得XP对开发人员技术素质要求不高,但是像沟通能力,团队协作的习惯要求比较高。 |
|
返回顶楼 | |
发表时间:2006-11-15
引用 首先我没有扯“什么是TDD中的T这个冷饭”!
别介,下面这句话是你说得吧 引用 实践中遵循TDD,就会在不知不觉中覆盖到所有代码。我根本感觉不到额外的成本
根据这话里的意思,只能说明你做的就不是TDD,所以没必要戴TDD这顶高帽。 前面已经说过,TDD中的测试指的是准黑盒的功能性测试,没办法顾及到语句覆盖率的(这个是覆盖的最低级的一层). 引用 robbin已经说了,ROR没有get set.
robbin是说过这句话,但是你好像没有说过啊。你说得只是单元测试要覆盖。没有说针对什么样的语言. 或者,你从来就没有编写过java代码,那也是个说法。 或者,你编写java程序的时候就可以漏过getter/setter的测试,那不就结了,和我的结论一样,就没语句覆盖的事情了。 引用 再说我针对的是你那个logger的例子,请不要跑题。
跑题了吗? 前贴已经明确说了. 对于logger为null的情况,本身就不应该在使用这个logger记录日志信息的地方判断. 你如果对这个说法有异议,请提出来。 引用 拜托,我说要打谁了么?我只是说工具和流程不能代替人!仔细读读好么?
别激动,没说你要打谁啊,只是说你说那句话的时候纯属自娱自乐.因为没有人否认你的观点. 但是你现在的后续解释就有问题了.如果你想通过 引用 另外,无论是编译器还是单元测试都不能保证代码正确无误--世界上没有任何方法或者技术可以做到!
这句话来推导出 引用 工具和流程不能代替人
这个逻辑也太不靠谱了吧. 难道你认为人就可以做到让代码正确无误? 如果不是这么认为的,那前提和结论根本就没有联系. 引用 TDD的优劣每个人都有自己的看法,我只是表达我的意见。我不会把自己的看法强加给别人,我也没这个能力。
这个只是讨论而已.如果每个人都只是表达自己的意见而不愿意在讨论中深入,那开个论坛干吗? 我觉得在论坛上有非常重要的一点. 那就是,每个人都是写给观众看的. |
|
返回顶楼 | |
发表时间:2006-11-15
jack 写道 BirdGu 写道 编译器对程序员的帮助到底有多大,这个还是要应人而异的。编译器能查出来的很多都属于打字错误,拼写错误。对于robbin来说,即使没有编译器,检查这种错误也是小菜一碟。可是对于经验不是很丰富的程序员来说,情况恐怕就大大不同了。毕竟程序员经验方面差异的一个重要方面就是Debug能力和经验的差异。对高手来说仔细读上两遍程序就能发现的错误,对一些新手来说可能会花上一两小时,这种情况我在实际项目中碰到很多次了。
所以我也强调静态语言编译器对于初学人员的帮助. 如果是robbin这样的高手,说不定就已经能够做到,一次code完,一次编译过,到处运行不需要debug的程度了. 不过吗,世界上还是新手菜鸟多. 本以为这没什么好争的, IDE作用大,不只因为是菜鸟。 我想知道有那位高手做项目时有好的IDE不用的。 用rails提高了效率,所以rails好。用IDE也提高效率,怎么IDE的就没啥用了? 做到一次code完,一次编译通过已经是难能可贵了。 还不需要Debug,那简直是讲故事。 |
|
返回顶楼 | |
发表时间:2006-11-15
jack 写道 动态类型语言如果没有良好的IDE,调试器,并不合适初学人员使用.初学人员需要有外部工具来限制其不可预料的行为.静态语言有编译器存在,可以很大的限制初学者出错的可能性.有调试器,则可以明确定位错误发生位置.
动态语言大都时候都只有一个解释器,如果开发人员经验不够丰富,那么完全不能胜任开发工作的. Java/C#这类语言,菜鸟和高手都能够完成同样的功能,就是所需时间不同而已. 能够给大量菜鸟使用,并可以堆出一个可以部署的项目,就是静态语言的优势了. Jack同学,你这想法真的大错而特错了。PHP就是因为是动态语言,就是因为不需要复杂的IDE,不需要调试器,只有一个解释器,所以菜鸟才能够很快上手,所以互联网70%的网站都是PHP开发的。不瞒你说,现在也有很多很强的PHP IDE出来了,例如Zend Studio之类,但是我还是觉得UltraEdit好用,为啥?简单呗! 互联网网上真正用静态类型语言开发的网站所占的比例还不到20%,而超过80%的都是脚本语言开发的。 我用Eclipse已经有三年了,但是Eclipse的很多功能我到现在都没有掌握,调试器也只不过会最基本的功能而已。你说那么普遍的字符串拼接SQL的错误,Java里面还不是一大把吗?难道Eclipse可以限制初学者不用?HTTP Session里面随便乱塞结果集Eclipse可以避免?数据库连接不关闭Eclipse可以编译检查出来? 这些web开发当中最容易犯的错误,反而是脚本语言不容易出现,为啥呢?因为脚本语言是进程模型,不需要关闭数据库连接,内存当做不保存Session,所以Session可以随便乱塞东西,SQL拼接都提供了很强的字符串检查和过滤机制。 这不是我说瞎话,我帮很多Java系统做过性能排查和调优的咨询,Java新手的不良编程系统破坏力是及其惊人的,而PHP新手很少会在这种事情上遇到困扰。 |
|
返回顶楼 | |
发表时间:2006-11-15
我觉得争论静态类型或者动态类型有点没有落到实质上。之所以我们现在觉得静态类型系统让我们束手束脚,原因是它还不够灵活,而且,在绝大多数场合,静态类型要跟动态类型结合起来才能完善的表达概念。
现代的类型系统虽说已经发育的比较丰富了,但还远不够完善,所以,现在的实质问题是我们类型系统是否能够强大到检测出它应该监测出的问题,同时灵活到不限制我们的思路。 |
|
返回顶楼 | |
发表时间:2006-11-15
robbin 写道 我用Eclipse已经有三年了,但是Eclipse的很多功能我到现在都没有掌握,调试器也只不过会最基本的功能而已。你说那么普遍的字符串拼接SQL的错误,Java里面还不是一大把吗?难道Eclipse可以限制初学者不用?HTTP Session里面随便乱塞结果集Eclipse可以避免?数据库连接不关闭Eclipse可以编译检查出来? 这些web开发当中最容易犯的错误,反而是脚本语言不容易出现,为啥呢?因为脚本语言是进程模型,不需要关闭数据库连接,内存当做不保存Session,所以Session可以随便乱塞东西,SQL拼接都提供了很强的字符串检查和过滤机制。 这不是我说瞎话,我帮很多Java系统做过性能排查和调优的咨询,Java新手的不良编程系统破坏力是及其惊人的,而PHP新手很少会在这种事情上遇到困扰。 robbin,你说的这些东西我都同意,但这已是动态静态语言之外的东西了,php没有VM,Java有VM,数据库连接和Session都是因为VM的后果,和动静态语言本身无关吧。你以前写过这方面的帖子的,我仔细读过。 我上大学的时候是用过C写过CGI程序的,编译执行,和php一样是进程模型。 要是写一个逻辑很复杂,代码量非常大的程序,一个菜鸟用php,一个菜鸟用java,我的假设是菜鸟用java敲出来的可能性还是大的。要是有人对这个论点感兴趣可以去求证或证伪去。 我去学Lisp了。 |
|
返回顶楼 | |
发表时间:2006-11-15
robbin 写道 像XP就是比较适合RoR的软件开发方法阿,先讨论userstory,制订userstory card,然后一个card一个card进行小步骤迭代实现。 其实我觉得XP对开发人员技术素质要求不高,但是像沟通能力,团队协作的习惯要求比较高。 我在项目里曾经尝试过XP,但是感觉不是很成功。觉得XP对项目人员的斗志、激情和投入程度要求比较高(对能力方面的确像robbin说的那样要求不算高),特别是开发人员一多,就没法一个一个的去煽动。不知道各位大大在实践的时候怎么做好这一点的? |
|
返回顶楼 | |
发表时间:2006-11-15
floating 写道 特别是开发人员一多,就没法一个一个的去煽动。不知道各位大大在实践的时候怎么做好这一点的?
不好好干活,那种推一下,才动一动的人,统统滚蛋。自己不求上进的人无可救药。 |
|
返回顶楼 | |