摘要:很多人想用十全十美来修饰一样东西,比如软件,对于客户来说,当然希望他们的软件能做到完美。虽然很多专家说利用一些规范可以让软件达到更好!但是在现实开发中,真的会有那么完美的软件吗?

最近读了一篇文章 Software Runs the World: How Scared Should We Be That So Much of It Is So Bad? ,这篇文章没什么可说,但是评论却很有趣,特别是很多计算机科学的博士表示,使用一些规范的方法,可以让软件变的更好,还有规范、认证、授权。

对于这些想法,我只能说“祝你好运”。我干码农干了30年,我可以很肯定的说“没有银弹”,没有神奇的方法或者论文可以保证让软件变得完美,没有bug。

事实上,我们甚至很难定义一个程序,就更别提如何开发一个完美的程序了。软件在太多领域存在,有太多的编程语言,业务需求,还有运行环境,并且要和各种不确定的系统交互。你觉得你的iPhone游戏,股票交易系统,烤面包机还有火星登陆器有什么共同之处吗?你觉得给汇编,C,Java,PHP,Fortran,LIST和Erlang颁发证书可行吗?还有各种混合语言 web应用,以及分布式系统。

你需要正式的描述太多的东西,光列出所有的编程语言似乎就不可能,更不用说如何用这些语言写出完美的程序了。

我喜欢人们拿程序和社会工程对比。建造一座桥的基础在过去的两千年中没有改变过:你需要考虑重力,风力,下雨以及炎热还有很多基本的材料。这些东西罗马的工程师就知道了。但是编程不一样,我们为每个程序创造一个独立的世界,或者说我们把各种世界元素整合在一个世界中,然后在这个世界中建造几百座不同的桥,它们要同时良好的工作,还要考虑到我们创造的世界会不可预知的改变。

还有,我们造一座桥需要经过几年的规划和建造,然后使用几十年,上百年而不用进行任何修改。而软件在一直的变化当中,不管是在开发的时候还是开发完以后。美国在过去的两百年间建造了60万座桥。但是过去五年中我们就创造了一百万个iPhone的应用。应用程序可以从几行到几千万行代码,并且在现代生活的每一个角落存在。

让编程如此困难的原因是它无处不在,可以影响一个人或者10亿人,可以运行几十年或者只需要运行一次。它跟造桥完全不一样。最近的火星登陆器是用几百万行C代码写的,并且只运行一次。而高速股票交易系统一秒钟就要被执行无数次。

认为世界上存在一套标准的方法可以让你保证开发的程序是完美的这种想法很可笑。即使这种完美的奇迹存在,它的开销也会让它无法实际实施。好吧,你可以证明一段代码没问题,但是它运行在哪里呢?你能控制操作系统吗?还是其他公司提供的WebService接口?你不能控制用户的交互,你也不能控制CPU,那么你如何保证这段完美的代码可以完美的运行?

我宁愿相信你发明了时间机器也不愿意相信你的标准流程可以在这个混乱的世界行得通。

另外一个“善意的谎言”是我们可以通过标准的测试和认证来证明一个程序员可以编写完美的代码。程序员不是管道工,管道工和水,管道,气体还有阀门打交道。这些东西几乎不会改变。它们遵循物理规律,是经过认可的科学,它们不会莫名其妙的变成另外一个东西。

我认识一个程序员通过了各种Java认证,但是还是没有能力编写实际的应用程序。想象一下,要为一个人进行所有语言的认证,所有程序的认证,从面包机到宇宙飞船。要么你创造一些非常基础而无用的认证,或者非常细节的认证而没有人在乎。考虑到所有这些,还有不断变化的需求,当你需要开发一些新东西的时候你怎么办?把所有人炒了,然后雇佣新的人?

我在工作中和一位UX设计师一起培训一组Java Web程序员开发iOS程序。即使一个有经验的开发者突然做一些不一样的开发也是很困难的。但是假如我们一定坚持要正规的流程和经过认证的iOS程序员才能在市场上竞争,那么我们可能已经关门了。

我们三个人花了两个月时间开发了一个新的iPhone应用。我们只有不断快速的迭代开发才能在不断变化的需求和竞争中胜出。期望一个正规的流程在发布前验证所有的代码是噩梦。在产品发布几年后公司可能都不存在了,谁有在乎这个程序是否被认证过呢?

现实是残酷的。30多年的编程经验,可以让我非常自信的说我写的代码还不错。在1987-1994年间,我领导开发并且要最终敲定发布的二进制码。我们通过软盘的形式发布了三个Mac应用,11个主要版本,没有一次大的事故(要知道每次发布的硬件成本就是100万美元)。我们发布的代码很完美吗?我们是经过认证的Mac OS开发者/设计师吗?不是!但这些应用解决用户的问题了吗?是的。

我说的这些能证明任何东西吗?不能。但是好的代码确实存在,并且常常出自没有证书,没有学历,没有被证明过的程序员之手。

也许有一天机器人可以代替人来开发软件,并且保证不出错。人类就可以幸福的生活在完美的软件创造的世界中了。

但是我更相信时间机器会先出现。并且软件是由人类编写的。

英文出自: Software Runs the World: How Scared Should We Be That So Much of It Is So Bad?

译文来自:oschina

没有完美的软件:编程永远不容易相关推荐

  1. Scratch软件编程等级考试三级——20191221

    Scratch软件编程等级考试三级--20191221 理论 单选题 判断题 实操 合作画画 捡垃圾游戏 判断奇偶数 理论 单选题 1.怎样修改图章的颜色?() A.只需要一个数字来设置颜色 B.设置 ...

  2. 我迄今见过最完美的中文编程开发工具

    本期介绍的主要人物是2021首届VCN软件开发者开源大赛一等奖得主--冰糖葫芦要加冰和糖,代表作品<厨房宝盒>. #关于我# 大家好 我是冰糖葫芦要加冰和糖 生于95年的编程爱好者 跟大家 ...

  3. Scratch软件编程等级考试一级——20191221

    Scratch软件编程等级考试一级--20191221 理论 单选题 判断题 实操 飞向太空 小狗长大记 理论 单选题 1.下列关于舞台的描述,不正确的是?() A.Scratch只能设置一个舞台 B ...

  4. Scratch软件编程等级考试二级——20200913

    Scratch软件编程等级考试二级--20200913 理论 单选题 判断题 实操 飞不出去的蝴蝶 巡线小车 理论 单选题 1.1. 下列程序的运行效果描述正确的是?() A.面向鼠标指针 B.移到鼠 ...

  5. 电子学会 青少年软件编程等级考试 C语言 3 级

    3级-2020-12-01-完美立方 2810:完美立方 OpenJudge - 2810:完美立方 3级-2020-12-02-不定方程求解 4139:不定方程求解 OpenJudge - 4139 ...

  6. 少儿机器人编程与软件编程区别

    现在社会,机器人编程是一门博大精深.有着多学科融合性的课程,针对少儿方面,林林总总的相关编程培训也是层出不穷,格物斯坦来分析下这两者的区别所在. 纯软件是个虚拟的世界,简单而完美,就像我们上学时所说的 ...

  7. 2022年12月电子学会青少年软件编程Scratch(四级)等级考试真题解析

    青少年软件编程Scratch(四级)等级考试试卷 1.运行下列程序,变量"结果"的值为?( ) A.23 B.22 C.21 D.20 正确答案:A 答案解析: 程序先判断S是否& ...

  8. 电子学会 软件编程(图形化)二级训练营

    电子学会 软件编程(图形化)二级训练营 试题来源 青少年软件编程(Scratch)等级考试试卷(二级)[2019.09] 青少年软件编程(Scratch)等级考试试卷(二级)[2019.12] 青少年 ...

  9. Task05:青少年软件编程(Python)等级考试模拟卷(一级)

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 电子学会 软件编程(Python)一级训 ...

最新文章

  1. 2. 编程规范和编程安全指南--C/C++
  2. rabbitmq sleuth zinkip 分布式链路追踪
  3. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
  4. 英特尔nuc能代替主机吗_制砂机生产的沙子可靠吗?能代替天然沙子吗?
  5. 科大星云诗社动态20210403
  6. 如何处理SAP Fiori Launchpad KPI tile点击后出现的错误消息
  7. 前端学习(1267):axios的post传参
  8. 客座编辑:李建平(1976-),男,博士,中国科学院科技战略研究院系统分析与管理所研究员、所长...
  9. linux 清理cache中的内存
  10. [工具类]将时间转换为unix时间戳格式
  11. Android9能用的flash播放器,安卓flash播放器源码支持android9
  12. php网易音乐api接口,网易云音乐API接口
  13. iOS图像处理——人脸识别
  14. 对称加密算法(DES、3DES、AES)
  15. 路由与交换 实验一 路由器基本配置
  16. DAY15:尚学堂高琪JAVA(129~131)队列,Enumeration和Hashtable
  17. tableSizeFor的理解
  18. 发动机、发电机、电动机、电机、马达傻傻分不清?一张图恍然大悟!
  19. 刷题记录:牛客NC15036了断局
  20. 计算机学习常用网站总结

热门文章

  1. python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案
  2. 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
  3. PWN-PRACTICE-BUUCTF-5
  4. 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)
  5. 【2019牛客暑期多校训练营(第三场)- A】Graph Games(思维,对边分块)
  6. ACM 题目分类POJ(自用,精)
  7. 【CodeForces - 764A】Taymyr is calling you (找规律,水题)
  8. 【51nod - 1875】 丢手绢(约瑟夫问题,可打表,用STL模拟)
  9. c语言程序设计 doc,《C语言程序设计》.doc
  10. c语言中调试时go的作用,C语言调用GO