2011.10.23 摘录
2011-11-26 09:41
330 查看
1,pongba
为什么要学习(并使用)C++
显然,如果找不出要学习C++的理由,那么谈什么“正确的学习方法”等于是废话。
首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。
底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。即便是C++的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。
......但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。......
最最关键的是:这些书当中介绍的内容与成为一个好程序员根本毫无关系,它们顶多只能告诉你——嗨,小心跌入这个陷阱。或者告诉你——嗨,你知道当你(八辈子都不一定遇到)遇到这个需求的时候,可以通过这个技巧来得以解决吗?结果读了一本又一本之后,你脑袋里除了塞满了“禁止”、“警戒”、“灯泡”符号之外,真正的编程素质却是一无长进。又或者有这样一类书,热衷于解释语言实现背后的机制,然而语言特性本质上是干嘛用的?是用来在实际编码中进行抽象的(说得好听一点就是“设计”),不是用来告诉你这个特性是怎么支持的。比如我就见过以下的情景:面试官问:“你知道虚函数吗?”得到的回答是一堆关于虚函数表机制的解释。面试官又问:“那虚函数的好处是什么呢?”到底为什么要虚函数呢?得到的回答是:“恩…啊…就是…多态吧”(这时已经觉得回答不够深刻了)。再问:“那多态是干嘛的呢?”哑口无言。
为什么要学习(并使用)C++
显然,如果找不出要学习C++的理由,那么谈什么“正确的学习方法”等于是废话。
首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。
底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。即便是C++的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。
......但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。......
最最关键的是:这些书当中介绍的内容与成为一个好程序员根本毫无关系,它们顶多只能告诉你——嗨,小心跌入这个陷阱。或者告诉你——嗨,你知道当你(八辈子都不一定遇到)遇到这个需求的时候,可以通过这个技巧来得以解决吗?结果读了一本又一本之后,你脑袋里除了塞满了“禁止”、“警戒”、“灯泡”符号之外,真正的编程素质却是一无长进。又或者有这样一类书,热衷于解释语言实现背后的机制,然而语言特性本质上是干嘛用的?是用来在实际编码中进行抽象的(说得好听一点就是“设计”),不是用来告诉你这个特性是怎么支持的。比如我就见过以下的情景:面试官问:“你知道虚函数吗?”得到的回答是一堆关于虚函数表机制的解释。面试官又问:“那虚函数的好处是什么呢?”到底为什么要虚函数呢?得到的回答是:“恩…啊…就是…多态吧”(这时已经觉得回答不够深刻了)。再问:“那多态是干嘛的呢?”哑口无言。
相关文章推荐
- Express 摘录 (1)
- 多线程编程指南摘录三:Run Loops(1)
- 《高质量C++编程指南》摘录2
- java面试题摘录
- C#图解教程摘录-值类型和引用类型存储位置
- Java中的回调(摘录)
- 微服务起源及实践——”微服务哪些事“摘录
- 余闲与稀缺的一些思考摘录
- [摘录]优势谈判简述
- 摘录:sqlserver2008驱动问题
- [摘录]第8章 与非美国人谈判的技巧
- Impala与hive相关知识点摘录
- 《将来的你一定会感谢现在拼命的自己》摘录与感悟
- 【2017-01-09】 资料链接摘录
- Influxdb-官方文档摘录
- Go语言圣经:基础数据类型、复合数据类型、函数、方法章节摘录
- 算法题摘录一
- 月亮和六便士摘录
- 《程序员修炼之道》摘录
- 《Go语言实战》摘录:6.5 并发 - 通道