关于编程语言的思考,到底怎样才能做出优秀的产品

关于编程语言的思考,到底怎样才能做出优秀的产品

任何事物总有优点,但也有缺点,编程语言也不例外。

我想就我已经所学过的C,C++,语言谈论。

学了C,会使用了一些简单的库,通过使用函数,实现复用。但没有OO概念。

学了C++,学到了OO概念。

C语言的优缺点:

    优点:1、简洁紧凑、灵活方便

 2、允许直接访问物理地址,对硬件进行操作

 3、生成目标代码质量高,程序执行效率高

 4、可移植性好

缺点:1.C语言的语法限制不太严格。

        2. 指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。

C++的优缺点:

    优点:

             与c完全兼容,性能高

     缺点:

        由于本身的复杂性,复杂的C++程序的正确性相当难于保证。

C++复杂性的根源

    在我学习C++的时候,总是遇到了一些难以理解的东西,由于太自由,而程序员水平太低,总会出bug。我开始觉得C++复杂。曾经想精通C++弥补数据结构上的不足。但是这个想法不太现实。因为精通C++是个大难题,就因为C++本身的复杂性。

下面我引用网络上的http://blog.csdn.net/myan/article/details/148900

1.C++的表面困境来自两方面,一是开发效率低

2.C++复杂的根源在于三大约束:与C的完全兼容、静态类型检查、最高性能

3.在三大约束下,C++未能完善对于面向对象思想的支持,未能建立强大的动态能力,从而使得C++在OO这个单项上存在本质缺陷。事实上,C++的过程、OB模型相当成熟和稳定,而泛型模型,就单项来说,除了语法丑陋之外也没有大的问题

缺陷集中体现在OO模型的实现,并因此干扰了其他几个范式的完整程度。然而,OO的缺陷绝非设计者的偏执,其原因在于三大约束。如果坚持三大约束,则即使再重新设计一次,结果也与今日相差不远。Stroustrup在多种场合表示,对C++的设计没有大的后悔之处,意思就是这个。侯捷先生早在2001年初即对我说,C++在OO上不及Java,当时体会不深,认为没有大一统的单根类库会使设计更加灵活,后来又认为凭借GP可以抵消OO的不足甚至超越之,现在看来即使不是不可能,这条道路也必然是艰辛异常,成败难以预料。

4.C++基础类库的建设只能进行到很低的高度上就停下来,因为再往上走就面临重重困境和无穷无尽的争论。C++标准库实际上是一个距离应用相当遥远的非常基础的程序库,其主体部分只相当于Java中System和Util两个package。而C++宁可停在这样的低层次,也不愿意放弃三大约束中的任何一个。这种执着使得高层标准库设施的建立异常困难,使用也不容易。Boost库中相当部分组件的易用性不佳。

5. 不完善的异常机制则是在木已成舟的情况下迫不得已的设计。

总结    

学习编程语言,通语法能实践,不过十分之一。

真正重要的是掌握其多种多样的实用的模式。

这些模式才是体现了语言精神的东西。未掌握各种语言中的主要应用模式,则应羞于用"会"字。真正要"掌握"语言,则我等凡人,诸事缠身,非得集中精力学习实践一两年,将该语言所擅长领域的应用问题熟悉过一遍,才有可能。

若论精通,则十年也不容易。Henry Spencer用了30年C,仍乐此不疲;Pragmatic Programmer中评价Ruby说,学上四个小时就可以用它解决实际问题,但是10年之后还为它层出不穷的新意感到惊讶。偶见有人举出自己"精通和掌握"的工具和语言,动辄长达八九上十种,实为笑柄。真正掌握一种,已经是难能可贵,熟练掌握两种层次不同,思维不同的语言,应是有抱负的程序员的自我要求。何况如今之软件开发涉猎甚广,仅通编程层次还显不够。不过总之百招会不如一招精,做什么工作都要有自己的过人之处。

我个人认为,还应掌握数据结构,算法。通过ACM来练习算法与数据结构。

总之,编程语言不过是工具,学好数据结构、算法、设计模式并且熟练掌握,才是做一个优秀程序员的要做的事。只有这样才能做出优秀的的产品。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-01-07 20:30  Talbot3  阅读(285)  评论(0编辑  收藏  举报