高级语言发展之回归人类思维——听老赵的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 阅读(2520) 评论(16) 编辑 收藏

 回复 引用 查看   
#1楼2010-04-18 20:47 | Cheney Shue      
大学的时候,我最常用的是sas和matlab。所以毕业后第一次接触c#就很不适应,无法理解为什么oop对数据到操作如此费劲。

大学时一个同学,为了做一个模型,自学vb6,搞了两天基本上就完成一个桌面程序了。上个月,他来问我要vs的安装程序,给他装了2008,告诉他wpf是最新的windows桌面开发平台。一个礼拜后他跟我说还是用vb6吧,他连xml都不理解。

如果说要让高级语言回归人类自身思维,让任何用户拿到计算机,可以根据自己需要做什么而去编写代码。那么我觉得第一个应该推翻的就是oop了,回归到最原始的basic。

 回复 引用 查看   
#2楼2010-04-18 21:00 | 诺贝尔      


人类思维是怎样的呢?

 回复 引用 查看   
#3楼2010-04-18 22:17 | MicroGoogle      
“直到有一天,任何用户拿到计算机,可以根据自己需要做什么而去编写代码,那便是编程语言发展的终极形态”Java和C#难道不是这样吗?
 回复 引用 查看   
#4楼2010-04-18 22:20 | xiaotie      
@MicroGoogle
那时候人已经不存在了

 回复 引用 查看   
#5楼2010-04-18 23:22 | 五星      
引用Cheney Shue:
大学的时候,我最常用的是sas和matlab。所以毕业后第一次接触c#就很不适应,无法理解为什么oop对数据到操作如此费劲。

大学时一个同学,为了做一个模型,自学vb6,搞了两天基本上就完成一个桌面程序了。上个月,他来问我要vs的安装程序,给他装了2008,告诉他wpf是最新的windows桌面开发平台。一个礼拜后他跟我说还是用vb6吧,他连xml都不理解。

如果说要让高级语言回归人类自身思维,让任何用户拿到计算机,可以根据自己需要做什么而去编写代码。那么我觉得第一个应该推翻的就是oop了,回归到最原始的basic。

VB只能写些小程序,程序一大就乱得无法控制了。
就象盖一个狗窝,用锤子和锯子就可以了,要盖大楼,还是得用复杂的机器

 回复 引用 查看   
#6楼2010-04-19 09:40 | zsea      
在哪听的?
 回复 引用 查看   
#7楼2010-04-19 10:30 | 横刀天笑      
引用我曾经对面向对象进行过一些探索,如何向人解释面向对象这个东西的确是很难。在经历过多次的尝试和自己的总结之后,其实面向对象的思维很简单,就是你日常做事情是怎样做,那么面向对象的思考也跟其一样。可以这么说,拿到一件事情,抛弃计算机...

人的思维过程是面向对象的么?我倒觉得是过程式的,我们要做一件事儿往往是先做什么,后做什么,再做什么,一般人很少人拿出几个物,然后再让这些物交互吧
除非你是领导,领导做一件事儿,就会想一堆人出来,然后让这几个人去干

 回复 引用 查看   
#8楼2010-04-19 10:37 | 横刀天笑      
再说,我觉得面向对象重要的是抽象能力(其实不止OO),能在很多具体的东西里抽象出共同的本质。
就像艺术一样,来自生活,但要高于生活,OO也是,来自实际,但要高于实际,但实际了,就会很难面对未来的变化

 回复 引用 查看   
#9楼2010-04-19 11:19 | 刘领福      
路过~~~,观注
 回复 引用 查看   
#10楼[楼主]2010-04-19 12:01 |       
@横刀天笑
我倒认为面向对象实质是分而治之,也就是责任制。我说的人的思维过程是站在大角度说的,小角度当然是过程式,面向对象程序的最终实现不都还是有一个一个的过程式的方法构建起来的么?这两者并没有矛盾的地方。

 回复 引用 查看   
#11楼2010-04-19 13:05 | Prime Li      
人类那时进化成精灵了,精灵的特性是本身自己就是超级计算机,也就是生物计算机的发达状态,到时候想一想就可以有结果了,根本不需要编程。
 回复 引用 查看   
#12楼2010-04-19 13:40 | 蜡人张      
Mark
 回复 引用 查看   
#13楼2010-04-19 15:03 | 晴空      
@五星
"VB只能写些小程序,程序一大就乱得无法控制了。
就象盖一个狗窝,用锤子和锯子就可以了,要盖大楼,还是得用复杂的机器
"
这个说话不负责任,没java之前有多少大系统是vb写的,那时候vb的地位比现在C#的地位高多了~

 回复 引用 查看   
#14楼2010-04-19 18:21 | 千江月 万里云      
"VB只能写些小程序,程序一大就乱得无法控制了。

一心而已

 回复 引用 查看   
#15楼2010-04-25 09:06 | 暮夏      
我很菜,是否linq和jquery类似。
 回复 引用 查看   
#16楼2010-06-03 20:28 | richardzeng      
面向对象说白了就是所有事物都是对象,编程的时候把自己想像成那个对象。但是从系统的设计来讲应该会有约束管理这个对象的对象(事物)