C++与C#之辩证:圣人与巨人比较

原创 2007年09月25日 15:56:00

最近看了一些C#和.NET的文章和例子代码什么的,感觉入门了,这里发些牢骚,还准备一个水桶装大家的口水,并用这些口水蒸包子。


做 C++ 11年,有些感觉,感觉语言不外乎语言(佛家曰:看山不是是山),很是自诩。做了这么久的C/C++,竟然是:蓦然回首,伊人却在灯火阑珊处。去年想过自己设计语言,参考了D, JAVA, C#, Ruby, PHP, Python 等等,后来又觉得,语言本身不是很重要,重要的只是使用这些语言的人——程序员的接受程度而已。回过头来看看语言生成的目标代码(看看汇编实现)进行过归纳总结,也有些发现,总的来说,高级的语言生成代码的时候会自动给程序加上一些实现,例如构造函数的调用,原来在C的时候要构造起来得显式调用,到了C+ +则由编译器安排;又如模板,就是用一些特定的语法告诉编译器,生成按一定规则预先做一些代码;再说委托,最为本质的就是this指针委托的时候预存、调用的时候放入EAX寄存器。
所以撇开语言语法,我们可以看到,高级的语言会自动给程序加上一些实现,也不外乎如此——这就是看山不是山的初级境界,希望以后能回到“看山还还是山”的更高境界咯,嘎嘎。

现在回到正题,C/C++与C#(或者Java)的比较就是圣人与巨人的比较,不具备可比性。你是想继承圣人的衣钵呢,还是想站在巨人的肩膀上?悉随尊便!

再看一点,你希望未来的语言为你——普通的程序员做些什么呢?有没有简单实现复杂逻辑的的语言啊?结果是,没有,如果你是总统,可以号召一批人为你做这些,而不能指望语言能做这个。既然复杂逻辑不能简单实现,那么总可以稍微简化一些吧?那是可以的。只是稍微简化一点而已。现在大部分的高级语言并不具体的简化某个领域的问题的实现,而是简化了编程本身。

所以高级的语言只能少许简化最终目的问题的解决,而大部分只解决了一些编程本身的问题。简而言之,语言是为程序员度身定做的,越高级,程序员越舒服,自学成才的和喜欢利用别人成果的人越倾向选择这种;而已开始就看到最终解决问题的复杂性的人(戏称学院式程序员, academic programmer)则刚好相反,他们会选择语言的特性来简化最终问题实现的,而不是简化编程本身的语言,这样的语言或许非常难学,例如LISP, CLIPS(C语言产生式处理系统)。

现在看来问题有点清晰了,最终问题的解决被分成2个步骤。第一步编程语言,第二步用此语言解决最终问题。而这2步按照目前的科技水平来说,存在一定的矛盾,就是语言本身的进步会约束使用语言的自由度等因素进而对最终复杂系统的解决产生负面影响,因而对第二步有阻碍作用,难怪外国有风潮倾向于面向语言编程的呢。


对于迷雾中的初学者,也是非常难以选择,这里我推荐一种选择方法及其晋级路径:
[] 如果觉得自己有天分的,能很好的驾驭复杂问题的人应该选择自由度大的语言,路径则是专这样的语言3-5年后涉足其他高级语言补充并积累最终问题(不是解决问题的方法),再学习底层以便更宽广的认识自己所学。往继承圣人的衣钵方向发展。
[] 如果觉得自己天分不足,又想使用别人成果的,就站在巨人肩膀,选择相对高级的语言,何况这些语言(C#,java)有非常庞大大的类库支持呢。路径则是学好相对高级的语言,认识API,从API设计者角度看问题,多看看搜集最终问题并进行归类,往平台架构方向发展。

谢谢阅读! 

辩证看待 C++:后现代系统语言的选择

转自 http://mp.weixin.qq.com/s?__biz=MzA3NTMyOTAwMQ==&mid=2650231272&idx=1&sn=d669112ada129c78533fd45...

【微信征文】辩证:微创新时代的比较创新(By Skyh)

原文:http://djt.qq.com/article-239-1.html       首先,我在一直关注着LBS这个行业,也了解过Allen张小龙的经历和产品哲学,深深敬佩之,从一个程序员到产...

站在巨人的肩膀上,C++开源库大全

目录(?)[-] 标准库框架人工智能异步事件循环音频生态学压缩并发性容器密码学数据库调试游戏引擎图形用户界面图形图像处理国际化Jason日志机器学习数学多媒体网络物理学机器人学科学计算脚本序列化视频...

站在巨人的肩膀上,C++开源库大全

http://blog.csdn.net/chen19870707/article/details/40427645 程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、We...

站在巨人的肩膀上,C++开源库大全

http://blog.csdn.net/chen19870707/article/details/40427645 程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、We...

2014巨人网络C++笔试D卷回忆版

1.        线程同步和互斥的办法都有哪些? 四种进程或线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同...

站在巨人的肩膀上,C++开源库大全

转自:http://blog.csdn.net/chen19870707/article/details/40427645 程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库...

站在巨人的肩膀上,C++开源库大全

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++ Standard Li...

【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们《Visual C++游戏开发》专栏的游戏引擎导论,也希望能通过这...

站在巨人的肩膀上,C++开源库大全

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++ Standard ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++与C#之辩证:圣人与巨人比较
举报原因:
原因补充:

(最多只允许输入30个字)