西西河

主题:196-Dylan Beattie :代码的成本 -- 万年看客

共:💬16 🌺51 新:
分页树展主题 · 全看首页 上页
/ 2
下页 末页
  • 家园 196-Dylan Beattie :代码的成本

    https://www.youtube.com/watch?v=001SxQCEuv8&list=PL4i9YSoIJiPfAq5TCk7xdVrJlxRAMbay-&index=7&t=2614s

    ……这听上去是个很简单的问题:代码有什么成本?我们编写代码,我们拿钱,代码在世界上流行开来,代码赚钱,代码实现功能,代码导致问题。在我撰写本次演讲稿的时候考虑了一下如今软件在多大程度上影响着世界的正常运行。我现在日常生活当中的一切行为都涉及到某种软件:我所有的个人音乐都收藏在Spotify,我家里已经没有CD光盘了;我用网飞而不看电视;我用脸书与朋友们保持联系;就算我在厨房里做饭的时候都会挂起一块苹果平板,在上面显示菜谱,在背景用Google Home放音乐。软件无处不在,在我们的手机里,在酒店客房里,在汽车里,等等。本次演讲的主题绝对不是“上帝啊,软件正在吞噬全世界,太可怕了!”我认为这目前的情况其实挺了不起的。大家在上学那会儿应该都遇到过这样的老师,他吓唬你说:“现在一定要背过九九乘法表,因为你们长大了以后不可能整天兜里揣着计算器到处跑。”现在我说:“咋了,我口袋里确实揣着个计算器。不止如此,我还揣着一本百科全书,一家音像店,一名钢琴教师,还有一名俄语教师。”科技真的很了不起,科技为这个世界带来的福祉真的令人惊叹。但是我确实认为我们现在就应当向我们自己以及其他人提出某些问题:我们撰写的这么多代码究竟意味着什么?会带来哪些成本?这些代码究竟会遭遇什么?

    我们首先回到历史上最好的十年,也就是二十世纪八十年代,《超级马里奥兄弟》问世的时代。我之所以想从《超级马里奥兄弟》谈起,因为《超级马里奥》由任天堂公司单独一位名叫宫本茂的员工设计,游戏的编写由八人团队完成,耗时只有一年,然后就彻底完工了。游戏体量只有256K。这款游戏1985年在美国上市,一张卡带卖25美元,足足卖了4000万盘。这个游戏的代码从来没有修改过,游戏软件的维护成本是0。从来都没有过什么《超级马里奥兄弟1.1windows升级版》。这个软件无懈可击,没有安全漏洞。任天堂拥有这个软件之后就开始售卖,每卖一份都能回收25美元。这个软件针对特定硬件设计,也就是任天堂娱乐系统这个硬件,因此不需要操作系统,游戏可以直接在硬件上运行,没有漏洞,不需要程序块。这是代码作为资产的一个罕见例子。拥有代码的人出卖代码来赚钱,每卖一份就多赚一份钱。超级马里奥兄弟的营销收入达到了几十亿美元。256K的代码也就相当于脸书主页上的css。如果脸书也能像《超级马里奥兄弟》那样凭借css收钱,那么每天都能赚360亿美元。

    当然事情不能这么办。即便是《超级马里奥兄弟》这样利润可观的代码依然不是盈利能力最强的代码,因为他们依然需要雇人来写代码。他们雇了八个人组成团队,每个人都要领工资。假如代码和软件彻底免费又如何?实际上免费软件要比付费软件更加悠久,因为当初二十世纪六七十年代计算机刚刚问世的时候,谁也想不到要为代码付费。当时往往只有那些发明了计算机的工程师与科学家才能接触到计算机,代码只不过是你自己装进计算机里用来运行的东西,就算你想卖也没人买,因为全世界只有你这么一台计算机,你的代码在其他地方全都运行不了。所以当时的人们很乐意分享各种理念创意,相互交换磁带,建设公告牌机制。直到二十世纪七十年代末期计算机才开始走入家庭与办公场所。到此时人们才想到应当出售软件,控制软件,并且通过软件收钱。结果立刻遭到了反击,为首的一人名叫理查德.斯托曼,据说他在美国大学的办公室里有一台打印机,他想解决打印机的故障问题,但是由于拿不到打印机驱动器的源代码而无从着手。公司表示这是专有产品,不能给你。他心想:“这可不行,这我不能忍。”于是他就建立了自由软件基地。

    “自由”(free)的含义在这里非常有趣,因为斯托曼当年说过:“多想想‘言论自由’,别总想着‘免费啤酒’。”你有没有告诉过你的老板,“有一个非常不错的新工具,我想用在我们的项目上。”老板问:“多少钱?”。你说:“啊不,这是为了支持言论自由。”老板说:“别扯这没用的,究竟多少钱?”在商务领域,当人们询问“这玩意儿成本是什么?”他们指的是要花多少钱?多少卢布?多少欧元?多少美元?假如你告诉老板“这玩意儿不花钱”,老板的反应一般是“那挺好,用吧。”我们认为这就是免费啤酒当中的免费。不知道有没有人参加过最后转换成斗殴现场的婚礼,都是因为人们免费啤酒喝多了。免费啤酒听上去像是个好主意,然后你就想到假如我们为所有人都提供免费啤酒会怎么样?可能会导致酗酒、未成年人饮酒、暴力、肝硬化等等,应该不是一个特别好的主意。所以我们可能从一开始就问错了问题。

    让我们回到言论自由的问题上来,我这里用WordPress举个例子。WordPress既满足免费啤酒的免费定义,也满足言论自由的自由定义。源代码向所有人开放,你可以下载,可以修改,甚至可以销售。换句话说你可以免费下载这款软件,然后向人们提供这款软件的修改版,并且向安装这款软件的人们收费。许多开发人员进入网络开发事业的第一步就是对WordPress或者类似的系统进行定制修改。你找一个开源系统,对其进行修改,然后交给客户并且提交发票。你心想:“安装免费软件能赚2500英镑,配置免费软件又能赚2500英镑。这个免费软件刚刚帮我赚了这么多钱,这笔买卖干得过呀。”是不是?然后你就收到了来自客户的短信:“网站出现紧急问题,马上给我回电。我说了是紧急问题,立刻给我回电。”你心想:“今天可是周末,我才不要在周末加班。”然后打开网站一看,我去。你问客户:“你装了什么插件?”他说:“所有的插件我都装上了。”行吧,有人把你的网站劫持了。你说:“不要紧,WordPress是免费软件。”客户说:“我可付给你5000英镑,对我来说可不免费。”我说:“不,我是说这是开源软件,你可以自己修改,这就是它的源代码。”客户说:“什么源代码不源代码的?我花钱你拿钱,我花钱向你买网站,你卖给我一个网站,这就是你的网站。你来负责修好,而且这次不能收钱。”

    我们需要另一种意义上的免费软件或者说自由软件,既像“言论自由”那样自由,也像“免费啤酒”那样免费,还要像“我这周末没事”那样没事:这周末我不工作,不接电话,不为任何事操心。像这样免于焦虑的自由来自信任。如果我们想要在礼拜五放心地离开办公室享受周末,那就需要能够信任我们使用的软件以及运行软件的系统。我想讨论一下这个理念。我们总觉得开源软件很好,因为你自己看看就能理解,之后就能放心地将任务交给它。有一个程序库名叫React。我在目前的岗位上继承了一个React项目,这个项目由已经离职的人写成。我以前没怎么接触过React,因此一开始我想可能需要花几个小时做做检查,试运行一下。所以我做了一点研究,发现React团队这样推荐:“如果你学习使用React或者用它来创建新应用,请使用Create React App。”我在理解新项目的时候有意向惯常做法。我下载了Create React App,我运行了一下,就花了几秒钟,然后跳出了各种五颜六色控制台输出,系统开始自行下载与安装各种内容:“警告!警告!警告!”然后我又运行了CLOC这个工具,计算了这段代码的行数,发现Create React App足足下载安装了21000个文件,156万行代码。三十秒钟之前这些内容还不在我的系统上。现在它们都成了我的代码,因为这是我的项目,这是我的责任。

    我心想这事还有点意思,于是我把这件事挂到了推特上:“还不等你打开文本编辑器,你的项目就包含了150万行代码,大多数都归于志愿者或热情人员。完全没有正规的审议与发布流程。这是现代网络开发的常态。”这条推文收到了许多回应。真正有趣的是,一半回应这么说:“是的我知道!这多么了不起!我完全同意你的说法。”另一半回应则表示:“是的我知道!这也太糟糕了!我完全同意你的说法。”我倒是没有选边。我觉得真正了不起的是我们能够做到这种程度。我们开发了打包程序库的管理软件。以至于只要运行一行代码就能得到另外150万行用不着自己写的代码。React的核心维护者之一Dan Abramov表示:“这些代码是开发与测试的共用依赖,实际代码不会发布给用户。”你安装的其实不是代码,而是开发React应用所需的一整套开发工具链。

    其实你不需要这么麻烦。你也可以打开记事本做一点React的脚本引用,下载23000行React代码,然后剩下的自己写。但是软件开发的流程就是这样,我们首先要安装一系列文件包,然后以此为基础开展工作。这种信任至关重要,你的代码与整个框架谈话,框架信任链接会正常运作,链接信任.NET Core会正常运作,至于WebForm则在一边干看着不帮忙。你可以说“我们不打算这么做,我们要另起炉灶。我们要自力更生。”对于某些应用来说另起炉灶或许确实很合理,比方说涉及国防,航空航天,卫生健康,情报的领域或许不能使用任何开源软件,必须自行构建应用。给你半年时间,赶紧组队开工。这种情况确实存在。但是对我们大多数人来说,绝大多数职业开发人员如果声称“我们不会使用任何程序库或者框架,我们要从头到从头构建体系”,那么你会学到三点。第一点,构建框架真的很有趣,你不需要解决真正的问题,只需要解决日后可能会发生的假设问题。其次,这样做非常非常困难,脸书与React的团队远比我的团队或者各位的团队更擅长这项工作,因为他们是专家,他们雇佣了非常聪明的人整天研究这个问题。第三,你的客户全跑了,他们全都跑到马路对面去了。客户说“我不管你怎么搞,反正我需要一个网站。”我们必须接受这一点,如果你想构建与发布人们期待的软件,就难免要使用程序包,开源软件,程序库与框架。一旦你接受了这是开发过程的一部分,你就可以做出更加明智的决策。

    这是你的代码,你要为它负责任。还会出什么错?开源软件有很多bug。埃里克.雷蒙德提出过一则林纳斯定律:只要审视的眼球足够多,所有的bug都很浅薄。只要有足够多的人审视一段代码,或早或晚所有的bug都会浮出水面。我也有一条定律:只要有闪闪发光的玩意足够多,所有的眼球都会四处乱转。世界上有这么多有趣的东西,以至于我们所有人都目不暇接:“我可以学这个,我可以写那个。”有时候特别重大的bug完全无人注意。2014年,新闻界爆出来一个漏洞名叫Heartbleed。这个漏洞有几项特点尤其有趣。首先,这是OpenSSL的漏洞。所有的网站都使用这套安全库来保护登录密码、信用卡号码、姓名、地址。我们利用安全套接体系来保护所有这些机密信息。Linux以及绝大多数操作系统都用这套系统。他们在这其中发现了一个bug。这是个关于负责任披露的很好例子。消息宣布当天就已经有了补丁,一旦听说这个问题就可以立刻下载最新升级版。其次,他们给这个bug专门起了个名字。一开始他们打算将其称之为cve-2014-e1234,后来有人说:“还是给它起个名字吧。起一个能上报纸的名字,能上电视的名字,让所有人都知道。”对于研发人员来说这也是第一次用不着我们主动去找老板说“我觉得我们可能有安全问题”。这一次是你的老板过来找你说“我们可能有安全问题”,因为他们看了电视。然后你就可以说:“我知道,没问题。我们已经打了补丁了。”

    但是OpenSSL是巨大的安全库并且非常重要。亚马逊,谷歌,脸书,微软,甲骨文都在用。全世界有许多聪明人有技能、有理由也有动机解决这种问题。开源世界最经常反复出现令人头大问题就是所谓的开源软件自以为是情结。如果你维护过开源软件项目,每一周总会有人在论坛上提问:“我要用你的软件达成这样那样的功能,你能实现吗?”你说:“不能,我的软件不是用来干这个的。”有时候有人发现了bug捅到论坛上,你说:“是的,我知道这是个bug,但是我们只有两个人在业余时间维护这个项目,要不然你给我写个补丁吧。”对方答道:“我才不替你干活。这是你的错误,你来解决。”有人完全耗尽精力离开了开源行业,因为这一行的氛围充满了咄咄逼人的敌意。太多的人们在互联网上发现免费代码之后就开始大呼小叫,因为“你的免费代码实现不了我们想要的功能”。他们不知道怎样利用这段代码解决问题,因此认定这都是你的责任,因为你没有提前提出解决方案。

    如果你依赖开源软件,必须事先做好计划。如果你需要修改与改造代码该怎么办?如果发现了漏洞又该怎么办?你不能将全套业务基于志愿者的好心之上,并且期待他们能关心你的问题,还愿意免费替你工作。项目维护人员总会转向其他新项目,项目经常遭到抛弃、转手或者关闭。也许你可以购买技术支持服务。与其红口白牙地说什么“你们的软件是废物”,或许你可以说:“我们很感兴趣花钱请你们添加这个功能或者解决这个问题,帮助我们让软件正常运转。”或许你可以雇人来给程序库做个扩展,替我们的硬件结构写个驱动器。或许你可以预留一笔钱款以备不时之需,一旦开源软件出了问题,可以依靠这笔钱来解决问题。总之一定要预先计划。开源软件意味着你可以免费拿到代码,但是并不意味着你就一定知道怎样利用这段代码。

    有些人说“我们不使用开源代码。我们只用商务软件。这是我们从软件公司买来的,他们有售后保证。”你可能雇人替你构建系统,购买了甲骨文、微软或者Sun的软件,满心以为既然你花了钱买软件,就会永远得到技术支持——但是并非如此。一切商品都有保质期。有些人依然在Windows Server 2003上面运行代码。我们都知道Server 2003有问题,所以才有了2008版本,2001版本,2013版本以及2018版本。但是他们还在运行2003版本,因为他们花了钱,所以就理直气壮地发问:“安全升级在哪里?”事情不是这么办的。有时候卖家就是会消失,软件公司就是会破产,代码就是会丢失。人们还在使用二进制,如果他们发现漏洞,那任何人都无能为力,你可以拿着收据去找人,你可以主张:“我花钱了!”但是都没用,因为你只能在空办公室里对着空桌子说话。不管你用开源软件、企业软件还是花钱雇人替你做软件,都要记住这是你的代码。代码赚了钱你留着,代码导致问题你兜着。你必须负起责任。

    而且各种意料之外的有趣问题都可能发生。去年有一位妮基女士,她是个医生,住在英国。有一天她想要申请一张巴克利信用卡。她在填写在线申请表的时候出现了这条错误信息:“你的性别与你的称谓不相符,请再次检查。”妮基随后在推特上吐槽说:“巴克利,如今都2017年了,我怎么不能既是女性又是医生?”这当然不是巴克利银行故意发布厌女声明,而是JAVA脚本运行故障。但是这件事上了报纸,上了电视,传遍整个网络,所有人都以为“巴克利银行声称女性不能做医生”。这只是一行代码以错误的顺序暂停了输入而已。可能谁也没想到,搞错输入顺序会导致严重的公关危机。这是你的代码,要关心输入其中的内容,JAVA脚本的故障终究要由你来负责。

    但是假如我们有完美的团队,有百分之百的明星开发员,从来不犯错误,没有bug,代码完美,完全得到测试,一切都万无一失,那就没问题了是吧?但是你的体系与软件当中还有一些依赖性与代码毫无关系。2018年因特尔公布了两个漏洞,名为Meltdown以及Spectre。这两个安全漏洞非常意义重大,因为它们存在于所有的CPU当中。世界各地任何电脑使用的处理器都接受了高性能优化。可以计算多重代码分支,从而提前决定应该运行哪个分支。因特尔发现这种算法的设计存在着根本性的漏洞,这不是升级某一个模块就可以解决的问题。所有的运行体系都需要单独打补丁。问题在于打补丁的唯一方式就是去掉这个性能特征。因特尔公开挑明了这一点。公司安全主管Leslie Culbertson表示:“一旦启用补丁,我们发现性能影响约为基准总体得分的2%到8%。”昨天你的计算机很快,但是有安全漏洞;今天你打了补丁,现在变慢了8%。如果你按分钟交钱购买了云主机服务,而且正在满负荷运转,那么一旦所有这些机器都慢了8%,你就要多支付8%的成本来计算同样的过程。补丁固然很好,但是真正的补丁是换新电脑。因为现在因特尔、AMD以及ARM的新款处理器没有这个问题。

    我们已经想当然地接受了要经常换新电脑新硬件。大多数情况下,每当你买一台电脑做生意,都会与税务部门达成某种共识:今天你买这台电脑花了2000欧元,五年之后这电脑就不值钱了,只能卖废品。这种程度的折旧是可以接受的。今年买的新电脑很好用,明年就有点慢,后年更有点慢,大后年只能带回家给孩子玩《我的世界》,第五年就得扔到垃圾场。手机的情况更糟糕。世界上大多数地区都认定了每两年就该换一款手机,因为手机公司一直在催促:“你能升级吗?该升级了。签两年合同你就可以免费升级。”我觉得这也太疯狂了。我有个iPad——其实我家里有好几个iPad,但是我有一个第二代iPad,六年前买的,花了六百英镑。相当于七八百欧元,目前运作良好,电池没问题,屏幕没问题,但是基本已经没用了。之所以没用了是因为装不上最新的操作系统。许多有用的应用——例如网飞、BBC电视以及GarageBand——在老版本操作系统上不能运行。这个六年前还很了不起的革命性设备现在已经完全没用了,只能放在家里的箱子里,跟iPhone3,iPhone4,iPhone5,iPhone6搁在一起。

    这也太奇怪了,怪异之处不仅仅在于我们总要买新设备。现代智能手机是绝对的工程学杰作。它的信号处理芯片小到要用显微镜才能看见;它的内存用的是浮动量子门半导体,这种东西在物理层面根本不该存在,可是我们却能够大规模生产;iPhone的镜头是是在实验室生长的蓝宝石,这是已知最坚硬的物质。所有这些神奇的创新共同构建了一部现代手机、平板或者便携设备。此外你还需要极为特别的材料才能造出一部现代手机。元素周期表去掉气体、液体与辐射性物质还有80种稳定元素,一部iPhone在制造流程的各个阶段总共需要其中的60种。我们先挑一种来看看。你的手机当中有一个或者两个扩音器,还有个小马达能使扩音器震动发声。这一切都需要磁铁,非常微小且精确的磁铁。制作这种磁铁需要钕,这是一种了不起的强磁性元素。那么怎样得到这种物质?全世界几乎所有的钕都要在中国开采。要开采这种元素,首先要把它挖出来。挖出来的稀土矿石里仅仅含有5%的钕元素,剩下的都是泥浆、岩石、铀与钍,都是你不想碰的坏东西。从地下挖出一公斤这种物质之后要将其加工成为磁铁。加工过程需要大量的电力与大量的水——冶炼厂每天要消耗两个奥运会泳池的水——还需要硫酸引发一系列化学反应,最后从一公斤矿石当中提取出你需要的50克钕,剩下的是各种有毒有辐射性的淤泥。我们将淤泥装进罐子里埋到地下,希望日后有人想出这些东西有什么用。这才仅仅只是一种元素而已。另一种稀土元素铈也要经历同样的过程:挖出来,冶炼,耗电,硫酸,水,微量辐射元素。手机电路当中的电容需要钽,这种元素要从钶钽铁矿当中提取。绝大部分钶钽铁矿来自中非地区,流入钶钽铁矿这一行的绝大部分资金钱都会落入腐败政府手中,用来购买军火以及干坏事,更不用说矿工的劳动环境非常糟糕。但是我们需要钽。在手机电池里大概有一克锂。锂非常擅长存储能量,所以被用来制造电池,有时候锂会被激活,其中蕴含的能量会一下子全部释放,导致电池爆炸。所以我们不能携带GalaxyNote7手机上飞机,因为它们经常着火。

    现在一部智能手机或许包含30克铝,一克锂,20毫克钽。单独一台平板或者手机并不是问题,问题在于我们会销售大量手机。最近关于手机销量的加德纳市场调查显示,目前全世界销售了80亿部手机,75%是安卓设备。姑且说60亿部安卓手机被卖了出去,根据谷歌其中20亿部还在得到使用。这意味着还有40亿部安卓手机不知道跑到哪里去了。假如将这些手机电池的锂全都提取出来堆在一起,足有埃菲尔铁塔这么重。现在这些锂就放在世界各地的抽屉里边吃灰。为了提取这些稀有昂贵的元素,我们付出了如此巨大的努力。我们拿来看两年的猫视频,然后扔进抽屉里,再换一部新设备。对此我们能做什么?这并不是坏消息,许多国家的许多人正在意识到这样做不行。在英国,欧洲与世界各地都有各种指导意见与立法。你要扔掉旧手机,不能扔进垃圾箱,必须送去回收。苹果建立了专门拆卸旧iPhone手机回收材料的工厂,用来制作新的iPhone手机。有趣的一点在于人们开始发现所有废旧电器都是一座金矿。一公斤旧手机和一公斤刚挖出来的金矿石相比,手机里的黄金要比矿石里的黄金更多。许多人开始发展工业技术来回收所有这些矿物质。进步确实存在。

    画面上是2007年以来所有iPhone的全家福。苹果公司每过一年半就会推出一台新版手机。想象一下,假如手机公司表示“智能手机已经足够好了”会怎么样?现在的手机不能更大了,不然装不进口袋里;像素这么小,根本看不见,可以呈现完美图像;镜头这么精良,我们随便拍一张照片发在大屏幕上展示依然非常清晰;手机已经足够快,可以存储你拍摄的所有照片,还与云端相连。如果手机公司表示:“我们的任务完成了。我们要保证这台手机在未来五年乃至十年都能正常运作。”那么软件开发人员的日子将会多么好过?我们可以长期针对同一个平台进行开发,而不是每三个月就要上手另一套新框架。我们可以彻底了解这个平台的一切,就好像为超级任天堂构建《马里奥》的团队,他们面对的主机未来十年都不会改变。我们可以为这样的平台开发最好的软件,最好的游戏,最好的应用。这台手机用十年,不用担心升级,换换零件就能接着用。我知道这种事不可能发生,因为手机是一门大生意。要想赚钱就必须卖出更多的手机。但是再想象一下,假如中国的每一位钕矿矿工都能拿到与软件开发人员一样高的工资,那么手机肯定会昂贵得多,一台新iPhone手机或许就要花费15000欧元。或许到那时我们将会试着让新算法在旧机型上也能运行,因为到时候人们肯定不会轻易更换手机。

    我们谈到了很多问题,软件的问题,可持续性的问题,bug与安全漏洞的问题。但是假设代码没问题,完美的代码没有bug,全部经过测试,运行环境很干净,硬件可持续。就算这样,代码依然会做坏事。就在上个月,五位大众汽车的主管在德国刑事法庭上被起诉欺诈。这是一场大型丑闻的最新进展,可以追溯到好几年前,一切都围绕代码。2009到2015年间,大众汽车安装了引擎管理软件。60万辆销往美国,几百万辆销往世界各地。这段代码有一个功能,可以显示汽车什么时候正在接受排放测试。世界很多国家都在测量汽车造成多少污染,排放了多少各种气体。大众的某人想到:“我不喜欢这个,我喜欢污染,废气排放得越多越好。我们能不能在软件里设计一个功能,让这辆车被测试时可以这样表现,上路时又可以那样表现。”他们就是这么做的。最神奇的一点在于有一个团队对这个软件进行了分析,他们基本上采用逆向工程手段分析了大众汽车引擎控制系统的软件,然后发表了一篇论文:《他们怎么做到的?对于现代汽车排放欺诈装置的分析》。在代码当中存在一个变量叫做stNsCharCor,可以取值0或者1。0代表在路上驾驶,1代表正在接受测试。想象你在大众工作,你看到这段代码就去问同事:“这个变量干什么用的?为什么代码会让汽车排放过量污染?”就这么显眼,但是谁也不知道,谁也没有谈到这件事,多少年来都没有人公开这件事。最终遭到揭露之后造成了巨大的丑闻,大众被判处了两百亿欧元罚款,遭遇了公关危机,公司内部各色人等都将面临刑事指控。去年有研究估计大约有59人将会因为大众汽车这一行代码导致的额外污染而死。我们不知道这59个人是谁,但是确实有人专门从事此类数据的估计工作。此外这行代码还会导致多种疾病,交通事故致残以及其他代价。在座各位看到这样的一行代码或许只会想:“这是怎么回事?”我不相信决策层亲手写下了这行代码,我怀疑工程师只被告知“这是你的工作,请满足要求”,于是他们就照做了。他们按照要求写了代码。但是只要看一眼这行代码你又有理由感到关切,因为这行代码并不复杂。

    那么假如代码本身经过严格检查之后看上去没有问题,我们所做的一切都没有漏洞,但是代码依然造成了问题,我们又该怎么办?2019年10月。印尼狮子航空610从雅加达起飞,12分钟之后坠落,死了189人。四个月之后,埃塞俄比亚302号航班搭载157人也在起飞时坠毁,无人幸存。两起悲剧事故的共同因素在于涉事飞机都是波音737max。我是软件宅男,也是航空宅男,我有两个叔叔是飞行员,我半辈子都在坐飞机。我一直在追踪这个故事,因为在第一场事故之后不久就有媒体认为这是个软件问题。我说或许真是个软件问题。第二起事故之后人们说肯定是软件问导致了这两起坠机。调查正在进行,还要经过严格的流程。航空行业非常擅长在坏事发生之后研究一切。同样的事故发生两次非常少见,因为第一次事故之后他们就会叫停涉事机型并且研究事故原理。根据目前已经掌握的情况,导致这两起事故的原因如下。首先要理解航空当中有一个名为等级分类的概念,指明某一位飞行员可以驾驶某一类飞机。假设航空公司买下一款新飞机,那么所有飞行员都要重新接受培训,学习驾驶新飞机,然后才能带乘客上天。这要花时间要花钱,很不方便。如果你想卖飞机,那么最好告诉航空公司:“这是新款737,严格来说跟旧款737一样,就是有一点改进。你的飞行员依然能飞。”

    这就是波音制造737max时的思路。他们想要制造的飞机一方面什么都不改变,因为我们希望所有能飞737的飞行员都能直接飞这款飞机;另一方面我们还需要让新飞机航程更远,因为空中客车a320长途客机伤害了我们的生意,我们要与他们竞争,我们需要更大的引擎,更大的油箱,更大的载客能力。他们有一点小问题,因为737max8的引擎太大,以致不能装在机翼之下。将老式737与新式并排比较,比一比机翼的最高高度,就会发现高度差。新款大号引擎不能装在机翼之下,只能将其前移,挂在机翼前方,略微高了一点,这意味着如果你加大油门,飞机会往机头上翘,而老式737不会这么飞行。这是个问题,所以波音想借助软件来解决这个问题。737就像大多数现代飞机一样采用电传飞行控制系统。飞行员按一下控制界面,告诉计算机向上向下。飞行员想做这样那样,计算机根据这些输入驾驶飞机。但是计算机也可以覆盖飞行员的输入,采取自己的行为。于是波音为机载软件设计了一个功能,简称MCAS,全称操作特征增强系统。他们写了一段代码——这是好代码,管用的代码——“如果发现飞机正在抬头,请抬起机尾让机头落下。不要告诉任何人正在发生这种事,因为我们需要模拟老式飞机的表现,好让飞行员感到新款737与他们驾驶过的每一款老式737都一样。”两架坠毁的飞机都遇到了攻角传感器问题。全靠这一个传感器告诉计算机飞机正在是否正在抬头。根据我们目前掌握的情况,这个传感器发生了故障,而且飞机上并没有备份系统。飞行员只知道这款飞机与老式737一样,他们不知道这个额外体系的存在,操作手册当中倒是写了,但是发生事故的时候谁也顾不上通读手册。你的飞机表现很怪,你要拯救飞机照顾乘客。不知道飞行员们是否了解这个流程,还是说他们没有时间来进行校正。总之将这个问题称之为软件问题实在不太真诚,因为全靠软件才能让这架飞机飞得起来。这两起事故在我看来是整个体制的问题,从设计过程到认证过程都有问题。软件生效了,但是设计软件的人们却不理解可能会出现这样的场景:飞机上只有一个攻角传感器,飞行员不知道该怎么办。所有这些互不相关的部分全都可能出错。一旦它们出错,飞机就会坠毁,人们就会死。为了这些死难者,我们有责任彻底理解导致事故的一切根源,怎样才能够改进,怎样才能够阻止这种事再次发生。

    上述案例只是几百个类似案例当中的一个。我们应当改变看待软件的方式,因为软件正在成为日常世界根基的一部分。2018年3月,Elaine?Herzberg被一辆自动驾驶汽车撞死了。这是优步的测试项目。优步打算研发自动出租车,这样一来就不用给出租司机付钱。只需要将机器人汽车送上马路,接上乘客,优步就能发大财。至于出租司机该怎么办?优步大概不管。Elaine Herzberg案件最终以庭外和解告终,没有得到法官与陪审团的评议,换句话说人们依然没有决定,如果你写了个模块,放在GitHub上面,被别人下载,用在自动汽车的控制系统当中,自动汽车撞死了人,究竟谁该负责?你要不要负责?下载的人要不要负责?造车的人要不要负责?算法本身要不要负责?我们不知道,没有正确答案。我们需要应对这些问题的框架。航空与医学行业都有渎职责任保险,软件开发人员或许也应该考虑这些问题。

    而且这其中的干系远比单纯几起事故更加重大。美国最常见的工作是卡车司机。美国的卡车司机人数比任何工作都多,足有350万人。一旦这些人被自动卡车取代了之后要怎么办?这些卡车可以彻夜驾驶,加完油就可以继续开。公路上突然出现了一周七天全天二十四小时不停歇的卡车,350万人突然就失业了,运输行业不再需要他们了,自动卡车接手了整个货运行业。这么多人突然失业会对社会造成怎样的影响?我来自英国,那里正在经历一代人以来最大的政治危机,也就是英国脱欧。脱欧不是自然灾难或者战争导致的,而是由于民选政府表示我们要举行公投,然后就脱了欧。从那之后人们意识到英国政府陷入了危机。他们完全陷入了僵局。再然后人们得知了一家剑桥分析公司的存在。他们在多个社交媒体上发布了高度针对性的广告,向每一位个人用户投发专门针对这个人设计的脱欧广告,然后这则广告就消失了。在英国,媒体受到高度监管,在报纸上、在广播上、在电视上这么做都会违反法律。就算你当真这么做也会留下记录,会留下报纸作为法庭证据:“这是你出版的内容,你犯法了。”但是如果有人在脸书上做十五秒的广告,然后就消失不见,你怎么知道这种事确实发生过?你怎样监管这一类行为?几年前脸书的格言是“快速运动,打破一切”。我没有意识到英国政府也是他们打算打破的东西之一。如果你现在上脸书创建账户,可以看到这样一句话:“创建账户免费且永远都会免费。”这意味着你不用花钱,但是除了钱以外还有各种各样的隐藏成本。此类软件、它们的用法、使得它们得以问世的体系都可以被坏人直接拿来利用,政府与监管人员只能跟在后面挠头皮。

    我们都见过这家伙。这是一位高级管理人员,每年拿几百万的欧元、卢布或者欧元,却不会发电邮,而且还会拿这种事开玩笑:“哈哈,这些机器太笨了。”你知道我说的是哪种人吗?这些人正在大型企业做决策,影响我们的生活,影响国家,影响我们的社会。绝不能让做出决策的人们不理解怎样发电子邮件。如今是2019年,所有的公司都是软件公司,所有的公司都是科技公司,并非这样的公司必然会被其他公司抹杀。我们必须将软件视为相互连接的整体体系的一部分,而不能认为“其他一切都没问题,只有软件出了问题”。如果软件出了问题,那就意味着其他一切都出了问题。

    今年是阿波罗11号任务的五十周年,尼尔.阿姆斯特朗与巴兹.奥尔德林登月的五十周年。我认为我们应当庆祝,这是神奇而又大胆的成就。我们不要颂扬十二个白人登月,因为我们早已颂扬了几十年。今年让我们也来颂扬一下所有其他人吧,例如航太总署的工程师、清洁工、项目主管、医生、以及让阿波罗项目得以成真的全世界五十万人。尤其让我们颂扬一下这位玛格丽特.汉密尔顿,她率领的软件团队搭建了阿波罗的导航体系,她是第一位使用“软件工程学”这个词的人,她第一个推广了她所谓的体系观念。软件只是体系的一个部分,除非理解所有部分的功能,否则就不能理解软件。在阿波罗项目当中其他部分包括电气体系、液压体系、推进体系,等等。你必须理解所有这一切才能理性且有意识地决定如何构建软件,如何测试软件,如何确定软件表现正常。

    我们自称各种头衔:黑客,码农,开发员,前端,后端。也有人自称工程师,如果我们真想成为工程师,我们必须不再将代码仅仅视作单元测试与集成测试的对象,而是要记得代码是巨大体系的一部分,其中包括航空公司,飞行员,律师,自动驾驶汽车,锂矿,还有各种各样的东西。我们要帮助人们理解这一切,不仅局限于参加会议的人们,还包括我们的父母,朋友,子女。我们要谦虚,要负责任,要和善。我们的软件将会改变世界,我们需要整个世界来帮助我们理解与管理这其中的成本。

    通宝推:唐家山,普鲁托,tom,桥上,
    • 家园 737Max那段真有意思

      波音想开发新飞机,却又不得不假装是一款旧飞机😄😄

    • 家园 挑一个小小的bug

      这里提到的JAVA脚本

      这当然不是巴克利银行故意发布厌女声明,而是JAVA脚本运行故障。

      出于一个程序员的强迫症,不得不指出,应该是JavaScript 脚本, 而不是Java脚本。JavaScript跟Java是两个不同的语言。前者多数用于前端(也有用于后端的,例如NodeJS),后者用于后端,而且我们不会称之为脚本,只会说是JAVA程序。

      如果你写了个模块,放在GitHub上面,被别人下载,用在自动汽车的控制系统当中,自动汽车撞死了人,究竟谁该负责?你要不要负责?下载的人要不要负责?造车的人要不要负责?算法本身要不要负责?我们不知道,没有正确答案。我们需要应对这些问题的框架。航空与医学行业都有渎职责任保险,软件开发人员或许也应该考虑这些问题。

      至于这个,一般的软件公司卖的软件,以及网上的开源软件,都有免责声明,想必不会负什么责任吧。

      至于自动驾驶出了车祸,是哪个主体负责?我就不知道了,除了问保险公司之外,也许可以问问 @121gdi ,他可是持牌大壮,也许可以给点建议?

      • 家园 今天刚好看到这么一个事故

        杭州、某人、特斯拉,喝酒了,知道自己不能开车。于是打开了“自动驾驶”(特斯拉声明是自动辅助驾驶),结果撞了。

        警察叔叔以酒驾拘留某某。

        某某辩称,自己坐副驾驶,没开车,算不得酒驾😂😄不是酒驾,连危险驾驶都不是,因为根本没开车😅😅

        • 家园 好像现在还不能真自动驾驶吧

          所以那人恐怕真有问题,但用什么罪名判是问题

        • 家园 案子来了

          我就问 @121gdi 这种国内的案子你接不接?

          • 家园 算酒驾

            除非他把特斯拉那个自动软件拉到被告席。

            不然交管部门没空跟他扯皮。

            妥妥的酒驾,办了再说。

            修改:这种案子没必要接。

            跟特斯拉打官司,原告打算出多少律师费嘛。。。

            这种案子接了,一般就是安慰一下,原告先生,我尽力了。

            修改2:我想补充啥来着,忘记了。

            哦对了,这种事一般都有后续的,直接看后续就行了。

            如果原告能掀翻交管的酒驾处罚,那证明原告是有本事的。

            如果原告顺便能把特拉斯拉上被告或者另开一案,

            那原告是有能量的。

            非富即贵啊。

            亦或者是是可忍孰不可忍,虽千万人吾往矣。

      • 家园 驾驶主体是人,人负责

        人有保险,保险负责。

        主体是软件,软件公司负责。

        软件公司有投保,保险公司负责。

        所有保险公司负责范围外(免责条款)的,投保人负责。

        因车辆质量问题导致事故的,车辆公司负责。

        公司有保险的同上。

        • 家园 但是软件公司有免责声明可不可以?

          假如滴滴用了百度的自动驾驶软件,百度卖软件时肯定会有免责声明,出事概不负责。

          因为这条免责条款,滴滴又会在滴滴打车APP上出个免责声明,如果出了事故,滴滴概不负责,乘客你看着办,无人驾驶便宜一半,你要不要赌一把?

          这种情况下,要怎么厘清责任?

          • 家园 免责条款无效

            1.乘客把事情闹大,免责条款无效,看滴滴和百度谁司法力量强,弱的赔钱。

            2.成客出事,滴滴主动私了,然后滴滴找百度私聊(不是错别字)。

            3.百度不管,滴滴不管,乘客打官司,三家一起调解。

            4.乘客也是有能量的,带着民意(人民的好奇心)跟滴滴和百度掰腕子。滴滴百度出声明他们是负责任的公司,肯定会妥善解决。司法出个声明,他们秉公执法。然后三家私了,法院撤诉或达成和解协议,内容依法不公开,热度减少,关注度降低,事情结束。

            只有这四种情况,不可能有其他,你猜哪种可能性大?

            这种案子不可能有正式判决的。

            当然如果有人硬是要搬出法条来扣字眼,拿出类似的案子来证明我是胡说八道,请以他为准哈。

            • 家园 是错别字:成客
            • 家园 这个我有点奇怪

              免责条款既然无效,怎么会有免责条款这种事情?

              既然你说的四种场景,我也不知道实际会发生哪种,赌两块钱的话,我会每种都压五毛😄😄😄

              • 家园 这种免责条款

                通俗来说就是“霸王条款”。

                属于甲方“有责无责,先推责再说”。

                你可以把它理解成“商品售出概不负责”

                “离柜概不负责”

                “擅自游泳概不负责”

                等等。

                法治的再健全也要具体的人去执行,中外都一样。

                这种霸王条款深究起来其实统统无效,还是要看具体情况来。

分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河