• C陷阱与缺陷 附录B Koenig和Moo夫妇访谈


    Alex Stepanov 惠普实验室工作 正在开发的一个C++库   
    向标准委员会提交STL,并建议将其并入标准库。

    就其本身而言,C++是一种非常低级的语言,唯有利用库才能写出高层次的程序来。初学者还不能自己构造库,所以他们要么用现成的标准库,要么自己去写低层次的程序。确实有不少程序应该用低层次技术来构造,但是对于初学者不合适。

    当然是库由于语言细节,这里有两个原因:首先,学生可以不必费力包装低层次的语言细节,从而更容易建立整体语言的全局观念 ,了解到其真实威力。学生在掌握如实使用程序库之后,就会很容易理解类的概念,学会如何构造类的技术。
    更重要的一点是,首先学习程序库,能够使学生培养良好的习惯,就是复用库代码,而不是凡事自己动手。首先学习语言细节的学生,最后的编程风格往往是C类型的,而不是C++风格。它们不会充分地运用库,而自己的程序带有严重的C主意倾向---指针满天飞,整个程序都是低层次的。结果是,在很多情况下,你为C++的复杂性付出了高昂的代价,却没有从中获得任何好处。

    《C++沉思录》提到:“C++希望面对把实用型放在首位的社群”
    “糟糕的手艺人常常责怪自己的工具?”
    “当你手里拿着锤子的时候,整个世界都成了钉子。”
    如果你选择了这样的工具,那么你就必须负责选择合适的设计方案。

    C++在运行时性能上做了一个很好的折中,能够在“一切都是对象”的语言与“避免任何抽象”的语言之间取得恰到好处的平衡。这就是C++的实用型。

    “基于对象”和“基于模板”的抽象机制优先于面向对象抽象机制
    所谓面向对象编程,就是使用继承和动态绑定机制编程。在我们看来,这意味着该程序有两个或两个以上的类型,至少有一个共同的操作,也至少有一个不同的操作。否则,就不需要继承机制。此外,程序中必然有一个场景,需要在运行时从这些类型中挑选出一个,否则就不需要动态绑定机制。

    某些面向对象编程语言,如Python,其所有类型都是动态的,那么技术图书的作者就不会面对这样的问题。例如,C++中的容器类大多数用模板写成,因其可以容纳毫无共同之处的对象,所以要求元素类型必须是某个共同基类的派生类毫无道理。然而,在Python中,容器类中本来就可以放置任何对象,所以类似模板那样的类型机制就不必要了。

    所以,我认为你所看到的问题,其实是因为很难找到又小又好的面向对象程序来做范例,才会产生的。而且,对于其他语言必须烦劳动态类型才能解决的问题,C++能够使用模板来高效地解决。

    除非你首先掌握了构造良好类的技术,否则急急忙忙去研究继承就是揠苗助长。

    《C++沉思录》“用类表示概念”假设我能再记住一句话,你们觉得应该是什么?
    “避免重复”如果你发现自己的程序的不同部分中做了相同的事情,则试着把这两个部分合并到一个子过程中。如果你发现两个类的行为相近,则试着把这两个类的相似部分统一到基类或模板中。

    《C++沉思录》中有两句名言:“类设计就是语言设计,语言设计就是类设计”

    Python和C++程序构成了完美的一对组合。Python程序比相应的C++程序短小精悍,而C++程序则比Python运行程序快得多。因此,我们可以用C++来构造那些对性能要求很高的部分,然后用Python把它们粘在一起。Boost中的一个作者Dave Abrahams写了一个很不错的C++库,很好地处理了C++与Python的接口问题。

    我们应该保持谦虚。

    成为更好的C++程序员。请给我们3个你们认为最重要的建议:
    1.避免使用指针
    2.提倡使用程序库
    3.使用类来表示概念 

    其他著作:
    Ruminations on C++

    中文班序
    本书内容:
    C语言编程中一些重要的经验教训。

    学习方式:
    1、要成为一个优秀的程序员,最重要的无非是学习一种特定程序语言、函数库或者操作系统的细节,而且多多益善。
    2、需要一本索引丰富完备的参考书就已经足矣;
    3、最多可能还需要一位稍有经验的同事不时从旁点拨,指明方向; 

    学习难点:
    难的是那些我们已经了解的东西,如何“运用之妙,存乎一心”。

    掌握学习难点的方法:
    1、学习那些是不应该做的; 
    2、研究一种语言中程序员容易犯错之处; 

    学习方式:
    对一般人而言,最有效的学习方法是从感性的、活生生的事例中学习,
    比如自己的亲身经历或者他人的经验教训。

    书籍推荐: 
    C语言编程:kernighan和Ritchie:The Programming Language,第2版,Prentice-Hall, 1988 
    C语言参考手册:Harbison和Steele: C:A Reference Manual,第2版,Prentice-Hall,1987 
    数据结构和算法: Van Wyk: Data Structures And C Programs,Addison-Wesley,1988 
    可移植性:Horton: How To Write Protable Program In C,Prentice-Hall,1989 
    操作系统接口:Kernighan和Pike: The Unix Programming Environment,Prentice-Hall,1984 
    绞尽脑汁的C语言难题:Feuer: The Puzzle Book,Prentice-Hall,1982 

  • 相关阅读:
    【SpringCloud学习05】Docker
    Gartner 发布 2022 年人工智能技术成熟度曲线:复合 AI、决策智能快速发展,因果 AI 是热点
    华为U8818从系统android 4.06降级为android 2.3.6攻略
    「神奇的锚点定位:探索UniApp中实现滚动定位效果,与1024程序员节同欢,解析技术之美」
    【面经】中欧基金笔经面经
    制作自己的前端组件库并上传到npm上
    同花顺_代码解析_技术指标_EJK
    yolov7改进优化之蒸馏(一)
    lua循环
    [Linux] shell脚本
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126057985