高级语言发展之回归人类思维——听老赵的Session有感

周末去听了老赵《Why Java sucks and C# rocks》的演讲,觉得非常的精彩。先说明这个题目的确很好很强大,直接对Java程序员施放了嘲讽。其实关于这个题目,明眼人一眼就知道老赵本人并没有让Java程序员都转到C#的意思,更没有大家把Java平台都扔了的意思;只是让那种如同“看别人写的代码都是垃圾”的那种程序员所特有的傲气蒙蔽的人,才会有上面的想法。

 

个人认为老赵演示中对我而言比较精彩的部分有两块:一是用yield关键字大大简化了异步编程的困难,二是C# 3.0所提供的LINQ功能。写过异步的人应该都明白异步相对于同步的复杂性,但yield关键字直接讲异步的编程模型转换为了同步的编程模型,很神奇。至于第二个部分LINQ,应该熟悉的人比较多,但其中举得例子一句话搞定一个功能让人觉得非常的兴奋,这正是我一直所期盼的一种写代码的方式!

 

就用其课程中的一个例子来说明:比如将bbcode转换为html这件事情,平时的做法就是先转为html,然后再消除掉一些攻击脚本,最后删除空格。

如果使用C# 3.0以下版本:

Util.StripWhites(
    Util.StripXss(
        Util.BbToHtml(bbcode)
    )
)

 

而使用C# 3.0:

bbcode.BbToHtml().StripXss().StripWhites()

 

通过比较明显的出,C# 3.0的扩展方法的支持可以使得代码就如日常做事的思维一般,这是何等的一个进步!

 

我曾经对面向对象进行过一些探索,如何向人解释面向对象这个东西的确是很难。在经历过多次的尝试和自己的总结之后,其实面向对象的思维很简单,就是你日常做事情是怎样做,那么面向对象的思考也跟其一样。可以这么说,拿到一件事情,抛弃计算机,想想在没有计算机的情况下我该如何做这件事,这本身就是一个面向对象的思维,剩下的就是将这种思维转换为计算机实现。因此,C# 3.0的这个特性让我觉得特别的兴奋,因为如果采取合适的封装和抽象,那么对于使用你代码的客户来说,他只需要知道我该做些什么来完成工作,而不是去思考如何去做!其实仔细想想,这不正是高级编程语言的任务吗?让你关注于你的逻辑,而不是具体的计算机实现。所以我认为,高级语言的发展目标,便是回归人类自身思维。直到有一天,任何用户拿到计算机,可以根据自己需要做什么而去编写代码,那便是编程语言发展的终极形态!

 

既然说到这里,就忍不住不得不狠批一个现象:很多程序员借性能之名来阻碍生产力的提升。其实上面的C# 3.0的特性,我是早已知晓,但限于平台因素平时的开发环境都仍然是在2.0上,曾极力推荐将环境升级到3.5(因为3.5是2.0的一个超集,基本不存在兼容性问题),以带来生产力的巨大提升,但被很多人以性能为名压住。从理论上来说,LINQ的一些东西的确是比自己写循环来的慢,因为有很多的委托需要创建。但相比于生产力的巨大提高,那么一点微小的性能开销真的很重要?而且,很多时候性能的问题在于设计,而不是因为使用了某些高级特性!

posted @ 2010-04-18 20:19    阅读(3038)  评论(16编辑  收藏  举报