Schlemiel's "学C++就该刨根问底",刨得起吗?
声明一下:不针对个人,只针对其观点。
-----------------
我觉得这个观点太极端了,有误导倾向。
1. 谁在刨根问底?
Schlemiel文中提到的---Type Traits、通用智能指针和Enhanced Binder,typelists、policy-based design、compile-time programming。的确是比较高级的C++技术,但是首先如果它标准化的化,大家就只是在学习,而不是刨根问底了,不能因为捧着一本Standard Liberary 就认为这是在刨根问底。
其次,typelists等还没有标准化的东西,如果没有一些牛人如 Sutter, Andrei等,我们想的到吗?毫无疑问,想不到。就拿Andrei的Loki及实现Loki的技术来说,连Bjarne都承认Loki设计的太聪明了,当初估计也没有人理解/敢于把这个概念向C++社群介绍,Andrei才搬动大牛John Vlissides合作在 C++ Report, March and June 2000写了两期专栏To Code or Not to Code I&II。然后才有了Andrei的Generic<Programming>专栏。 没有Tom Cargill当年Exception Handling: A False Sense of Security的,Excetion 会被C++支持/被我们理解到什么程度?但是,这是我们这些普通程序员力所能及吗?这是我们刨根刨出来的吗?不可否认Expert就是Expert,他们完成革新,然后传播之,我们能赶上就不错了。
再说,我们看到的都是已经成型的技术,试问你知道有多少创新的思想没有实现/失败了?你有勇气自己去写一部分标准库来和当前的标准库比比性能/优雅程度吗,比如Andrei的YASLI。
2. 刨根问底的必要性
得承认,我们大多只是在高度项目进度压力下的为生计努力的普通程序员。所以我觉得把"刨根问底"的工作交给Language Lawyers们去完成,我们关心的是如何用已有的技术来将项目构建出来/必要时得学习提高一下(但绝对到不了发现新技术、新概念,然后向std建议修改语言的地步)。
所以,不刨根问底并不意味着裹足不前,反过来想想,你在一个地方刨的太久,会不会漏掉其他可供学习的技术呢?我现在就感觉接触CORBA有点晚。我估计,这方面,大家多少都有些遗憾的。
3. 写了1. 2. 我就想说3了:)
这是从 gamedev.net 上看的一句话,翻译过来就是:别把知识当智慧,前者使你能够谋生,后者使你享受生活。
4. 一个刨根问底式的测试---auto_ptr , 你懂了多少?
别以为我是一个不喜欢刨根问底的家伙,前一阵子看CORBA不知道怎么就转到auto_ptr的实现上去了,这才知道有些东西还是不要掀开盖子看为好;),不然就有点智商不够的恐怖感觉。
我的问题是:
auto_ptr实现中 那个struct auto_ptr_ref是干嘛用的?
建议:a)ACCU的chairman Francis 都认为这个问题过于微妙,在comp.lang.c++.moderate上建议大家用就行了,不要挖的太深。
b) comp.lang.c++.moderate上有很多相关讨论。
c) Scotte Meyers的More Effective C++ 支持网站上有该问题的一份完整讨论(别看书,书上的内容早都过时了)。
d)不懂就不懂,很多人都不懂,没什么大不了的,Hurb Sutter在新闻组上的一篇回帖中就说他也不太懂(主要是两次转型标准不允许的问题),不信可以去google的新闻组里搜一搜。
5. 我们要高过谁?
Schlemiel 提到“为今天致用而学习,永远没有出头之日;为探索技术而学习,才可能快人一步,高人一筹。”
想问一句,我们要高过谁?我们是在探索or还是在摸索别人5年+ 前已经提出的技术?
6. 写的比较乱,望各位高手指教。
请勿针对个人,针对观点即可。