`
java-mans
  • 浏览: 11427383 次
文章分类
社区版块
存档分类
最新评论

没有完美的软件:编程永远不容易

 
阅读更多

最近读了一篇文章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 开发者/设计师吗?不是!但这些应用解决用户的问题了吗?是的。

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

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

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

文章来自:http://www.apkbus.com/android-64122-1-1.html
分享到:
评论

相关推荐

    PERL语言编程

    你可以把 Perl 嵌入到你写的商业软件中而不需要支付任何费用也没有任何限制。如果你碰上一个 Perl 社区解决不了的问题,那你也还有最后的一招:源程序本身。 Perl 社区不会在“升级”的伪装下租给你它们的商业秘密。...

    游戏画面就弹出内存不能为read修复工具

    一般来说,电脑硬件是很不容易坏的。内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。内存条坏了(二手内存情况居多)、2。使用了有质量问题的内存,3。内存插在主板上的金手指...

    51单片机C语言编程基础及实例

    //作为输入,首先输出高,接下 KEY_ON,P1.6 则接地为 0,否则输入为 1 //作为输入,首先输出高,接下 KEY_OFF,P1.7 则接地为 0,否则输入为 1 //永远为真,所以永远循环执行如下括号内所有语句 if( KEY_ON==0 ) ...

    0x00000000内存不能为read修复工具

    同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你 可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 假如是双内存,而且是不同品牌的内存...

    ftp 服务器,功能很强大,性能很稳定

    注意事项:不使用破解,也可以免费的全功能试用30天,30试用期结束之后,会自动变为个人版,一些高级功能无法使用。 另:本人有一种更简便快捷的破解方式,不过为了给菜鸟们多多学习,多多操作的一个机会,所以就只...

    VC++6.0核心编程源码.rar

    可惜,答案是没有这样的列表,而且Microsoft公司将永远不会建立这样的一个列表。因为在创建系统的新版本时,建立和维护该列表实在太困难了。 建立这样一个列表时存在的问题是,你可以调用一个Windows函数,但是该...

    《程序员》2011年08期

    在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他...

    《程序员》2011年第2期

    在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他...

    VB开发的NetShopForge网上商店程序.7z

    一些"电子商务/购物软件"解决方案总是热衷于复杂的编程代码,而不是着眼于客户的需求。 NetShopForge把商家和顾客的需求永远放在第一位。你不需要任何专业的电脑知识,安装,使用总是那么简单。

    NetShopForge网上商店程序源码

    一些"电子商务/购物软件"解决方案总是热衷于复杂的编程代码,而不是着眼于客户的需求。 NetShopForge把商家和顾客的需求永远放在第一位。你不需要任何专业的电脑知识,安装,使用总是那么简单。 有上百种的网络购物...

    二十三种设计模式【PDF版】

    正因为这点不同,导致建筑的管理模式和软件的管理模式就有很多不同, 有些人认识不到这点,就产生了可以大量使用"软件 蓝领"的想法,因为他羡慕建筑中"民工"的低成本. 要知道软件还有一个与建筑截然相反的责任和用途,那...

    DIY机器人.pdf

    多实践,去焊板子、调试,去写去调,只用软件模拟,是永远成不了高手的。 8.保存好你做过的所有的源程序、PCB、原理图等----那是你最好的积累之一。 9.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛...

    VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:

    笔者曾经在DOS设计过窗口图形界面,代码上千行,但实现的界面还是很古板、难看,除了我那个对编程一窍不通的女友,没有一个人欣赏它L;而且,更要命的是,操作系统,包括别的应用程序并不认识你的界面元素,这才是...

    windows环境下32位汇编语言程序设计

    答:不,我们用系统提供的int 13h和int 10h。 …… 同样,在Win32汇编里使用API也是为了使用Windows内核提供的功能。只不过使用的方式不再是中断方式而已,这不是Win32汇编语言“高级化”了,而是高级语言因为使用...

    JAVA自学之路

    在这儿之后,你可以选择向J2ME、或者Java GUI、Socket编程等方向努力,但是通过第一篇的办法,你可以很容易就将这方向过滤掉(永远不要忘了我们是为了就业),好吧,暂时和它们诀别,还是向着J2EE的方向前进吧。...

    单片机秒表课程设计报告.doc

    对于单片机,我们课本学习的是80C51, 但是这次做课程设计用的是89C51,这样不仅使我们掌握了80C51,而且对89C51也有了一 定的了解了,在课堂上学习的都理论的,跟实际永远有一定的差距,不实践就不会发现 问题。...

    单片机秒表课程设计报告(1).doc

    对于单片机,我们课本学习的是80C51, 但是这次做课程设计用的是89C51,这样不仅使我们掌握了80C51,而且对89C51也有了一 定的了解了,在课堂上学习的都理论的,跟实际永远有一定的差距,不实践就不会发现 问题。...

    51单片机快速入门

    并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定...

    金数龙仿真物理实验室

    更加容易,更加直观,你甚至可以做出回旋粒子加速器这样的实验,而且实验情况和实际情况一样,因为在软件中我们连相对论都考虑进去了,被加速的粒子永远超不过光速。 金数龙仿真物理实验室是面向大学、中学物理...

    ajax快速通道

    软件开发这个领域,永远都在飞速发展,大家都必须不断的学习新的知识、 技能、框架、IDE、甚至新的语言。传说中的骨灰级高手们,就像传说中的大侠, 任何武器、哪怕是一块木头到了他们手里,也能发挥惊人的威力,...

Global site tag (gtag.js) - Google Analytics