当前位置: 首页 > news >正文

世界上最完美的两个软件,太厉害了!

今天给大家介绍两个软件,一个体现了人类在软件开发流程上的极致,另外一个则体现了程序员个体能力的巅峰

01

航天飞机飞控软件

先来说第一个,航天飞机飞行控制软件,就是下图这个大家伙。

1489657d122c8c5fff9570a072f4151c.png

航天飞机重达120吨,还携带着2000吨的燃料。

它有四台硬件相同,软件也相同的计算机对发射过程进行精准控制,从几千个传感器中提取信息,每秒做出几百个决定,并且对每个决定进行投票。

第五台计算机,则运行着不同的软件,随时待命,准备替换其他发生故障的计算机。

这些计算机要确定什么时候对主发动机点火,什么时候下令固体火箭助推器点火,火箭姿态控制....

每次发射,软件都控制着价值40亿美元的设备,六名航天员的生命,以及国家的梦想。

这个软件不能崩溃,不能重启,最小的误差都不允许:一个三分之二秒的计时错误就会使航天飞机偏离航线近5公里。

洛克希德马丁公司的航天飞机小组实现了目标:软件几乎没有错误,接近完美。

软件的最后三个版本,每个版本(42万行代码)只有一个Bug。

最后的11个版本一共有17个错误,同等复杂度的商业程序有5000个。

这样的软件是如何炼成的呢?

答案是极为苛刻软件流程。

洛克希德马丁公司的航天飞机软件小组有260名员工,这些人创造了一种完全不同的开发文化。

没有超级明星程序员,开发软件的整个流程都是有意设计的,不依赖任何特定的人。

这个流程使得他们过上正常的生活,满足最后期限,交付完全符合其承诺的软件。

这个流程包含几个要点:

1. 软件的质量取决于软件的计划

在航天飞机软件开发小组,软件开发周期中有三分之一的时间不写代码,而是和NASA一起用来讨论需求:软件应该做什么事情。

即使是最微小的细节也要达成一致。不是口头达成一致,而是写下来,文档化,形成规范,非常专业和精确。

未经双方的同意,规范中的任何内容都不会更改。

没有良好定义的规范,程序员不会改任何一行代码。

例如让航天飞机使用GPS导航,这一变化仅涉及6366行代码,占程序总量的1.5%, 但是相关的文档长达2500页,涵盖了各种各样的条件,分支,几乎就是伪代码了。

而航天飞机系统的软件,总文档足足有30卷,40000页!

2. 两个百科全书式的数据库

一个是代码历史的数据库,每一行代码都有注释,显示每次的更改时间,更改原因,更改目的,有哪些文档详细说明了更改。

对于代码发生的一切都记录在这里,每一行代码的“祖谱”都可以立刻提供给每个人。

第二个是错误数据库,记录了软件在编写和运行时发生的每一个错误,可以追溯到近20年前。

每个错误都会记录下它被发现的时间,是谁发现了它,当时正在发生什么活动(测试,训练,飞行),错误是如何引入的,为什么逃过了设计阶段,开发阶段,测试阶段的严格审查.....

由于积累了如此多的数据,以至于他们开发了一个代码模型,能预测某个版本中可能有多少错误。

如果开发人员和测试人员发现的Bug太少,大家会重复流程,努力使得现实和预测相匹配。

3.不止要修复错误,要修复任何引入错误的东西

如果软件存在缺陷,那么编写它的方式一定存在问题。

在计划阶段没有发现的Bug,是如何逃过检查的?检查流程是否出了问题,是不是要在checklist上增加一项检查?

重要的是,不要将错误归咎于个人。流程要承担责任---启动一个分析的流程来发现Bug的原因。

航天飞机软件开发小组的流程是如此强大,不仅仅通过了SEI CMM5的认证,而且SEI的不少标准就来自于这个小组的各种实践。

洛克希德马丁开发了近乎完美的软件,大家肯定会想到一个问题:这种开发方式会不会扼杀创造力?

他们的回答是:会,因为大家必须按照手册上规定的流程去做,并且时时刻刻都有人在背后监督。

人们必须将创造力用于改变流程,而不是改变软件。

02

排版软件TEX

经典巨著《计算机程序设计的艺术》在程序员界可谓是无人不知,无人不晓了。

06eee0ab2e97ddb0cab38e62f5fc223c.jpeg

1973年,这部刚出到第三卷的书(计划写七卷)已被计算机界视为“神作”, 1974年美国计算机学会就“迫不及待”的把计算机界的最高奖图灵奖授予高德纳。

此时高德纳仅仅36岁 !只靠一套还没有完成的书就获得ACM图灵奖,不但是前无古人,估计也后无来者了。

然而令人大跌眼镜的是, 拿到图灵奖以后, 高德纳宣布暂停写作, 理由竟然是现有的计算机排版系统太差,破坏了书的美感 !然后单枪匹马开发出了革命性的排版系统TEX , TEX至今仍是全球学术排版的不二之选。

TEX功能强大,几乎无懈可击,其版本号也很有意思,不是数字(3.0, 3.1, 3.2....) 也不是年份(Windows 95, 98, 2000...),而是不断逼近的圆周率 (3.1415926...) ,这从侧面反映了软件几近完美,不需要做改进了。

高德纳曾表示“最后一次升级是(于我过世后)将版本数改为 π,那时任何余下的漏洞将被看作程序的功能!

有趣的是高纳德为此还设置了奖金,谁能从TEX 发现第一个Bug ,奖励2.56美元,然后每年翻一倍,5.12,10.24......

作为算法的大师,不可能不知道指数增长的可怕性,但高德纳对自己的代码质量非常有信心,事实上,当奖金达到327.68美元以后,基本上就没什么Bug报出来了。 

那些找到Bug 的人收到高德纳签名的支票以后也不去兑换, 而是作为珍品收藏了 :-)

高德纳编程能力之强可以说是碾压硅谷的所有程序员,面向对象的发明人Alan Kay(2003年图灵奖)这么说过:

60年代末,当我在斯坦福从事AI项目时,每个感恩节我们都会和硅谷的编程高手们举行编程竞赛,McCarthy(人工智能之父,1971年获图灵奖)出题, 奖品是好像是一只火鸡。

高德纳参与的那一年,把我们都给虐了, 他的代码无论是程序执行和算法执行都是最快的,并且他用的是一台最慢的批处理机器!

我们问高德纳:“你是怎么做到的?”

他说:“当我学习编程时,如果每天有五分钟的时间使用机器,就高兴得不得了, 所以必须要让程序一次运行成功,没有错误,算法设计达到最佳。”

(完)

1f304ffe6b289f4077bcc0432af372f2.png

4b9e334d9709b9695ad282e9918fd030.png

2947657c73bc592bbda83e55bb58f888.png

bbc3360aa19f6114351a7b0ca165bbad.png

相关文章:

世界上最完美的两个软件,太厉害了!

今天给大家介绍两个软件,一个体现了人类在软件开发流程上的极致,另外一个则体现了程序员个体能力的巅峰。01航天飞机飞控软件先来说第一个,航天飞机飞行控制软件,就是下图这个大家伙。航天飞机重达120吨,还携带着2000吨…...

教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数

如何成为一个集雷切,写轮眼侦查和拷贝与一身的卡卡西,下面教你! 目录 第一式——雷切! strtok 第二式——写轮眼侦查! strerror函数 第三式——写轮眼拷贝! memcpy 模拟实现memcpy函数 😎…...

【LeetCode】剑指 Offer(24)

目录 题目:剑指 Offer 47. 礼物的最大价值 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 47. 礼物的…...

javaEE 初阶 — CSS 元素的显示模式与盒模型

文章目录1. 元素的显示模式1.1 块级元素1.2 行内元素1.3 行内元素和块级元素的区别1.4 改变显示模式2. 盒模型2.1 边框2.1.1 边框的粗细2.1.2 边框的颜色2.1.3 边框的风格2.2 内边距2.3 外边距2.3.1 margin 的特殊情况1. 元素的显示模式 1.1 块级元素 常见的元素: h1 - h6 、…...

新星计划-我为什么要写博客?写博客的意义是什么

CSDN的各位友友们你们好,今天千泽要和大家交流一下写博客的意义,并且鼓励大家参加CSDN官方举办的新星计划,这个可以让我们更快的成长,十分有价值.接下来让我们一起开始吧!如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!🚩part1:自我介绍我是一名来自…...

嵌入式学习笔记——STM32的USART收发字符串及串口中断

USART收发字符串及串口中断前言字符串的收发发送一个字符串接收字符串需求利用串口实现printf中断中断是什么前言 上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串…...

数据分析之Pandas(1)

3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选…...

17、江科大stm32视频学习笔记——USART串口协议和USART串口外设

目录 1、通信接口 2、 硬件电路 3、电平标准 4、串口参数及时序 5、USART简介 6、USART工作 (1)写操作 (2)读操作 (3)帧头和帧尾的添加和除由电路自动执行 (4)硬件数据控制…...

leetcode:有效地括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都…...

四等分list

Testpublic void s (){ int targ 4; List mList new ArrayList(); List<List> mEndList new ArrayList<>(); for (int i 0; i <34; i) { mList.add(“item” i); } // System.out.println(mList.toString()); if (mList.size() % targ ! 0) { for (int j …...

php连接sqlserver数据库

docker 安装sqlserver数据库sudo docker pull mcr.microsoft.com/mssql/server:2017-latestsudo docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORD<YourStrongPassw0rd>" -p 1433:1433 --name sqlserver --hostname sqlserver -d mcr.microsoft.…...

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

Problem - F - Codeforces 翻译&#xff1a; 哈尔滨&#xff0c;这个名字最初是一个满语单词&#xff0c;意思是“晒渔网的地方”&#xff0c;从松花江边的一个小农村居民点发展成为中国东北最大的城市之一。1898年&#xff0c;随着中国东部铁路的到来&#xff0c;这座城市首先…...

Maven的下载和配置

一、前言 一般按要求下载jar ,但是jar 包版本不好控制。有时候就会jar版本不同导致项目运行的结果也有差异&#xff0c;这样在团队开发中&#xff0c;在多个项目开发的是&#xff0c;jar包还要进行拷贝&#xff0c;可能也会出现版本还jar损坏的情况&#xff0c;所以一个能统一…...

服务高并发、高性能、高可用实现方案

服务高并发、高性能、高可用实现方案 软件开发的三高指标&#xff1a;高并发、高性能、高可用。 高并发方面要求QPS 大于 10万&#xff1b;高性能方面要求请求延迟小于 100 ms&#xff1b;高可用方面要高于 99.99%(4个9) 一、高并发&#xff1a; 高并发是现在互联网分布式框架设…...

uniCloud在线升级APP配置教程

app在线升级背景实现思路流程流程背景 因用户需要添加手机h5页面来进数据操作实现思路流程 实现流程图流程 相关文档&#xff1a;帮助文档 https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html 注册服务空间 https://unicloud.dcloud.net.cn/pages/login/login uni升级…...

idea常用的快捷键

idea常用的快捷键Alt回车 导入包,自动修正CtrlN 查找类CtrlShiftN 查找文件CtrlAltL 格式化代码CtrlAltO 优化导入的类和包AltInsert 生成代码(如get,set方法,构造函数等)CtrlE或者AltShiftC 最近更改的代码CtrlR 替换文本CtrlF 查找文本CtrlShiftSpace 自动补全代码Ctrl空格 代…...

全志V85x硬件设计大赛作品精选第一期,快来Pick你心目中的最佳方案

1、V853-智能交互摄像头开发板 该参赛作品基于全志V853开发板制作的一款类似眼镜外挂的小产品&#xff0c;可以对场景进行辅助识别&#xff0c;并通过云端交互实现物联网控制&#xff0c;进一步实现物联网与人机交互的融合。 开发板配置了摄像头和小屏幕接口&#xff0c;并外…...

博客系统(界面设计)

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录实现博客列表页预期效果导航栏页面主体左右布局左侧区域右侧区域完整代码实现博客详情页预期效果导航栏 左侧右侧完整代码实现…...

素材要VIP咋整?看python大展神通

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 再我们缺少素材的时候&#xff0c;我们第一反应 我们肯定会去网上寻找&#xff0c;但是&#xff01;&#xff01; 有的素材需要VIP&#xff01;这可咋整呢&#xff1f; 看我利用python大展神通&#xff0c;采集某图网图片…...

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-1 通关详解 (附靶机搭建教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

PixelAnnotationTool终极指南:如何用智能分水岭算法实现高效像素级图像标注

PixelAnnotationTool终极指南&#xff1a;如何用智能分水岭算法实现高效像素级图像标注 【免费下载链接】PixelAnnotationTool Annotate quickly images. 项目地址: https://gitcode.com/gh_mirrors/pi/PixelAnnotationTool 你是否曾经为图像标注工作感到头疼&#xff…...

Claude Code 代码保存全攻略:告别丢失,高效管理开发成果

日常开发中&#xff0c;用 Claude Code 生成代码后&#xff0c;很多人都会遇到这些糟心事&#xff1a;生成的代码片段零散复制&#xff0c;换个会话就找不到&#xff1b;手动保存步骤繁琐&#xff0c;遗漏文件或格式错乱&#xff1b;切换不同 AI 模型时&#xff0c;代码记录无法…...

OpenClaw与Cursor双向集成:打造AI驱动的自动化工作流

1. 项目概述&#xff1a;当OpenClaw遇上Cursor&#xff0c;一个双向赋能的AI大脑诞生如果你正在寻找一种方法&#xff0c;让你在Slack、飞书等协作工具里聊天的同时&#xff0c;能无缝调用一个强大的AI来帮你写代码、查文档、甚至操作GitHub&#xff0c;那么openclaw-cursor-br…...

中国行政区划数据生成器:开发者的地理数据基础设施解决方案

中国行政区划数据生成器&#xff1a;开发者的地理数据基础设施解决方案 【免费下载链接】chinese-address-generator 中国地址生成器 - 三级地址 四级地址 随机生成完整地址 项目地址: https://gitcode.com/gh_mirrors/ch/chinese-address-generator 在现代软件开发过程…...

nimbus-router:声明式路由增强框架,解决SPA复杂路由管理痛点

1. 项目概述&#xff1a;一个为现代前端应用量身定制的路由解决方案 如果你和我一样&#xff0c;在过去几年里深度参与过大型前端项目的开发&#xff0c;那你一定对路由管理这个“甜蜜的负担”深有体会。一方面&#xff0c;像 React Router、Vue Router 这样的库已经非常成熟&a…...

【云原生问题集】容器内存监控避坑:90%工程师踩过的“free命令雷区”

你有没有遇到过这种怪事&#xff1f;压测跑得好好的&#xff0c;容器突然被 OOM Kill 了。你赶紧进容器敲了个 free -h&#xff0c;一看内存快吃满了&#xff0c;心想“资源不够&#xff0c;加&#xff01;” 加完内存&#xff0c;跑一会儿又被杀了。坑爹的是&#xff0c;你明明…...

63岁黄仁勋再添博士头衔、英特尔CEO为其披袍,最新演讲刷屏:人类编写软件、计算机执行指令的范式已终结!

整理 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 日前&#xff0c;在卡内基梅隆大学&#xff08;CMU&#xff09;的 2026 届毕业典礼上&#xff0c;英伟达 CEO 黄仁勋的头衔再加一&#xff0c;最新获得 CMU 科学与技术荣誉博士学位&#xff0c;而这也是…...

AI原生创意协作框架Muse:从网状思维管理到自动化工作流实战

1. 项目概述&#xff1a;一个为创意工作者打造的AI原生工具最近在探索AI辅助创作工具时&#xff0c;我遇到了一个让我眼前一亮的项目&#xff1a;myths-labs/muse。乍一看这个名字&#xff0c;你可能会联想到艺术女神缪斯&#xff0c;而它的定位也确实如此——旨在成为创意工作…...

PyTorch预训练模型‘解剖课’:以VGG19为例,彻底搞懂如何自定义输出层(避坑指南)

PyTorch预训练模型‘解剖课’&#xff1a;以VGG19为例&#xff0c;彻底搞懂如何自定义输出层&#xff08;避坑指南&#xff09; 当你第一次拿到一个预训练好的VGG19模型&#xff0c;兴奋地准备用它提取图像特征时&#xff0c;却发现自己被卡在了第一步——这个"黑箱"…...

基于SpringBoot的企业客户管理系统(附源码)

项目编号050 项目获取&#xff1a;合集 想学习Java开发却找不到合适的项目练手&#xff1f;这套基于Spring Boot的企业客户管理系统就是你的最佳选择&#xff01;代码简单清晰&#xff0c;功能实用完整&#xff0c;非常适合初学者学习和二次开发。 这是什么项目&#xff1f; …...