关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 程序人生 »软件开发!=软件工程 你真的希望如此吗?

    软件开发!=软件工程 你真的希望如此吗?

    2015-07-02 00:00:00 出处:陆其明的博客
    分享

    端着咖啡,你大步走向书房,只余脚步声回响在空荡的走廊里。跨过门槛,停下来咯哒一声打开头顶上的节能灯,放在书桌中央的笔记本电脑一下子映入你的眼帘,明亮的屏幕上图表正在发出诱惑的光芒。放下咖啡,你决定最后再研究一次,看看还有什么错误或误算是先前被遗漏的。不断地熬夜,熬夜,但最后,终于让你获得了客户的认可。

    喝一口依然还滚烫的咖啡,你决定最后一次检查客户需求。用早餐的位置?有了。四个浴室,其中一个要在天花板上安装花洒淋浴头?有了。三车车库以及宽敞的院子?有了。一切准备就绪,各就各位。最后的审查让你充满自信:想必客户定会满意,施工也马上可以开始。合上笔记本电脑,抓起它走出房门,兴冲冲地想要展示给客户看。

    正如你所预期的那样,客户很满意!他对院子的大小很满意,他和他的家人也很喜欢你设计的游泳池和早餐位置。但是美中不足的是….

    “你能让它飞起来吗?”

    这是工艺,而不是工程

    上面的故事显然是荒谬的:只要是思维正常的人都不会要求让房子飞起来,因为我们都见过房子,它们都是不会飞的。可是,这样的情景却经常在软件开发上重演,一遍又一遍。客户要求的东西——他认为是合理的,但对我们开发人员而言可能是完全不可能的——至少目前为止我们清楚这是不可能的事情。现在的软件开发很少有章程,双方协定的标准就更少了。我们能做的,通常就是,创建的东西尽可能地符合客户的期望。

    几年前,有一个关于软件开发是否可以被称为软件工程的大辩论,这源于一篇名为《Software Engineering: An Idea Whose Time Has Come and Gone 》的文章,作者是Tom DeMarco。DeMarco认为,短命的软件工程已经死去,这对于所谓软件“变革”的创建并不重要。

    DeMarco的论文认为由于缺乏测量力度(和“软件”一词所代表得深度和广度),软件工程已经走向了灭亡。但是我看到的是一种截然不同的现象:软件工程从未存在过。

    首先郑重声明,我赞同DeMarco先生的主要观点。软件开发不是工程,因为在传统的工程中输出是有把握的,且可被反复衡量和控制的。DeMarco的著名论据“你无法控制你不能衡量的东西”是对此理念的完美总结:要是你不能衡量你将要实施的变化的影响,那么让我们怎么相信你能控制它们呢?

    这一点,在我看来,正是我们不能将软件开发称为“工程”的首要原因:我们不能衡量将要实施的变化的影响。当然,我们可以执行单元测试,集成测试——我们能想到的所有测试,但我们依然无法准确估计当我们实施所有潜在的变化时,它们对现有系统所造成的影响范围。我们现在根本没有足够的工具来做到这一点,并且据我所知,我们一直以来就没有这样的工具。

    我认为软件开发可以当作一门手艺。“工艺”一词或许能够更好地描述我们开发人员的实际工作。

    工艺和工程之间的主要区别是,后者使用已经广为人知且公认的知识来解决问题,而前者使用的是更专业的知识,懂这些知识的人不如前者那么多,甚至这些知识可能是不成文的或并不为大众所认同。因此,我们可以得出软件工程一说根本不存在的观点,因为没有足够普遍都接受的知识来证明它可以叫做“工程”。

    那么“软件工程”可以存在吗?是否有用?

    软件工程这说法是否可行?

    假设将软件开发的整个领域转换到工程学科是可能的。可是,我们真的想要这么做吗?

    在我看来,创建有用的软件需要具备一定层次的艺术技能,有的形式的创造并不能用数学和工程精确地表现出来。创造力能让我们面对从未见过的问题时,也能想出新颖的解决方案。但是要是我们不小心,它也会让我们搬起石头砸自己的脚。

    对我而言,将软件开发制定为工程学科会消弭大量的创造自由(当然并非全部),从而阻碍我们从多方面思考来解决当前问题。

    另一方面,利用工程策略可以显著提高例如标准规格、可测试性,以及项目管理等理念。此外,它提供的公共知识池,可作为使用来源用于参考解决方案,使它们更容易交叉引用。

    既然这样,那么共享和控制所有知识是否值得我们失去一些创造的自由?我认为这不值得,哪怕上述权衡真的可以实现。软件可用于所有基本的事情,与其说伟大的多元化思维自由是我们解决问题的阻碍,倒不如说它是福音。要是硬是将软件塞进工程领域,那么就会有太多的变量,太多的问题,太广泛的问题范围需要考虑。对所有软件开发使用工程策略将会是一场灾难。

    该文开头的故事,就是一个当我们将软件开发与工程作比较时,常见但不正确的假设:即将软件设计比作是盖房子。这严重偏离了事实。房子是有形的,受到物理定律如重力的约束,并且我们已经拥有了上千年的筑造历史,知道如何建筑适宜居住的房子。而软件是没有这些条件的,因此这样的比较说好听点是天真,说难听点就是误人子弟。

    总之,软件开发永远不可能是软件工程。

    我们的专业是一门手艺,我们是工匠。软件开发是一个过程,作为程序员的我们吸取关于项目的专业信息和设计内容,然后实施满足客户需求的解决方案。它是艺术,它充满了创造性;它不是工程,它也不需要成为工程。这应该成为我们的共识。

    你有什么看法?你认为软件开发成为软件“工程”是一个值得追求的目标,还是一项不可能完成的任务?欢迎分享你的评论,请畅所欲言!

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    67款移动应用存在违法违规收集使用个人信息情况

    高通、联发科、汇顶科技等“芯”助力,vivo X200 Ultra及X200s发布

    微软CTO凯文·斯科特:未来AI行业将涌现大量专业智能体

    《中国AIGC产业峰会——万物皆可AI》在北京圆满落幕

    威联通科技推出 16 颗硬盘 SAS 双主动控制器 ES1686dc R2 3U 机架式 NAS,具备 HA 及最佳存储效率

    当漏洞攻击遇上腾讯混元超能力:EdgeOne的Web安全赛博决斗

    上海外骨骼机器人亮相消博会,万元起售引关注,加速研发个人版

    深耕智能文档处理领域,合合信息《智能文档技术与应用白皮书》正式发布

    RootPhone:开启RWA代币化时代的Web3智能终端革命

    华为Mate 80系列全曝光:将出厂预装原生鸿蒙操作系统

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术分享

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。