huaxiazhihuo

 

一点反省

    好久没有上博客了,再次看看之前的文章了,觉得很难受,除了批评MFC的那篇有点意义之外,其他都是在放屁,如果误人子弟了,在下很不安,并且里面还有很情绪化的倾向,本来应该删除,免得继续祸害初学者。但是,应该勇于面对自己曾经犯过的错误,就让它留着吧,只是祈求后来者,不要再看了。
    有一种错误的认识,说什么编程语言不重要,编程思想才重要,这种认识很没有意义,何为编程思想,只怕说这句话的人也不是很清楚,至于编程思想包含了哪些内容,那更加是她没法想象得到的广阔天地。当然,思想很重要,但是,无论多么高妙的思想,终究还得靠语言来表达。而且,有些语言表达某些思想,就是要比其他语言要直接,要直白,并且所谓的思想的有些理念本身就是语言的重要组成部分,这种语言还要求学习者要经历语言的洗礼,从而尽快的掌握所谓的编程思想,以便能初步使用它。然后,又有些语言天生残疾,无论如何整顿,就是没法表达某种编程思想,好比JAVA。总之,语言的选择,应该是很严肃的问题,不可等闲视之,至于思想,那也是通过具体的语言才能领悟。
    不管对于C++有多么深厚的感情,但是,确实没必要让自己吊死在一个树上。走出了那片天地,开阔视野之后,再回来,可以更好更快的处理原来领域上的问题。所以对于有志于CPPER,就是不要再C++各种语言细节上死钻牛角尖,必须多学习几种语言,吸收他们的优点,然后回来拟补C++本身的很多不足,学习其他语言,其实也是在学习C++,并且是更好地学习之法,因为这样,才能了解到C++的不足,才知道为了拟补其先天的不足,是怎样的努力,才设计出那些逆天的语言复杂性。
    个人感觉,C语言弱智(将太多的事情交给程序员来做,美其名曰信任程序员,搞得码农一天到晚死钻细节,又由于语言的抽象能力严重缺乏,所以很多事情就是吃力不讨好。当然也要承认,人写出来的代码,始终要比编译器出来的要好要可控,起码某种形式上,但是有必要吗)。至于C++,的确强大,自由,但是,她真的是丑陋无比,由于本身的野心过大,导致其语言核心无比的模糊,想要很好的使用,必须深刻系统的学习其静态类型系统和各种类型演算,因此,模板元编程必须基础十分扎实,不是为了用MPL写代码,而是学了之后,才能更深刻的感受到C++的类型系统(某些人十分反感template,不知所谓,殊不知,没有了template,C++的威力将降低一大半,还有,C++的各种奇技淫巧和宏,也在template这里大放惊人异彩。学了C#和java的泛型之后,才惊诧C++的template的功能如此的变态厉害,所谓的图灵完备,原来是这么回事)。此外,还要知道C++的种种不足,比如GC,比如严重残缺的动态类型信息,比如……(好吧,想不出来了),但是,这些都不是问题,C++非常神奇,对于语言上的种种不足,通过有些人种种奇技淫巧,历经千辛万苦,终于可以实现了,但是,最后出来的东西,始终还是没有语言层面上直接支持的来的好,并且有些还不免很丑陋,这是必须的,不过,C++11出来之后,语言的各种不足,都有不同程度的改善,造轮子时可用的材料也多了,最后,得益于C++11的新特性,轮子的外观也可以更好看。
    C++的学习教条,当然,重中之重,是,恳请不要学习C++,现实的很多很多问题,都可以不必C++来搞,那些嵌入式的东西,与硬件紧密相关的,C其实很能够胜任了,其实,C还是很好地。
    1、忌将精力都放在C++上,多学习学习其他语言;2、忌学MFC,这个东西,碰都不要碰;3、不要用C++解决所有的问题,很多问题用其他语言来解决效果会更好,无论开发效率还是运行效率;4、眼界很重要,……。作为C++的死忠,说这些实在有悖于对C++的感情,其实也不是,只是曲线救国之法,因为,要驾驭C++的种种奇怪的复杂,的确需要C++以外的视野。C++的确不是人人都能使用,合格的C++猿不但要拥抱奇技淫巧,还要能发明出更好的奇技淫巧,没有最好的奇技淫巧,只有更好的奇技淫巧,C++就是用来创造奇技淫巧的。
    窃以为,对于语言学习者来说,特别是C++猿,以下几种,C#的实用,scheme的优雅,haskell的严谨简洁,都有必要的学习学习。对了,还有smalltalk,但是考虑到面向对象本身的问题,就不推荐了。至于其他语言,在下接触不深,就不敢多嘴了。对了,还有设计模式,这东西还是很好的,特别是在面向对象的时候。至于以前说到的消息发送,纯属无稽之谈,这东西反人类,那是由于C本身的抽象能力不足,才搞出来的一个怪胎,无奈之举。对于比C更高级的语言,完全没必要再模仿了。设计模式的一大特点在于把模式的实现完全固守在静态类对象上,这样理解起来确实方便,但是,带来的问题,就误导了某些无知的读者,以为必须一定要用静态的面向对象的语言(在这一点上,JAVA是最彻底的实践者)来实现模式,以至于,为了实现模式,要写很多很多不必要的狗屎般的代码。其实,设计模式只是思想,书中的实现只是示范而已,大伙儿不必死盘硬套。对了,对于C++沉思录那道著名的例题,用设计模式做出来的效果,始终感觉很别扭,较好的思路是组合运算子。
    互联网上的有害信息真多,很不幸的是,之前写了那么几篇狗屁不通的文章,实在惭愧。

posted on 2013-04-28 22:55 华夏之火 阅读(498) 评论(2)  编辑 收藏 引用

评论

# re: 一点反省 2013-06-17 14:59 panovr

推荐再了解一下Objective-C语言  回复  更多评论   

# re: 一点反省 2014-09-27 08:12 渡世白玉

学习了、、、
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜