1995年2月14日情人节。

我坐在Moscone中心正厅的前排。灯光刚刚变暗,人群中一片寂静。数千人突然全神贯注地注视着舞台。照相机熄灭,发出预料中的杂音。然后,安德斯(Anders)(注:Delphi和C#设计师)上台并开始演示。

我之前或之后从未经历过类似的经历。我既紧张又兴奋。我们建立了每个人的期望,我希望我们不会令他们失望。

显然我们没有。似乎在每一个功能上,安德斯(Anders)都表现出人们的欢呼,而当安德斯(Anders)表明Delphi本身就是一个Delphi开发的应用程序时,我们受到了热烈的欢迎。我知道我们做了出色的事。我将永远为之骄傲。

是的!我们度过了一个令人惊叹的夜晚,用了大约2年开发时间。那是我花所有时间最多的一个版本,比我们原先计划的要花一年多的时间,但是我们完成了,感觉非常非常好。

好了,快完成了。Delphi的第一个版本要等到14日的两周后的3月1日才发布,而我们仍处于最终批准该产品的阶段,但我们尚未完成。有几个“构建中止”错误需要修复,而我记得,马克·库西纳(Marc Cousineau)是最后一个站着的人。他错过了那天晚上。我们在那里想念他,但他拿了最后几发子弹,所以我们其他人都可以玩得开心。谢谢马克!

我们怎么知道我们选择的功能是正确的?我们怎么知道我们完成了?

构建产品的最大挑战通常不是做什么,而是弄清楚您不必做什么。在可以构建的所有功能中,应该构建哪个?哪些可以等待,哪些不能等待?即使在'95,也就是Windows '95发生翻天覆地变化的6个月之前,Windows API仍然庞大而复杂。我们应该包装API的哪些部分,我们应该忽略哪些部分?

我们所做的就是应用80/20规则,或者据我后来了解到,这被称为帕累托原理。将其应用到Windows API之类的东西意味着在80%的时间中大约只有20%的API被使用。这意味着我们不必包装所有东西,只需要找出那20%。或者,正如安德斯(Anders)喜欢说的那样,我们需要争取最大的收益。

但是,20%的时间使用的其他80%的API呢?我们知道两件事。首先,我们永远没有时间将其全部包装。我们没有人,也无法跟上像微软这样多产的公司生产产品的包装纸。其次,无法编写价值不超过80%的应用程序。这导致了原理,

  • 使简单的事情变得简单。
  • 使困难的事情成为可能。

该原则在实践中最直接的示例是具有该  Graphics 单位的单位  TCanvas 及其相关类。Graphics 包裹基础Windows API句柄的所有  类均通过适当命名的Handle 属性公开该句柄  。对于高级封装,这在当时是独一无二的。允许用户使用该手柄进行几乎任何操作,并且基础对象将相应地进行调整。我和Anders花费了大量时间来实现这一目标;使容易的事情变得容易,而使困难的事情变得可能。 TCanvas 使用 DC很简单,公开我们使用的基础句柄使我们无法包装调用API。您可以看到在整个VCL中都应用了此原理,暴露了底层的句柄以使困难的事情变为可能,颈椎枕即使这样做并非易事。

如前所述,我们有意使VCL可扩展。我们没有人来包装所有东西,而是希望我们的用户能够构建或购买创建应用程序所需的组件。允许使用与编写其余应用程序时相同的语言来编写组件,这意味着我们为特定于应用程序的封装大大降低了门槛。

我们从1993年初开始使用Delphi,后来在那个冬天的某个时候被锁定并加载了版本。实际上,我们花了很长时间才获得了看起来像Delphi的东西并开始运行。我记得我们在1993年7月向一群工程师进行的演示,向他们展示了当时的情况。它包括组件面板,表单设计器和基本编辑器,甚至还包括我们后来称为双向编辑的东西。

编辑器实际上只是一个  TEdit 非常初级的人员!到了七月,不仅是我和安德斯了。我们决定取消有关Borland Pascal 8.0的工作,而完全专注于Delphi。Allen Bauer和Alex Shtaygrud开始从事调试器和编辑器的工作(解释为什么使用TEdit),而Dave Scofield开始使我的IDE挑毛病  看起来更美观。具有讽刺意味的是,开发人员在其大部分职业生涯中都在构建UI库和框架,却无法创建外观精美的UI来挽救生命。

会议结束后,我记得一位软件开发工程师说我们应该立即发货并立即发货!我们受到鼓舞,但知道我们为使Delphi 1进入可发布状态付出了很多努力。欢迎加入Delphi知识局QQ群:32422310

Delphi中VCL库的原架构师Chuck Jazdzewski回忆Delphi 1的开发原则相关推荐

  1. iOS工程师如何在工作中提升自己,晋升架构师,走向人生巅峰?

    古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲于应付 ...

  2. 架构师如是说(一)——敏感式开发

    也不是大分享,只要是我刚出来实习的一个小小的总结并记录下来. "我们在开发的时候,开发出来了一个小功能了,就先公开给别人用,先给我们内部人员用用,完了再开放给客户用."公司的架构师 ...

  3. 2 数据源配置_如何在程序运行中动态切换数据源?架构师必读秘笈

    说起动态数据源,大家应该也不陌生.例如在读写分离系统中,则要对请求中的读写操作进行分离,让读和写落在不同的数据库上:例如在多租户系统中,则要根据请求来源租户的不同,让其落在不同租户的数据库上:例如在分 ...

  4. 2021普通Java程序员如何在行业中脱颖而出?阿里进阶架构师不传之秘终于开源!

    "倒挂"一词大家都不陌生,在程序员领域里更是屡见不鲜,尤其是在公司工作了一段时间后就会发现,后来的每个新人的工资都比自己高,你的工资是15k,新人的工资是30k,奈何人家能力强呢. ...

  5. 三层架构项目如何发布_链客Talk | 优盾首席架构师Alex Yang:如何从0开发区块链项目?...

    区块链钱包如何开发?有哪些技术难点? 为了避免盗币和内鬼事件发生,钱包加密方式应该怎样设定?风控策略又该如何实施? 本周四晚8点,"链客Talk"将邀请区块链钱包领域资深开发者Al ...

  6. 易企秀资深前端架构师袁飞分享:移动H5开发如何避坑?

    2020年10月24日,正值程序员节,第二届全球移动开发技术峰会在北京隆重举行.易企秀资深前端架构师袁飞应邀出席峰会,并分享了移动H5开发技术要点和避坑指南. 本次峰会,来自微软.阿里巴巴.小米.腾讯 ...

  7. Delphi中多库关联查询

    在我们对数据库进行操作时,经常用到TTable控件,但TTable只能同时对一个数据表进行操作,而TQuery控件不仅具有TTable的多数功能,而且同时可对多个数据表进行操作.不仅如此,TQuery ...

  8. 阿里架构师推荐,微服务分布式构架开发实战PDF,快快收藏吧

    什么是微服务架构 微服务是一种软件架构风格,目标是将一个复杂的应用拆分成多个服务模块,每个模块专注单一业务功能对外提供服务,并可以独立编译及部署,同时各模块间互相通信彼此协作,组合为整体对外提供完整服 ...

  9. 系统架构师论文-论基于构件的软件开发(测井资料处理与解释集成软件)

    论基于构件的软件开发 –测井资料处理与解释集成软件 [摘要] 去年初,单位承担了新立的"测井资料处理与解释集成软件"项目,目的是集成目前国内零敬的测井解释方法,我有幸参加该项目,并 ...

  10. java架构师成长直通车分享,平安银行java开发面试

    前言 进程和线程的提出极大的提高了操作提供的性能.进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能. 多进程的方式也可以实现并发,为什么我们要使用多线程? 多进程方式确实可以实现并发 ...

最新文章

  1. 2022-2028年中国客厅经济深度调研及投资前景预测报告
  2. 视觉(12)Active Vision Based Robot Navigation System
  3. 【物联网】OpenWrt编译和修改基础--预科
  4. Mybatis快速入门的代码实现及报错处理解决org.apache.ibatis.exceptions.PersistenceException
  5. stringwriter_Java StringWriter toString()方法与示例
  6. 深度学习的实用层面 —— 1.12 梯度的数值逼近
  7. VS 2015 64位CMake编译openCV3.1.0必备文件
  8. java计算一个日子距离_java计算两地距离(公里)
  9. 3.微服务:从设计到部署 --- 进程间通信
  10. 打磨TF卡叠加SIM的注意问题
  11. (转)一个由自由职业者建立的量化对冲基金
  12. IAR8.3安装步骤
  13. linux 内核专题— drv术语
  14. 牛顿迭代法的图像推导思路以及代码
  15. access怎么做批注_怎样做批注
  16. python实现m3u8转mp4
  17. matlab简易画爱心
  18. hbase 使用lzo_装配HBase LZO
  19. 动态毛玻璃特效html,实现div毛玻璃背景
  20. PDF数字签名与验证

热门文章

  1. setBounds(left, top, right, bottom)详解
  2. 小路工作室GHOST XP 2007典藏版(完美XP)
  3. 神经网络参数初始化方法
  4. c语言课程成绩分析报告范文,c语言课程分析报告题目.doc
  5. 用python背单词_还在用背单词App?使用Python开发英语单词自测工具,助你逆袭单词王!...
  6. 反编译工具的安装与使用(解决部分能反编译部分不能反编译)
  7. pytest之parameterize参数化
  8. 机械工程学专业词汇英语翻译
  9. 使用JS判断日期的有效性
  10. 13 岁女孩因发布JavaScript被捕,写个死循环你就进去了?