语言一方面 更重要还是要对 代码执行的所造成的结果的理解 知道自己写的代码 对内存空间进行了些什么操作 如果不理解内存,很多代码执行效率都很低,就好比vector和list 如果不区分两种类型的区别而觉得可以随便替代使用 那你的代码绝对好不到哪去 不管是汇编 还是 c c++ c#都一样 要说语言强弱 那更多取决外部因素 比如整个项目对应的模块全是用 c# 你用个c++跟这些交互不是找事?
如果连vector和list都分不清楚实现的区别,我想他连了解C++都算不上 使用C++开发大型程序,除了掌握C++的语法外,我想至少有几个方面需要深入了解: 1. Effective 也就是如何使程序更高效,一些C++使用中的基本问题 参考书有Effective C++, More Effective C++, Effective STL等 2. Exceptional 如何编写异常安全的程序,如何保证程序申请的资源在发生异常时能够得到释放 参考书Exceptional C++, More Exceptional C++ 3. Object Model 我想每一个合格的C++程序员应该尽量去了解编译器实现,C++标准制定的一些底层机制 很多人说C++比C臃肿,可能会降低运行速度。那作为C++程序员,你应该知道每个C++特性,编译器为此要付出多少代价(相比C),时间上的,空间上的,那一些是编译器可以优化的,等等 参考书Inside the C++ Object model 4. template template是提高C++使用水平的一个重要组成部分。毕竟很多时候纯OO不能解决所有问题,在3中,也会看到OO所带来的cost。另外,我们想在编译器做尽量多的工作,template可以完成在编译器的很多计算。 熟练掌握偏特化,类型推导,traits等技法,是template的基本内容。再者,应该知道如何扩展stl容器,以及iterator的实现 参考书Generic Programming and STL, STL源码剖析, The C++ Standard Library Extensions, Extend STL, Volume 1, C++ Template Metaprogramming 5. Design Pattern 这一部分我就不多说了,基本上是不分语言的。可以在很多大型程序中看到他们的实现,至少在我们的工程中,基本上每种模式都是有的。10年,或许对于C++来说,也仅仅算是入门
你这句话颇令人费解啊。
C++就是对面的村嫂,五大三粗,风风火火,里里外外一把手
C#就是酒店坐台的小姐,风情万种,人见人爱,谈谈情可以,要娶回家,你敢吗?
用.net开发速度快,稳定,成本低,便于维护。如果是要求很高的高端仪器,大型服务器,那就用C吧.C++介于两者之间,比较尴尬.
程序员应该是讲究理论和方法功底的,而不仅仅是使用c,他们应该达到这样的境界:什么语言拿来就用,遇到什么问题就解决什么问题。
其实我使用过多种语言:机器码、汇编/宏汇编、algo60、fortran77、pascal、prolog、lisp、c/c++、basic、ada、这些年陆续使用了vb、vb.net、java、c#还有类似script的东西,用这些语言解决了具体的问题,体会是:在语言之间的转换没有任何障碍,要说有障碍的话就是快速熟悉每种语言的开发平台。
不过2009年《程序员》杂志有个统计:c程序的工资收入最高,就业容易,我想这只代表一种流行和应用领域的广泛,如单片机、嵌入式开发等。
如果讲究点追求纯c的东西,c那东西确实生涩,是最不容易读和使用的一种语言,是代码写过一段时间后最难再读懂得语言,尤其是指针的使用,所以后来的语言都回避了这一点,如c++、java、c#等,其实后来的改进语言都潜在地强化了指针的使用,因为没有指针,就无法想象怎样使用类和对象实例。
我们正在开发的软件,也就只有高层几个UI相关的project/solution是C#,其他的都是C++
尽管UI可以使用C#,但最主要的exe使用的仍然是C++,也就是说WPF开发的只是软件支持的一种UI风格而已
源代码文件数接近10万,近千个solution,编译一次要是十几个小时
为什么选择C++,相比C,有高度的抽象性,软件不是只为追求效率而开发的,可扩展性,易于管理,尤其是大规模的时候,是非常重要的
相比C#,java,C++的优势是操作底层的能力,能够以最小代价实现抽象,成本能够由开发者控制。如果不能控制细节,到上层会越来越臃肿
高度的抽象型不是c++唯一,也不是某个语言的唯一,它与算法或数学有关,也不知道你是从哪里抄来的这段话,真是荒唐。什么“大型的”、“可扩展性”、还有什么“大规模”,简直与c++不着边际,说是实在的,c++的唯一优点是支持面向对象和带有c的兼容性罢了。
看来你是真不知道新的开发平台和架构了,怎么尽说些20年前的话。还在说“我们正在开发软件...”云云,真不知道你是用的是什么“先进”的开发平台封闭在某个角落里,实在是有点说外行话了。
都是各有个的优势的了,具体是看做什么了.\
如果没有具体环境真的非常的不好说了!
公司有synopsys cadence Ansys NASTRAN autodesk(AutoCAD Inventor) ug Dassault(catia solidworks) PTC(pro/e)等
就算一个基本的3D/2D CAD Kernel,也没见市场上有成熟的.net或java版本(java确实有,但不会有任何大公司采用)
还要支持数据的显示,存储,选择,编辑,分析等基本功能是有.net和java架构,但主要是针对业务流程快速开发比较有效,但毕竟不是所有的软件都是业务类型的
难道只有搞业务,编写客户逻辑的才是IT公司?
像sysnopsys, autodesk, dassult等公司的客户也有千千万万,每年也推出大量新的产品
知道自己写的代码 对内存空间进行了些什么操作
如果不理解内存,很多代码执行效率都很低,就好比vector和list
如果不区分两种类型的区别而觉得可以随便替代使用
那你的代码绝对好不到哪去
不管是汇编 还是 c c++ c#都一样
要说语言强弱 那更多取决外部因素 比如整个项目对应的模块全是用 c# 你用个c++跟这些交互不是找事?
使用C++开发大型程序,除了掌握C++的语法外,我想至少有几个方面需要深入了解:
1. Effective
也就是如何使程序更高效,一些C++使用中的基本问题
参考书有Effective C++, More Effective C++, Effective STL等
2. Exceptional
如何编写异常安全的程序,如何保证程序申请的资源在发生异常时能够得到释放
参考书Exceptional C++, More Exceptional C++
3. Object Model
我想每一个合格的C++程序员应该尽量去了解编译器实现,C++标准制定的一些底层机制
很多人说C++比C臃肿,可能会降低运行速度。那作为C++程序员,你应该知道每个C++特性,编译器为此要付出多少代价(相比C),时间上的,空间上的,那一些是编译器可以优化的,等等
参考书Inside the C++ Object model
4. template
template是提高C++使用水平的一个重要组成部分。毕竟很多时候纯OO不能解决所有问题,在3中,也会看到OO所带来的cost。另外,我们想在编译器做尽量多的工作,template可以完成在编译器的很多计算。
熟练掌握偏特化,类型推导,traits等技法,是template的基本内容。再者,应该知道如何扩展stl容器,以及iterator的实现
参考书Generic Programming and STL, STL源码剖析, The C++ Standard Library Extensions, Extend STL, Volume 1, C++ Template Metaprogramming
5. Design Pattern
这一部分我就不多说了,基本上是不分语言的。可以在很多大型程序中看到他们的实现,至少在我们的工程中,基本上每种模式都是有的。10年,或许对于C++来说,也仅仅算是入门
C#支持序列化,你知道MS在序列化背后做了那些工作,代价又是怎么样的?
有没有遇到过反序列化运行时间反常的情况,本来几十k的数据正常只需几十毫秒,却用了1分多钟?
如果你准备用C++实现,如何重新设计?
当然可以用boost的序列化库来完成工作
但是我们有新的需求,很多待序列化的数据是为了加速查询而创建的,保存的是指针,如何序列化指针?
我们需要支持指针的序列化库,如何设计?有两点需要注意的:
1. 支持任何类型,包括build-in的类型,用户自定义的类型,还有指针,反序列化时进行类型检查,包括不同类型指针的检查
2. 效率,如何使OO带来的附加cost最低,build-in类型怎么处理,为了完成指针的类型检查,如何设计指针类,等等
c++和c#谁速度快?c++程序员答:c++快。c#程序员答:
1、程序快慢和算法有很大关系,算法不同速度不同。
2、程序快慢和人有很大关系,高手写C#比低手写c++快
3、c++开发效率慢,不如c#
4、人们越来越多的使用c#而不是c++,就是c#强大的证明
5、在汇编、c语言程序员眼里,c++就是低效率
6、你为什么不去用汇编,为什么不去用机器语言?
7、xxxxxxxxx
8、……………
很简单,在计算机科学的领域,c和c++确实比c#要有用。c#现在所在的领域,只不过是软件工程的部分罢了(另外还被java和c++瓜分了绝大部分),而c语言几乎涵盖整个计算机科学领域。
别以为自己掌握些什么模式、算法、uml、架构就是掌握了编程,在整个cs领域,这只是相当小的一块罢了。真是夏虫不可语冰。
反过来说,这几部分哪怕只有一部分真的掌握了,也是很NB的。