C++大师Lippman:我对中国程序员的忠告(在CSDN上看到的一篇好文...收藏)

C++语言的创立者,斯坦-利普曼(Stan Lippman) (原文来自天极网,C++语言创立者实为Bjarne Stroustrup)917参加了在北京召开的微软技术大会Tech.Ed2004并做了"The C++ Binding, Integrating a Static and dynamic "的主题演讲。利普曼和天极网记者畅谈了对中国程序员的30岁现象的看法,对C++NET、面向对象等新技术发表了自己的看法。

  天极网:做为C++大师,你认为一个优秀的程序员应该具备什么素质?

  Lippman:不仅是C++,对所有的语言而言,我认为一个好的程序员应该具备独立性,而且要不惧困难,你必须心甘情愿的面对失败。所谓的独立性就是因为有时你要能独处,你必须相信你能处理你明白的事情。我认为一个好的程序员要具备创造性,而管理人员要确保程序员有独立的空间,成为他们自己。

  天极网:中国的程序员被一些人认为是吃青春饭的,程序员好像转向管理职位才有职业发展空间,你怎么看?

  Lippman:我所认识的一些Unix创立者被提升为部门主管,但他们拒绝了提升,回到了程序员的职位上,因为他们认为这是自己能做得最好的地方。总之,最后辞掉了部门主管的职位,回去做研究去了。

  在美国,我们认为一个好的程序员并不意味着他能成为一个好的管理人员。如果仅仅是为了金钱的原因而强迫程序员们去从事管理工作,这与公司的最佳利益是相违背的。因此我们发明了一个所谓的"多层升迁路径",随着技术经验的增长,微软分别为程序员设置了程序员、高级程序员以及MPS等等不同级别的技术职位。微软能认识到你的能力,如果你愿意成为管理人员,当然是可以的,但你不必做你不开心的事情,只用尽量保持你编程的创造性。

  在上世纪八十年代,美国的公司都被一个相同的问题所困扰,起因就是迫使年龄大的编程人员不再从事编程工作。我猜想在中国,随着程序员年龄的增长,这种问题也会发生!

  天极网:你如何看待C++语言的未来和C++C##的关系?

  Lippman:如果你想做web serviceasp等等,c++将不会很适用,因为这个语言不灵活,它太繁复了,它不是为了网络服务(Web service)而设计的。

  C##就是为了网络需求而设计的,.net的理念就是并不是一种语言能解决所有的问题。它不像Java,迫使你只能用一种语言。如果你在开发的时候发现另一个工具更好,那么你就可以选择另一个工具。

  人们总喜欢让事物对立起来。如果有了微软的产品,你就一定要有SUNLinux,因为人们喜欢看他们争斗,即使实际上并不会引发任何争斗。c++就像一把没有把手的刮胡刀,它不可能对所有的事物都适用,就像Visual Basic也不可能对所有人都适用一样。有很多人都使用c++,也有很多人使用Visual Basic,我们还需要其他的语言。c++很难,我们必须拥有难的语言,但同时,简单的工作也需要简单的语言来解决。实际上,没有哪种语言能流行10年。对于c++的未来来说,我想它还是会表现的很好。

  记得1991Java出现的时候,人们预言c++将会消失,可这并没有发生,而是SmallTalk消失了。当Linux出现的时候,人们又说微软有麻烦了,可实际上是Sun有了麻烦。C##并不会威胁到C++,在微软我们在一栋大楼里工作。我相信C++现在表现得很好,在微软起着重要的作用。我们为整个社区做出了很多贡献。

  天极网:你怎么看待面向对象技术的发展前景?

  Lippman:从开始来看,每一种汇编语言的产生都是为了在计算机环境中解决特定问题的。你使用这个语言解决问题,而解决方案将使你面对更复杂的问题,而这个语言可能就解决不了了,这时我们就需要另一种语言了。

  面向对象的编程就是解决数据抽象这类问题而产生的,而面向对象同样面临网络环境下的一些新问题,这就是为什么我们需要一个更具弹性的平台。.NET是一个动态,独立性的语言平台,这也是为什么我希望在.NET上使用C++。我认为.NET很有潜力、是软件进步的方向。

  天极网:在.NET环境下,你认为程序设计有何变化?

  Lippman:我想每一个人都同意这一点,那就是软件是脆弱的。其实我们在软件上不算成功。开发软件所需要的时间太长了,并不是说我们的编程人员不合格,是因为这个工作不符合人类的自然本性,因为你必须像计算机那样进行线性的思索。

  我们目前常用的方法就是将问题分割成更小的部分,然后保证它们连贯。.NET很有潜力,它是一个动态的模型,配套有很多的组件与很好的软件,能自适应的辨识状况、改变或生成代码。程序员是不会改变的,改变的只是工具,我们的职责就是要给程序员配备适用的工具。但目前我们做的还不够。C++C sharp这些语言都只能算过渡性的语言。我们的程序员现在只能用它们,但并不代表将来应该用它们。

  天极网:为了避免30岁时被炒掉,你对程序员有什么建议吗?

  Lippman:我想如果你不喜欢编程,那么编程的生活将是十分恐怖的!而且如果你仅仅是出于对金钱的考虑而选择程序员这一职业,而并不是真心喜爱这个工作,那么我奉劝你还是早点抽身的好。

  但是,如果你喜欢创造,那么你可以考虑做一名程序员。今天的世界离不开电脑,几乎没有什么事情不是由电脑来运作的。而且你可以想想编程是一件多么奇妙的事情啊。我认为,电脑技术是人类历史上最具创造力的技术,你必须能感受到它的奇妙。很多人也认为电脑技术很奇妙,试图弄清楚究竟是怎么一回事,可是非常困难,因为他们的思维不具备逻辑性。

  如果你不喜欢编程,那么不必强迫自己做一名程序员。当然我们需要好的管理人员,但是我觉得一名好的程序员比一名管理人员更有价值,因为我们有太多的优秀管理人才,但优秀的程序员却并不多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。 C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。 对于C++底层机制感兴趣的读者,这本书会给你“漫卷诗书喜欲狂”的感觉。 了解C++ Object Model,是学习Component ObjectModel的最短路线。 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside TheC++ Object Model正适合你。 目录: 本立道生(侯捷 译序) 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(The C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An Object Distinction) 指针的类型(The Type of a Pointer) 加上多态之后(Adding Polymorphism) 第2章 构造函数语意学(The Semantics of constructors) 2.1 Default Constructor的建构操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virual Function”的Class “带有一个virual Base class”的Class 总结 2.2 Copy Constructor的建构操作 Default Memberwise Initialization Bitwise Copy Semantics(位逐次拷贝) 不要Bitwise Copy Semantics! 重新设定的指针Virtual Table 处理Virtual Base Class Subobject 2.3 程序转换语意学(Program Transformation Semantics) 明确的初始化操作(Explicit Initialization) 参数的初始化(Argument Initialization) 返回值的初始化(Return Value Initialization) 在使用者层面做优化(Optimization at the user Level) 在编译器层面做优化(Optimization at the Compiler Level) Copy Constructor:要还是不要? 摘要 2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 Data Member的存取 Static Data Members Nonstatic Data Member 3.4 “继承”与Data Member 只要继承不要多态(Inheritance without Polymorphism) 加上多态(Adding Polymorphism) 多重继承(Multiple Inheritance) 虚拟继承(Virtual Inheritance) 3.5 对象成员的效率(Object Member Efficiency) 3.6 指向Data Members的指针(Pointer to Data Members) “指向Members的指针”的效率问题 第4章 Function语意学(The Semantics of Function) 4.1 Member的各种调用方式 Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions 虚拟继承下的Virtual Functions 4.3 函数的效能 4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline Functions 形式对数(Formal Arguments) 局部变量(Local Variables) 第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,andCopy) 纯虚拟函数的存在(Presence of a Pure Virtual Function) 虚拟规格的存在(Presence of a Virtual Specification) 虚拟规格中const的存在 重新考虑class的声明 5.1 无继承情况下的对象构造 抽象数据类型(Abstract Data Type) 为继承做准备 5.2 继承体系下的对象构造 虚拟继承(Virtual Inheritance) 初始化语意学(The Semantics of the vptr Initialization) 5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object Construction and Destruction) 全局对象(Global Objects) 局部静态对象(Local Static Objects) 对象数组(Array of Objects) Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp of the Object Model) 7.1 Template Template的“具现”行为(Template Instantiation) Template的错误报告(Error Reporting within a Template) Template中的名称决议方式(Name Resolution within a Template) Member Function的具现行为(Member Function Instantiation) 7.2 异常处理(Exception Handling) Exception Handling快速检阅 对Exception Handling的支持 7.3 执行期类型识别(Runtime Type Identification,RTTI) Type-Safe Downcast(保证安全的向下转型操作) Type-Safe Dynamic Cast(保证安全的动态转型) References并不是Pointers Typeid运算符 7.4 效率有了,弹性呢? 动态共享函数库(Dynamic Shared Libraries) 共享内存(Shared Memory)
### 回答1: C Primer是一本经典的C语言学习教材,也是很多程序员必备的参考书之一。它为初学者提供了清晰的指导,深入浅出地介绍了C语言的基础概念、语法结构、标准库函数、应用场景等各个方面。同时,对于有一定编程基础的读者,C Primer也提供了进阶的内容,如位运算、指针、内存分配、多线程编程等高级主题。这些内容不仅丰富了读者的编程知识,更让读者能够更好地理解计算机底层的运作原理。 在C Primer中,作者以通俗易懂的语言和实例来让读者理解各个概念和知识点,并通过练习题和习题解答来帮助读者加深印象,加强练习。同时,书中还提供了大量的实例代码,在解释概念的同时也让读者能够感受到C语言的实际运用情况。 总的来说,C Primer是一本经典的C语言教材,适合初学者和有一定编程基础的读者阅读。通过学习C Primer,读者可以打下扎实的编程基础,理解计算机底层的运作原理,并能够应用到自己的实际项目中。 ### 回答2: C Primer是一本经典的C语言初学者教程,也是C语言学习的入门必备之书。它详细讲解了C语言的语法、数据类型、运算符、结构、指针等基础知识,同时也包含了常用的编程技巧和实用的代码例子。C Primer不仅适合初学者,也适合已经有一定编程基础的程序员作为参考资料。本书以通俗易懂的方式教授,注重细节,深入浅出地解析了C语言的各个方面,让读者轻松地理解和掌握C语言编程。除书籍外,C Primer还提供了CD-ROM光盘,里面包含了完整的代码示例、编译器和开发环境,方便读者直接学习和编写代码。总之,C Primer是一本十分优秀的C语言学习教材,对于C语言初学者或者程序员来说都具有很高的参考价值,是学习C语言编程的一本不可多得的好书。 ### 回答3: C Primer是一本经典的C语言教程书籍,也是学习C语言的入门必读之物。这本书的作者是Lippman、Lajoie和Moo。 C Primer书中详细讲解了C语言的各种语法、数据类型、运算符等基本概念,以及字符串、指针、数组、结构体、函数、文件操作等高级特性。除此之外,它还着重介绍了常见的编程思想和技巧,如程序设计、逻辑表达式、代码调试等等。 C语言在计算机编程中应用广泛,特别是在嵌入式开发和系统编程领域。因此,学会C语言编程是非常有价值的。C Primer通过清晰的讲解、实例、练习题等帮助读者快速掌握C语言的基本知识和编程技能。 在CSDN中,也有很多程序员分享了自己学习C语言的心得体会,以及一些特别应用场景的编程技巧。通过C Primer这本书和CSDN上的学习分享,大家可以更加全面深入地了解C语言的特性和应用,同时也能够掌握更深入的编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值