多年来,我一直在思考一个问题:软件是科学还是艺术?直到有一天,一个新鲜的词汇进入了我的视野,它就是软件工艺。那一刻,我才意识到,其实我一直思索的问题应该是软件是工程还是艺术,而软件工艺给了我答案:软件是工艺,是工程和艺术的结合。我知道我将工艺解释为工程和艺术有所牵强,且容我暂时这么称呼它。这是我第一次看到这种提法时的第一感受。
多年来,我一直困惑于一个问题:如果工程化的方法能够生产出标准化的产品来,那么为什么具有相同功能的软件在不同的人手中写出的代码却完全不同呢?Fowler说软件是思想的产品,所以我相信软件更接近于艺术,而每一次软件开发的过程都是一个艺术创造的过程。然而说软件是艺术又过于牵强,即使是一个懂Java的程序员,你让他去看一段汇编程序,他也未必能从中得到丝毫的美感。而工艺这个词,则极恰当地说明了软件开发的本质。
软件开发的高科技外表和软件工程思想的提出,让我们很容易地忽略了一个事实,那就是软件是一个绝对的手工产品。我相信,即使到了人工智能高度发达的未来,就算所有的产品都可以自动生产出来,软件也必然是纯粹的手工产品,否则从逻辑上就说不通。一个汽车制造工人可能在未来完全由机械取代,但软件开发工作却永远不可能被机械取代,因为软件是思想的产品,而机械不可能代替人类思考。
至此我更加坚信,程序员在软件开发过程中起着决定性作用。好的设计固然重要,但它决不可能保证软件开发的绝对质量。也许有人会说,好的设计已经被许多系统证明了是有效的,就像设计模式一样,会在许多系统中复用。但这样已经被证实了有效的模式,迟早有一天会被机械代替,而不需要程序员去完成。复制一段代码几乎没有任何成本,程序员要做的永远是机械无法完成的工作。
程序员的正式名称应该是软件工程师。工程师的主要职责是设计而不是构建。你什么时候见过一个建筑工程师亲自去磊砖?Jack Reeves在其22年前的著名论文《什么是软件设计》中就已经提出,源代码是软件设计,而软件的构建由编译器完成。这就是软件不同于建筑的地方,它的构建几乎没有成本。软件工程师编写代码的过程就是对软件设计的过程,因此需要具备良好的素质。
软件不同于其它工程的另一个重要区别就是软件的修改相对来说更为容易,成本更低,这也是为什么重构相对于软件的影响要远大于其它工程。
关于软件开发的思考,还在继续。。。。。。
分享到:
相关推荐
软件开发的本质论英文版epub
总之,《软件开发的哲学思考》这篇文章通过对软件开发本质的深刻剖析,为我们提供了一种全新的视角来审视这一领域。它不仅强调了技术的重要性,更突显了人性因素在软件开发中的核心地位。对于每一位从事软件开发的人...
Python 简介、计算机核心架构、软件开发本质论、Python程序运行原理、Python IDE
1. **心智活动**:文章开篇便指出,软件开发本质上是一种基于人类心智活动的过程。这一观点强调了软件开发不仅仅是技术层面的问题,更是心理学、认知科学等领域交叉的结果。 2. **人性的反映**:软件开发不仅反映了...
软件开发本质上是将用户需求转化为软件产品的过程。这个过程需要经过目标设定、需求分析、设计、编码、测试、部署等步骤。在实际开发中,由于各种不确定因素的存在,使得项目管理变得复杂。因此,为了满足低成本、高...
1. **理论基础**:软件开发本质上是一种逻辑构建过程,而数学证明则是基于严格的逻辑推理。因此,数学证明为软件开发提供了一种强大的工具,用于确保程序逻辑的正确性和完整性。 2. **形式化方法**:在软件开发中...
此外,对软件开发本质的误解,以及过分依赖过程而忽视人的因素,也是导致项目失败的深层次原因。 为了应对这些挑战,业界发展了一系列方法和标准,如统一建模语言(UML)、能力成熟度模型集成(CMMI)、ISO标准等,...
软件应当包括程序和文档两部分知识的提炼、表达、固化作用,正是软件和软件开发过程的实质所在。 软件开发的四阶段是需求分析、总体设计、实现阶段、测试阶段。软件开发工具有对信息进行管理的功能,管理的主要内容...
本书被誉为安全技术领域的“黄帝内经”... 综合论述如何在软件开发整个生命周期内建立安全屏障,对于设计安全的软件给出了高屋建瓴的指导,全面翔实,深入浅出。对于任何关注安全软件开发的人来说,都是一本必备之书。
现代软件开发方法,作为计算机科学领域的一个重要分支,聚焦于软件开发过程中采用的新理论、新技术以及新方法。这一学科不仅涵盖了国际与国内的软件开发标准,还深入探讨了软件体系结构、面向对象的方法、形式化的...
本书被誉为安全技术领域的“黄帝...综合论述如何在软件开发整个生命周期内建立安全屏障,对千如何设计安全的软件给出了高屋建领的指导,全面翔实,深入浅出。 对千任何关注安全软件开发的人来说,都是—本必备之书。
《敏捷软件开发》这本书不仅提供了一套新的软件开发方法论,更重要的是它改变了许多人对软件开发本质的看法。通过强调团队合作、快速反馈循环、用户参与等原则,敏捷方法论已经成为了现代软件开发领域不可或缺的一...
软件开发本质上是一种高度创造性的活动,它要求开发者具备独特的思维和创新精神。然而,随着技术的发展和市场需求的变化,团队管理者面临着既要提高开发效率又要保证项目质量的双重挑战。如果忽视任何一方,都可能...
西安交通大学提供的《软件开发技术基础》课程PPT课件合集详细地介绍了软件开发的核心技术和基础知识,这部分资料对于学习和理解软件开发过程有着极其重要的作用。课程内容涵盖了软件开发方法、数据结构、操作系统...
- **第1章:一个创造与沟通的合作游戏**:这一章节将软件开发比作诗歌创作和游戏设计,强调了软件开发的本质在于发明与沟通的过程。通过对合作游戏的再审视,阐述了软件开发过程中团队合作的重要性。 - **第2章:...
在20世纪60年代,大型机...随着技术的进步和对软件开发本质理解的深化,设计方法论将继续进化,以更好地应对日益复杂的软件挑战。对于本科毕业生来说,理解和掌握这些设计原则和技术将为他们的职业生涯打下坚实的基础。
在软件开发过程中,我们不仅要追求代码的美观与整洁,更要注重其实现的功能和解决问题的本质。 #### 示例分析 在给定的部分内容中,可以看到一段关于`Model`类的实现,该类包含了检查状态是否改变(`isDirty`)...