且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《OOD启思录》—第1章1.7节优秀设计者阶层

更新时间:2022-09-18 12:12:01

本节书摘来自异步社区《OOD启思录》一书中的第1章1.7节优秀设计者阶层,作者【美】Arthur J.Riel,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 优秀设计者阶层
OOD启思录
***s在“No Silver Bullet”一文中提到的作为控制根本复杂性方法的最后一个话题是在企业中建立一个优秀软件设计者阶层,让他们从大批初级设计者中选拔接班人。这可以同管理者阶层类比:高级经理位居顶端,并且从大批初级经理中选拔接班人。这触及了软件开发者间“艺术还是科学”这一争论的核心。软件开发能力是后天习得的,还是需要天赋?我不想参加这一争论,但我想做个类比。如果有人拿枪指着我的脑袋逼我在一年内学会弹钢琴(我之前从未学过乐器),我不会觉得太困惑。如果事关自己的生命,我当然可以学会弹钢琴。但是,如果那个拿枪指着我的人逼我在三年内成为一个伟大的钢琴家,那我恐怕只能让他开枪了。

不管伟大的设计者是天生的还是后天培养出来的,我认为“建立一个优秀软件设计者阶层”这一做法有一个严重缺陷。这也是目前一些公司管理者阶层所存在的缺陷。新的想法来自何处呢?传统上,新念头来自底层(草根阶层)的运动。若建立等级层次,那么我们就可能迟滞不前。作为例证,我发现了有趣但也令人吃惊的事实:结构化设计和逐步细化方法很大程度上来自学术界,而工业界则不太情愿接受;而面向对象编程技术则来自工业界和实验室,学术界则不太情愿接受(当然也有不少例外)。我相信,学术界不情愿向本科生讲授面向对象编程技术是因为那些已经走上高等级层次的教授们以前一直都是在宣扬面向动作(action-oriented)的好处。而面向对象社群声称“我们30年来一直在用错误的方法开发软件,面向对象编程才是正确的方法”,这更是加大了与学术界的隔阂。

我们现在已进入这样一个时代,软件开发的复杂性已不是结构化方法所能应付的。而随着硬件性能呈指数增长,未来的软件只会更加复杂。我们所面临的问题是,能否发明一种软件开发方法学,能够提供这样的可能性:消除非根本复杂性,并且至少是控制根本复杂性?我相信,面向对象范型通过分散控制流、相互关联的数据和行为、隐含的情况分析(即多态)和信息隐藏机制,再配合快速原型和软件开发的迭代模型,为实现这一目标提供了***的可能性。1本书的剩下部分将讨论关于面向对象范型的很多问题,并讨论如何追踪和解决这些问题,让面向对象范型所提供的可能性更接近现实。

术语表
Accidental complexity

非根本复杂性。在应用程序中使用不合适的软件开发范型或者工具造成的复杂性。

Different-language prototyping

不同语言原型化。一种创建原型的方式,用来创建原型的语言和项目语言不同。

Essential complexity

根本复杂性。因为应用软件本身的性质造成的复杂性。

Multiparadigm language

多范型语言。既支持面向对象范型又支持面向动作范型的编程语言。

Paradigm shift

范型迁移。从旧的编程模型到新的编程模型的转移。

Programming paradigm

编程范型。开发软件的模型。

Pure object-oriented language

纯面向对象语言。只支持面向对象范型的语言。

Same-language prototyping

相同语言原型化。一种创建原型的方式,用来创建原型的语言和用来创建最终产品的语言是一样的。

Software prototype

软件原型。应用软件的模型,用来测试软件设计、实现或者解决方案的可行性。常常为了可以快速完成而省略了可扩展性、效率和稳定性这些特性。

Software prototyping

软件原型化。创建最终应用软件产品的模型的行为,用来测试或者证明特定软件的设计、实现或者解决方案的可行性。

Iterative model (of software development)

(软件开发的)迭代模型。一种设计软件的灵活的模型,它意识到软件开发是一个迭代的过程,必须允许实践者可以修改已有的成果来改正前面犯下的错误。

Waterfall model (of software development)

(软件开发的)瀑布模型。一种设计软件的不灵活的模型,它注重的是产生精确定义的工件的里程碑,开发过程是单向的,也就是说,一旦到达一个里程碑,那么前面所做的步骤就不能改变了。

1译注:从现在看来,面向对象范型还不足以解决这些问题。AOP、IP等都是新的努力。也有人把这些相关的“非面向对象”的努力归纳为Generative Programming。OMG正主推的MDA也是基于Code Generation的技术。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。