首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

工作几年面对语言的疑点

2014-01-01 
工作几年面对语言的疑问!工作一些年,一直使用c语言开发,开发过特性,做过产品!项目有大有小,大的百万行级别

工作几年面对语言的疑问!
工作一些年,一直使用c语言开发,开发过特性,做过产品!
项目有大有小,大的百万行级别,小的几万行级别!
但是对于为什么用c语言开发都没有自己清晰的认识!

之前认为大项目用c语言开发的优势在于:所有的问题都无所隐藏,因为大的项目功能复杂度高,如果用高级语言,如果出现不可预期的结果就会导致非常严重的后果。
基本的c语言优势:比如说效率高等这些对于大项目来说都不是必须的,因为java和c的效率差别不会非常大。主要看需求。除非是嵌入式。

请教各位:
    用c语言开发大的工程他的优势在哪里。
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

工作一些年,一直使用c语言开发,开发过特性,做过产品!
项目有大有小,大的百万行级别,小的几万行级别!
但是对于为什么用c语言开发都没有自己清晰的认识!

之前认为大项目用c语言开发的优势在于:所有的问题都无所隐藏,因为大的项目功能复杂度高,如果用高级语言,如果出现不可预期的结果就会导致非常严重的后果。
基本的c语言优势:比如说效率高等这些对于大项目来说都不是必须的,因为java和c的效率差别不会非常大。主要看需求。除非是嵌入式。

请教各位:
    用c语言开发大的工程他的优势在哪里。


你的观念有很大问题,其实大型工程正是C语言的劣势所在。

楼主将软件工程的知识都拋到九霄云外了么?正是基于算法分解的语言在大型工程中低劣的复杂度掌控能力,才导致了软件危机的发生。一般而言,除非无更好的选择,C语言不是大型工程的首选。

此外,C属于高级语言,不是低级语言。


其实我也有个疑问,很多人认为C语言就是搞搞嵌入式等小项目,但Linux内核就是C语言开发的啊。。。


操作系统是性能敏感场合,还有哪个语言比C/C++更合适?
[解决办法]
C很关注limits,各种空间或时间上的limits
C++、Java等很少关注或刻意避开各种limits
[解决办法]
做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

[解决办法]
引用:
Quote: 引用:

相对简单,认真学习的话最多1年就能成高手。


个人不敢认同:做了这么多点c语言开发,越来越发现其复杂,因为他很自由,所以没有人告诉你怎么去做,但是正是其自由,所以都可以做。

正常工程中用到的代码,C程序员1年之后都应该能看懂并了解为啥这么写。
就算是IOCCC那种级别的混乱代码也应该能看懂。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

工作一些年,一直使用c语言开发,开发过特性,做过产品!
项目有大有小,大的百万行级别,小的几万行级别!
但是对于为什么用c语言开发都没有自己清晰的认识!

之前认为大项目用c语言开发的优势在于:所有的问题都无所隐藏,因为大的项目功能复杂度高,如果用高级语言,如果出现不可预期的结果就会导致非常严重的后果。
基本的c语言优势:比如说效率高等这些对于大项目来说都不是必须的,因为java和c的效率差别不会非常大。主要看需求。除非是嵌入式。

请教各位:
    用c语言开发大的工程他的优势在哪里。


你的观念有很大问题,其实大型工程正是C语言的劣势所在。

楼主将软件工程的知识都拋到九霄云外了么?正是基于算法分解的语言在大型工程中低劣的复杂度掌控能力,才导致了软件危机的发生。一般而言,除非无更好的选择,C语言不是大型工程的首选。

此外,C属于高级语言,不是低级语言。


其实我也有个疑问,很多人认为C语言就是搞搞嵌入式等小项目,但Linux内核就是C语言开发的啊。。。


操作系统是性能敏感场合,还有哪个语言比C/C++更合适?


以前c++之父用c++开发过操作系统,失败了,后面分析说是由于其不可预知性太高(没有c语言纯粹)导致的,所以有一段时间我都认为c语言最大的优势就是其简洁,差不多可以说都是原子操作,所以对所有的细节的操控性强


BJ开发过操作系统?很遗憾,虽然我一直比较关注BJ,也跟其本人通过讯,但我的确未听说过BJ开发过操作系统这回事,我倒是听说过linux使用C++开发过操作系统并且失败了,而且还发出过与你的描述类似的抱怨,我依稀记得linux对着string或者vector什么的(偶记不太清楚了),反正是标准库中的一样东西,大喊“鬼才知道那东西的底层会发生什么事情?”。

虽然偶不可能与linux相比,偶也很尊敬linux,但这并不能阻止偶对上述传言的质疑。

偶认为,不管linux还是楼主,都犯了一个错误,都没搞清楚哪些代码是C,哪些是C++,请楼主思考一下如下语句的结果:

printf( "this statement is of C or C++?" );

想明白了这个问题,你就想明白了“C++能否开发操作系统”这个问题,当然也想明白了linux的话存在什么错误。

C++是一个庞大的工具箱,在享受工具所带来的便利的同时,更需要注意工具的适用性。不要做“刀仔锯大树”,然后高喊刀仔没用的傻事。

实际上,用C++开发操作系统甚至比C更便利,不仅能够保持相同的性能,还能从默认实参、引用类型、函数重载、数据抽象、内嵌原生代码生成器等语言设施中得到好处,甚至OOP一样能大展身手,同时,通过元编程将部分运行期计算转移到编译期,还使超过C的性能有了可能。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

工作一些年,一直使用c语言开发,开发过特性,做过产品!
项目有大有小,大的百万行级别,小的几万行级别!
但是对于为什么用c语言开发都没有自己清晰的认识!

之前认为大项目用c语言开发的优势在于:所有的问题都无所隐藏,因为大的项目功能复杂度高,如果用高级语言,如果出现不可预期的结果就会导致非常严重的后果。
基本的c语言优势:比如说效率高等这些对于大项目来说都不是必须的,因为java和c的效率差别不会非常大。主要看需求。除非是嵌入式。

请教各位:
    用c语言开发大的工程他的优势在哪里。


你的观念有很大问题,其实大型工程正是C语言的劣势所在。

楼主将软件工程的知识都拋到九霄云外了么?正是基于算法分解的语言在大型工程中低劣的复杂度掌控能力,才导致了软件危机的发生。一般而言,除非无更好的选择,C语言不是大型工程的首选。



此外,C属于高级语言,不是低级语言。



其实我也有个疑问,很多人认为C语言就是搞搞嵌入式等小项目,但Linux内核就是C语言开发的啊。。。


操作系统是性能敏感场合,还有哪个语言比C/C++更合适?


以前c++之父用c++开发过操作系统,失败了,后面分析说是由于其不可预知性太高(没有c语言纯粹)导致的,所以有一段时间我都认为c语言最大的优势就是其简洁,差不多可以说都是原子操作,所以对所有的细节的操控性强


BJ开发过操作系统?很遗憾,虽然我一直比较关注BJ,也跟其本人通过讯,但我的确未听说过BJ开发过操作系统这回事,我倒是听说过linux使用C++开发过操作系统并且失败了,而且还发出过与你的描述类似的抱怨,我依稀记得linux对着string或者vector什么的(偶记不太清楚了),反正是标准库中的一样东西,大喊“鬼才知道那东西的底层会发生什么事情?”。

虽然偶不可能与linux相比,偶也很尊敬linux,但这并不能阻止偶对上述传言的质疑。

偶认为,不管linux还是楼主,都犯了一个错误,都没搞清楚哪些代码是C,哪些是C++,请楼主思考一下如下语句的结果:

printf( "this statement is of C or C++?" );

想明白了这个问题,你就想明白了“C++能否开发操作系统”这个问题,当然也想明白了linux的话存在什么错误。

C++是一个庞大的工具箱,在享受工具所带来的便利的同时,更需要注意工具的适用性。不要做“刀仔锯大树”,然后高喊刀仔没用的傻事。

实际上,用C++开发操作系统甚至比C更便利,不仅能够保持相同的性能,还能从默认实参、引用类型、函数重载、数据抽象、内嵌原生代码生成器等语言设施中得到好处,甚至OOP一样能大展身手,同时,通过元编程将部分运行期计算转移到编译期,还使超过C的性能有了可能。

其实lunux的抱怨很明显,操作系统要知道运行期的所有状况,而如string,vector的这种封装屏蔽了细节,诸如vevtor成倍增长的方式并不是严谨的操作系统所期望的,操作系统在于绝对控制权上是很必要的,所以c++实际让操作系统开发者很为难
[解决办法]
引用:
感谢大家提出这么多有建设意义的建议,本人也是由于在开发c语言项目时对整个设计框架不理想,和开源代码比起来深感惭愧。深思后,自己感觉是在整体抽象过程中不够仔细,考虑不够周全,然而又没有好的办法去提升。

说到这里很多朋友会说:这就叫矫情,多可能源代码,自然而然的就提升的水准。这话没错,源代码有在看,但是这个要有较高的悟性,你才能把著作为什么这么写的思想感受到,本人就是芸芸纵生中的一普通人,自知悟性有限。只能慢慢的去悟。慢慢的积累。

个人一直认为系统的了解工程方法对于本人这种一般人来说肯定是比野路子有更加好的效果。所以像设计模式这种面向对象的总结性书籍,也就泛泛看过。经过此帖的讨论,感觉个人需要花些时间去把面向对象思想好好感受下,会能够较大的提升自身属性值。

最后再次感谢大家的细心答复。


强烈推荐《面向对象分析与设计》,只是要注意,OOP不是万能的,即使它的适用范围比面向算法、面向逻辑等复杂系统分解方法都要大得多。

此外,光看源码、光写代码是不够的,还需要博览群书,理论结合实际。
[解决办法]
这个问题我的感触比较深,我的转变在一个项目中。那时候我是个c++ fans,我也问过这个问题,好多年前了,那时候我比较年轻。

首先,c语言比较简单,没有太多的概念。同时,他满足了足够的需求。也就是说,一个普通的高中生,懂点c语言语法,就能上手并且迅速融入到工作中去。c++你要知道它的父类的父类的父类,哪个函数是虚的,哪个函数不是。这很复杂,也很难控制。很多人写了一大坨的类,大多数是空的,称之为封装。这太难去跟踪了。c的本质就是给你个简单的接口,输入输出,你不要去考虑太多的事情。

其次,c比较容易进行工程管理。这跟上面也是有关的。一个大型的c项目,比较强调工程而不是编码。打个比方,一个项目像高德积木那样对接起来容易,还是我们要制造个体系(类库)让大家都去遵循容易?我是给你一个输入输出接口容易,还是砸给你个类库容易?

再次,现在的人都很有个性。ok,我们这个项目都用某种类库,就会有人问为啥我不能用boost?ok,你用boost,你离职了我还得找个boost。c是个简单到不能再简单的语言,这很好。难道不是么?

继续,当任务足够拆分到细节的时候。任务是很纯化的。比如说服务器应用,大多数是面向过程的。c和c++有区别么?真要用到c++的时候,这说明问题复杂度比较高(服务器端),比如说游戏。这时候紧密和严格的c的代码已经过去了,c++更像是个脚本,为了完成逻辑而完成逻辑。再差也不会差到哪里,不行了干预就行了。但是主体框架,简单而健康。

c比较强调工程技巧,c++比较让人沉浸在语言技巧。我觉得你的主管很棒,没主持过c工程的主管,算不上构架师,至少有选择性缺陷。把一个项目拆分到极致,送到每个普通程序员的面前,轻松完成任务,整个团队获利,这是个构架师的极致。我远远达不到。c++?我们先封装一下吧,一下不够2下。线程出现很多年了,c++出现很多年了。如果你去问个有经验的工程师,c或者c++我不评论。多进程系统那是基本模式。

热点排行