- 论坛徽章:
- 0
|
原帖由 flw 于 2006-2-26 09:19 发表
其实,C 程序员有相当一部分,是从一开始学语言就接触 C 的,
因此初级 C 程序员中,有相当一部分只学过 C。
我建议,当有了 2、3 年的经验之后,不妨去了解一下其它的语言。
因为当时间久了,你就会觉得有些事 ...
太偏薄了,C目前最大的领域在于嵌入式,不能不提的,C++采用C的编译器,同一款编辑器编出的代码,C++大概只有C的30%效率, JAVA更低,因为他是类型安全的语言,采用的检查机制非常烦琐,同时GC也在一定程度上影响了执行效率;
这里举个具体的例子: 前几年很火的MFC, 虽然是C++架构,但是其中却有无数的宏,在<VC技术内幕>这本书中,作者揭示了这个奥秘: 采用MFC框架如果完全采用继承的方法,速度是不可接受的,MS想到的办法就是采用宏来提高效率.
而至于目前JAVA所采用的机制(注意是目前),在10年前我想大概只有单进程操作系统能跑起他的程序来.
当然,这个问题解决,过程也并不神奇, 这必须感谢摩尔定律, 不过在你以JAVA, C++这些语言为荣的时候,是否也能思索下:同样功能的代码,为什么C实现起来效率会高那么多呢. 摩尔定理所带来的效率的提高,难道仅仅是为了让我们开发程序不再那么辛苦和易错吗?
你之前说的很对, 人在编写代码的时候,不可避免的会犯错, 采用高级语言,如JAVA, C#这样类型安全的语言,从机制上保证了你不会犯某些错误.但是这些错误并非神奇的仅仅为JAVA 或C#这些语言所解决了,其实设计者只是将这些工作交给了你的CPU;更糟糕的是这些问题的解决完全取决于语言的设计者, 他们面对纷繁复杂的用户却只能采用通用的解决方案, 这种缺乏目的性和可变性的手段,从更深的角度来说是束缚了开发者,同时对效率造成了伤害.
高级语言的产生, 并非诞生自技术,而是诞生自市场, 和他状况类似的还有"软件工程"这门学科. 高级语言最大的用处就是减轻了开发者的负担. 比如OOP, 观点很好,但是我们的CPU是OOP的吗?他难道不是一条条指令执行下来的吗?我认为,一台机器, 他如果所运行的程序采用了OOP的思想 就意味着他效率的降低.
作者在这里似乎也挺看不起ASM, 而我却觉得, 如果真想在技术上有一定的深度,ASM一定要学.原因:你的寄存器变量的值不会对你撒谎;而你的GC,我想你不能保证,JAVA GC的设计者也不敢保证.
很多人都很喜欢技术这个词, 但是我认为很不幸的是, 所谓的高级语言的技术,并非应该归于计算机技术.
BTW: 我中间对OOP的一些看法并非要贬低他, 而仅为证明"高级语言的产生, 并非诞生自技术,而是诞生自市场"这个观点的. 软件人才的匮乏是市场问题, 所以我们不得不将部分摩尔定律的效率成果消费掉来解决这个问题. OOP自然也是技术,但是他的诞生为市场而生的, 他和纯粹的计算机技术并不能等同, 我倒觉得他更应该归为"软件工程"领域的技术, 因为他提高的是程序开发的效率而非运行效率. |
|