语言及其应用

原创 2007年09月17日 17:00:00

我本来就《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++里呢?谁知道加号有没有做过运算符重载。

duyanninglaibach0304所说,既然用了就要了解,这是没错。但这只是站在一个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,这也就不足为奇了。

语言本身主要是一个技术问题,而语言的应用则需要面对更多技术以外的问题。

 

Prolog语言及程序设计

本人的PPT是针对闫净斌所著《Prolog语言教程》制作的。
  • gongxifacai_believe
  • gongxifacai_believe
  • 2016年03月28日 20:21
  • 1405

鸽巢原理及应用

利用鸽巢原理解题
  • xuhx
  • xuhx
  • 2010年10月08日 20:29
  • 1409

《线性代数及其应用》总结1 整体理解

一、矩阵和线性代数的关系 第一,众所周知,线性代数的一个问题是解线性方程组。矩阵是一种用来简化线性方程组表示的工具。 第二,矩阵可以表示一种线性映射,称为矩阵映射,写做T(x) = Ax,其中A是...
  • vincent_hbl
  • vincent_hbl
  • 2018年01月06日 19:54
  • 63

《线性代数及其应用》

【0】README0.1)以下内容转自: http://blog.csdn.net/ljbkiss/article/details/7194719【1】正文干货 1.1) 断断续续的终于把 《线性代...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2015年12月27日 17:26
  • 932

完整详尽的二叉排序树性质及源码和注释 C语言 可直接运行

/** *二叉查找树的性质: * 1)若其左子树不空,左子树上所有节点的值均小于它的根节点的值 * 2)若其右子树不空,右子树上所有节点的值均大于它的根节点的值 * 3)它的左右子树也分别为二叉排序树...
  • daringpig
  • daringpig
  • 2012年06月14日 14:26
  • 3737

斯坦福大学公开课——傅里叶变换及其应用笔记

傅里叶变换是傅里叶级数的极限形式。 傅里叶级数是研究周期现象的(物理的),周期现象分为时间上的周期和空间上的周期,空间上的周期源于对称性。而有时候,这两种周期现象是共存的,比如:波。 ...
  • liminwang0311
  • liminwang0311
  • 2014年08月26日 23:14
  • 3277

〈灰色系统理论及其应用〉第7版,刘思峰 P153例7.3.1

%〈灰色系统理论及其应用〉第7版,刘思峰 P153例7.3.1clear all;clc;close all X0=[6,20,40,25,40,45,35,21,14,18,15.5,17,15];...
  • lishoubox
  • lishoubox
  • 2015年10月18日 16:51
  • 2102

求 人工智能及其应用 蔡自兴 徐光佑 版的

求 人工智能及其应用 蔡自兴 徐光佑 版的 邮箱604258506@qq.com  感谢!
  • donglipinglp
  • donglipinglp
  • 2010年03月21日 11:26
  • 479

《结构方程模型及其应用》学习笔记0504第一、二章

《结构方程模型及其应用》学习笔记0504第一、二章
  • xiaopchao
  • xiaopchao
  • 2015年05月04日 16:31
  • 1096

usb接口芯片ft245bm的功能及其应用

通用串行总线USB(Universal Serial Bus)由于具有数据传输速率高、易于使用、支持热插拔等特点,越来越成为一种流行的计算机通信接口。FT245BM芯片是由FTDI(Future Te...
  • originalsinQ
  • originalsinQ
  • 2014年03月04日 13:51
  • 1100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:语言及其应用
举报原因:
原因补充:

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