zoukankan      html  css  js  c++  java
  • 关于编程语言的思考,到底怎样才能做出优秀的产品

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

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

    我想就我已经所学过的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来练习算法与数据结构。

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

     

  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/orangebook/p/3509501.html
Copyright © 2011-2022 走看看