我本来就《C++不是万能的》一文写了一个续篇,令狐提醒我说:
C++作为一种语言,它拥有任何特性都是没有问题的,并不存在什么“多余的特性”一说。从这个角度上说,C++标准委员会的一切努力都是有意义的。因为它们是在完善C++语言本身。
但是,作为项目开发来说,开发语言并不是唯一的决定因素。没有必要将语言限制在仅使用C++上。在这种背景之下,其它几种语言的组合,可能会比单一使用C++,来得更好。尤其是像C++这样,编译器对标准的实现都未必完整和正确的复杂语言,使用那些过于“高级”的特性其实是会带来风险的。事实上,很多公司在实际使用C++的时候,都会或多或少的通过代码规范进行一些裁减,减少那些“C++高级特性”的使用。
谈这个问题的时候,理论归理论,实践归实践,这样比较好。把语言特性、语言本身发展的争论和语言在项目中应用的争论放到一起,很容易把自己都绕进去的。
我醒悟过来,的确是有些不妥,于是改写成现在这一篇,主要是作为对上一篇中一些评论的回复。
如fastzhao所说,语言问题在大多数时候“只是个信仰的问题”。只是这一次在于Kakurin要把自己的信仰强加于Torvalds。在Kakurin们看来,C++就是万能的,Torvalds不用C++是不对的,但我不这么认为,所以我就掺和了。
祭出Bjarne或标准委员会是一件很可笑的事情,因为正如令狐所说——语言本身和语言的应用是两回事,Bjarne等大师们考虑的是语言本身的问题,我们考虑的应用的问题。
一个人所处的位置决定了TA看问题的角度。脱离位置来谈问题就是空谈。所以在我在前文里反复强调,对于Torvalds的Git以及云风或sunway他们的项目来说,C++并不总是最合适的。他们都是经验丰富的开发专家,在语言的应用层面,考虑得比Kakurin们要全面得多。
不可否认,C++的很多feature都是很好的东西,单是一个template就让多少别的语言用户馋得流口水。但是并不是说C++具有所有C(旧版)的feature并提供更多的可能性,用C++就一定更好。举一个最简单的一个例子:在C里,一句“a=b+c;“,每个C程序员都可以理解,并且通常不会有什么误解,对于C高手来说,甚至可以一眼看出目标代码会是什么样的。但是在C++里呢?谁知道加号有没有做过运算符重载。
如duyanning 和laibach0304所说,既然用了就要了解,这是没错。但这只是站在一个Coder的位置上来看,而作为一名leader,却不可能要求team里 的每一位成员都能做到。dick_song说leader在分配人员的时候就应该知道成员加以区分适当使用,但作为公司特别是软件公司来说,压低人力资源 成本是很重要的,所以leader能用到什么水平的人,其实也没有什么决定权。
duyanning说他想不出有适合C而不适合C++的地方。如果仅仅是从个人使用的技术层面上考虑,我的确也很难想到有什么适合C而不适合C++的地方。但是如果是在一个实际项目的团队应用层面呢?想不出其实只是因为碰到过的状况还不够多。
dogdotnet说的没错,C++只有少数优秀的程序员能够驾驭,但是软件公司要的是生产效率,等不及公司的所有程序员都成长为优秀的程序员,在他们还没有成长起来之前写出来的C++代码不但没有效率,更没有质量。
就我用过的几种主流语言来说,C++无疑是最接近万能的。但是“能”并不意味着“好”。比如说tuple吧,boost里也有tuple,但是跟python简单直接的tuple相比,boost的tuple则明显面目可憎。
刘未鹏在《为什么C++》说得不错,只要谨慎地使用C++,它的确能为我们提供更多可能性。你可以要求自己谨慎并尽可能做到,但是对于团队中的leader,你最多只能要求成员们谨慎,但他们能做到什么样的程度却是个未知数——当然有很多管理方法可以在一定程度上加以控制,比如Code review,但对于公司来说,这又会增加开发的成本。
对了,就是成本!
对 于一个单打独斗的程序员来说,所有成本就是自己,所以C++带来的好处都是实实在在的好处。但是对于一个团队来说,会有很多额外的成本要考虑,比如训练团 队成员达到某个水平所需要的成本,比如Code review的成本,比如某个成员对C++某个特性的误用造成的修改成本……C++的高级特性带来的好处是不是足够补偿这些成本?
综合所有的成本考虑,作为leader可能就不得不在团队中限制使用C++的高级特性,甚至于在某些极端的情况下需要使用C,这也就不足为奇了。
语言本身主要是一个技术问题,而语言的应用则需要面对更多技术以外的问题。
分享到:
相关推荐
《MATLAB语言及其应用》上机指导书是学习MATLAB编程的重要参考资料,旨在帮助读者深入理解和熟练运用MATLAB进行数值计算、符号计算以及图形用户界面(GUI)设计。本指导书详细介绍了MATLAB的基本概念、操作及应用,...
### PLM程序设计语言及其应用知识点总结 #### 一、PL/M语言简介 - **定义**: PL/M(Program Language for Microprocessors)是Intel公司在上世纪70年代开发的一种高级编程语言,专为Intel微处理器设计。 - **特点**...
在"Python语言及其应用"这本教材的第五章中,我们深入探讨了Python的一些核心概念和实际应用。这一章可能涵盖了变量、数据类型、控制结构(如if语句、for循环和while循环)、函数的使用、模块导入、异常处理以及面向...
python语言及其应用mobi,kindle版本
Python语言及其应用第七章练习答案
VHDL语言及其应用
总的来说,"pyphon语言及其应用"这本书涵盖了Python的基础知识和实际应用,无论是对于想要进入编程领域的新人,还是需要提升Python技能的专业人士,都是一本宝贵的资源。通过阅读和实践书中的案例,读者可以逐步掌握...
本书介绍Python 语言的基础知识及其在各个领域的具体应用,基于最新版本3.x。书中首先介绍了Python 语言的一些必备基本知识,然后介绍了在商业、科研以及艺术领域使用Python 开发各种应用的实例。文字简洁明了,案例...
### JAVA编程语言及其应用 #### 摘要 本文旨在介绍近年来在网络中兴起的一种面向对象的编程语言——JAVA。文章详细阐述了JAVA语言的特点、基本数据类型、对象以及其广泛应用领域。随着互联网(INTERNET)的普及和...
总之,MATLAB语言及其应用课程不仅提供了一个系统学习MATLAB的机会,而且为学生将来从事相关领域的研究和工作打下了坚实的基础。通过本课程的学习,学生将能够具备使用MATLAB进行科学计算、数据处理和算法开发的基本...
常用计算机语言及其应用 计算机语言是计算机科学中的一门重要领域,涉及到软件开发、编程、算法设计等多个方面。本文将对常用计算机语言进行总结,并对其应用进行剖析。 1. C 语言 C 语言是一种古老的程序设计...
Python语言及其应用是这本书的核心主题,它涵盖了Python的基础知识和在不同领域的实际应用。Python是一种高级编程语言,以其简洁、易读的语法而闻名,被广泛应用于商业、科研以及艺术领域。本书特别强调了Python 3.x...
本书内容易于理解,而且读起来生动有趣,是编程和Python初学者不可多得的优秀教程。书中首先介绍了Python的基础知识,然后逐渐深入多种主题,结合教程和攻略式风格来讲解Python 3中的概念。每章结尾的练习可以帮助你...
为了让更多的读者能有效掌握Python的使用,入门书籍《Python语言及其应用》应运而生,不仅为初学者提供了坚实的基础,也为进阶开发者揭示了Python的更多高级特性。 该书以Python 3.x版本为核心,以一种条理清晰、...
Python语言及其应用第四章练习答案
本文是由袁涛、孙腾谌1990年编写的《PL/M-96程序设计语言及其应用》一书翻版而来的。录入时是由一小妹完成,此人对计算机语言不了解,录入时错误较多,版面也很粗糟,虽校对过2次,还是发现了些错误! 西安周公:我...
MATLAB 语言及其应用知识点 MATLAB 是一种高效、功能强大、易学易用的编程语言和开发环境,广泛应用于科学计算、数据分析、可视化、机器学习、人工智能等领域。下面是 MATLAB 语言及其应用的知识点: 1. MATLAB ...
Python语言及其应用第二章练习答案