
观点
文章平均质量分 83
bfzhao
没有在小指上戴白金戒指的工程师
展开
-
开始,就从今天,构建工业强度的实现!
按:作为09年个人计划的一部分,我将系统地讨论如何使用合适的语言工具构建工业强度的软件。这既是对个人经验的总结升华,也是对运行在千万的服务器和桌面中的不良代码的公开宣战。 感谢技术的积累和进步,原先作为科学家的工具的数字计算技术现在早已渗透到生活的方方面面,软件工程师的群体也在爆炸式增长。当9岁的孩子也可以使用代码涂鸦,有人可能以为编写软件的门槛已经低到极致。但是,有尊严的软件工程师仍然以原创 2009-06-06 00:18:00 · 811 阅读 · 1 评论 -
使用C++构建最简单的动态类型系统
<br />为了说明动态类型系统和静态类型系统之间的差异和联系,这里简单叙述一下如何使用静态类型系统来构建动态类型系统。这个任务类似于为一门新的语言设计类型系统。所以如果你发现这个动态类型系统类似于你使用过的任何OO系统,请原谅我。应为所有的动态类型系统都是类似的,而且其背后的机理完全相同,只是实现上的差异而已。<br /> <br />先列出OO的核心技术,这样在我们设计的时候可以时刻对比我们是不是在这样做。<br />* 使用类来表达概念<br />* 使用消息在类之间传递信息<br /> <br />原创 2010-10-12 12:22:00 · 2472 阅读 · 4 评论 -
杂谈
此文对应于孟岩先生的博文(http://blog.youkuaiyun.com/myan/archive/2010/10/09/5928531.aspx)。似乎无法大段回复,所以直接贴在这里。急救之作,希望孟老大能包涵。回头在细细润色。1. 技术和工具。OO技术中,最核心的是使用类来表达概念。亦即,我们可以操作的元素的粒度不仅仅是一门具体的语言提供的基本元素了。对于过程式编程,你能操作的,用来构成语句的基本元素是基础类型,逻辑条件以及(进一步的)函数名字。当你拿着锤子(语言提供的基础元素)的时候,你看到的都是钉子(基础原创 2010-10-11 16:13:00 · 1616 阅读 · 10 评论 -
从代码到模式(一) 对象的构建和销毁
前段时间有一点空闲,重读了GoF的经典。GoF的书之所以经典,不仅仅是在于其整理的23个模式,而是整体叙述的字字珠玑,特别是前几章。我常常和别人举的例子就是第一章开篇的几句,简直道尽了OO设计的精髓。DP说:You must find pertinent objects, factor them into classes at the right granularity, define class interfaces and inheritance hierarchies, and establish k原创 2010-08-09 13:20:00 · 1406 阅读 · 4 评论 -
what makes you different?
最近,由于一个协作海外研发团队缩编,项目组需要招聘几个具有大约7年以上的C++资深研发工程师来充实这边的研发力量。我有幸和项目总监主持了一个笔试成绩相当不错的应聘者的技术面试。该应聘者有超过8年的研发经验,曾经是做过项目组长,在个人的知识积累和总结方面也颇有心得。但是由于其过去几年的研发背景是非windows平台,而且在windows平台上的训练也稍有不足,加上其他的一些因素,最后我们还是决定不接原创 2009-09-23 22:59:00 · 783 阅读 · 5 评论 -
C++基本功之 准确地理解术语
能有效地表达抽象的思想是人类和其他智能生物的根本区别。同样,可以使用准确的术语进行沟通交流是专业人员的基本的素质。可以这样说,一个人分析问题解决问题的能力正比于其熟练理解的概念的数量。《设计模式》是OO领域的抗鼎之作,其中一个重要的原因是她提供了一个抽象的,定义清晰的词汇集合,尽管后来我们发现其中的一些名词定义还是不够清楚。熟练的C程序员非常清楚诸如常量指针和指针常量的细微差别,而初学者则往往含糊原创 2009-09-11 11:50:00 · 904 阅读 · 0 评论 -
C++基本功之 对象序列化
稍微正式一点的应用都会用到对象的序列化/反序列化操作,常见的需求包括:对象的持久存储。比如把一个对象存储到文件;在需要的时候,再把对象从文件中读出来;对象的传递。比如要把一个对象通过管道,socket等任何手段传送到对端;从数据构建对象。对象类型未知,但是我们可以从数据中构建一个对象出来。 我们现在来分析这些需求。看看C++如何有效地序列化/反序列化对象。下文中,凡提到序列化,原创 2009-09-10 09:37:00 · 7777 阅读 · 7 评论 -
C++基本功之 const关键字
能否正确地使用const是判断一个C++程序员基本编程素质的有效手段。但是,能准确地理解该关键字的含义则是更高的要求。简单地说,和其他所有的用于提升C++之生产力的手段一样,它表征的根本含义是使得代码更具表达性,亦即,更能清楚地表明代码的含义。 在C++标准中,const是一个对象修饰符。一般地,初学者很容易按照字面意思,把它理解为常量。确实如此吗? 真正的常量和语义上的常量原创 2009-09-08 11:07:00 · 846 阅读 · 0 评论 -
资源管理:强鲁棒性应用的基石 (2)
3. 所有权的控制与转移 前一篇文章的资源封装实现,通过禁用资源封装类的拷贝和赋值,极大地简化了这些类的最终代码,然而同时也极大的限制了它们的使用范围。目前他们只能用在局部的资源管理以及作用常引用在作用域之间传递,这无疑是不方便的。我们要尝试去除这一限制。但是在开始之前,我们先要讨论资源的所有权问题,只有明确了资源的所有权,我们才能有效地在不同的作用域之间传递资源封装类,而不会引起混淆。因为一原创 2009-09-03 00:30:00 · 767 阅读 · 0 评论 -
C++:初学者的指南
0. “hello world” 向先驱致敬,我们首先学习C++版本的“hello world”程序。需求:想控制台输出“hello world”字符串。C++是基于对象的。从对象的观点看,要有一个对象,用于打印该字符串。所以该需求可以实现为如下执行序列:// 声明对象g,其类型为greetings// 调用g的方法,传入参数为控制台对象和问候字串(std::cout,原创 2009-06-24 22:31:00 · 1253 阅读 · 0 评论 -
工业语言评审:应运而生,应运而长的C++
当Stroustrup博士开始到贝尔实验室开始他的第一份工作时,他并不知道自己应该做什么。他跑去问头儿,对方客气地回答他说,既然把您请来了,您想干什么就自己看着办吧。于是Stroustrup花了将近一年的时候找到了自己研究方向,但是他苦于没有合适的工具开展他的工作,基于自己的背景,他首先搞出来一个叫做C with Class这么一个东西供自己使用,它综合了C的强类型和Simula的类机制,前者对正原创 2009-06-19 22:56:00 · 1075 阅读 · 0 评论 -
资源管理:强鲁棒性应用的基石 (1)
0. 引子在正式讨论C++提供的资源管理技术之前,先简略回顾一下传统的C风格的资源管理技术。 本质上讲,C是非常初级的语言。实际的编程中,C程序员往往面临大量的机器相关的细节。诸多此类的细节中,最常见的,最令初学者迷惑的,令专家头痛的,就是内存管理问题。虽然C提供的内存管理接口极其简单,但是由于其灵活性以及内存管理固有的特性,使得大型程序的内存管理往往是最难以理解和容原创 2009-08-24 23:11:00 · 1119 阅读 · 0 评论 -
软件为什么如此复杂?
每当我们受命维护或者扩充一个既存系统的时候,恰当地理解原有的系统成为关键。毫无疑问,我们没有足够的时间完全理解它,但是我们一定要找到那个见鬼的合适地方以加入我们的修改。那么是什么阻碍了我们快速理解一个系统呢?一般想来,常见的原因可能包括:缺失必需的文档。没有合适文档是常态;有了文档,版本又是旧的;好不容易找到来的一个当前版本的,但是是以日文写成的(你熟悉日文的情况下,极有可能那是一个英文文原创 2009-06-13 14:26:00 · 1577 阅读 · 1 评论 -
C++中级程序员该往何处去
<br />有个同样是做一线开发工作的朋友评论一篇博文,表达了自己的忧虑和遇到的一些问题,其核心就是尽管做过几年的C++开发,市面上常见的书也基本涉略,但是却感觉很难跟上新思想,学到新知识。坦白地说,我也常常遇到过这样的问题。就C++的使用而言,我感觉算是入了门,但是走了很多的弯路。我可以简单共享一下我的经验教训,如果这可能对任何使用C++作为主要开发语言的人有用的话。但是我不希望谁不加思索就试图原样复制,因为毫无疑问每个人的个人喜欢,学习习惯,知识背景等都极不相同。这样说,就算是对本文可能造成的任何不好后原创 2010-10-16 00:28:00 · 1557 阅读 · 3 评论