Highlight
NASA 工程师 Tiera Fletcher 用 Space Launch System 的设计、测试和任务规划说明,复杂工程需要把设计、数据、制造验证和多元团队放进同一条产品生命周期。
核心内容
一个年轻工程师想参与火箭设计,真正困难的地方很少出现在宣传片里。
图纸只是第一步。零件在电脑辅助设计(Computer-Aided Design,计算机辅助设计)软件里成形之后,还要制造、装配、运输、测试,再和真实飞行任务连接起来。任何一个环节错位,都会影响整枚火箭。
Tiera Fletcher 在 22 岁加入 NASA 的 Space Launch System(太空发射系统)项目。她先做结构设计和分析,负责设计火箭部件并验证结构完整性。随后,她到 New Orleans 的 Michoud Assembly Facility,参与这些部件的安装,并和技术人员一起确认装配结果。
这场演讲没有发布 Apple API。它讲的是另一类设计问题:当产品大到 322 英尺高、推力超过 800 万磅,设计就不能停在屏幕上。设计必须进入制造现场,接受测试数据,回到配置管理,再服务下一次任务。
Space Launch System 的目标也很明确。它先支撑 Artemis 1 的无人飞行,收集数据;再让 Artemis 2 把四名宇航员带回月球环境;最后为 Artemis 3 和之后的深空任务做准备。
详细内容
从兴趣到工程:把纸面设计变成运动系统
(01:30)
Tiera 11 岁参加机器人项目。她先设计和建造结构,再给结构编程,让它动起来。她在演讲里把这个过程描述为从纸面到产品,再到运动。
这个过程适合用一个最小状态模型表示。它没有发明 session 之外的工程事实,只把逐字稿中的三个阶段整理成 App 可以展示的数据。
struct LearningStep: Identifiable {
let id: Int
let title: String
let source: String
}
let roboticsPath = [
LearningStep(id: 1, title: "Paper", source: "design the structure"),
LearningStep(id: 2, title: "Product", source: "build the structure"),
LearningStep(id: 3, title: "Movement", source: "program the structure and make it move")
]
for step in roboticsPath {
print("\(step.id). \(step.title): \(step.source)")
}
关键点:
LearningStep把学习路径拆成可展示的步骤id让每个阶段有稳定标识,适合列表或时间线title对应演讲中的纸面、产品、运动三个结果source保留事实来源,避免把叙事改写成空泛口号for循环把路径按顺序输出,适合调试时间线数据
这段经历解释了她后来的工程角色。大型系统也遵循相同路径:先设计,后制造,再验证真实行为。
Saturn V:航天工程很早就依赖软件自动化
(03:00)
演讲从 Saturn V 讲起。它在 1969 到 1973 年服务 Apollo 计划,完成 13 次发射,把 24 人送入太空,重量超过 600 万磅,高度超过自由女神像。
Tiera 强调,Saturn V 并非只靠推力穿过大气层。它由当时先进的航空电子设备控制,其中包括 Launch Vehicle Digital Computer(运载火箭数字计算机)。机载计算增加之后,地面计算也随之增加,手工流程开始自动化。
struct RocketProgram {
let name: String
let launches: Int
let peopleSentToSpace: Int
let hasDigitalComputer: Bool
}
let saturnV = RocketProgram(
name: "Saturn V",
launches: 13,
peopleSentToSpace: 24,
hasDigitalComputer: true
)
if saturnV.hasDigitalComputer {
print("\(saturnV.name) used onboard computing to support launch control.")
}
关键点:
RocketProgram只记录逐字稿给出的事实字段launches使用演讲里的 13 次发射peopleSentToSpace使用演讲里的 24 人hasDigitalComputer对应 Launch Vehicle Digital Computerif判断把控制能力和输出文案连接起来
这给开发者一个直接启发:复杂系统的关键转折常常来自数据采集和流程自动化。火箭如此,软件产品的发布、测试、回滚流程也一样。
SLS:结构设计必须覆盖设计、制造、安装和配置管理
(06:22)
Tiera 在 Space Launch System 项目中的岗位变化很有代表性。
她先是 structural design and analysis engineer(结构设计与分析工程师),设计火箭部件,并验证这些部件的结构完整性。之后,她成为 engine section task lead(发动机段任务负责人),在 Michoud Assembly Facility 负责部件安装,并和技术人员确认装配正确。后来,她做 configuration management and product integration engineer(配置管理与产品集成工程师),确认工程设计与实际安装保持一致。
enum EngineeringRole: String {
case structuralDesignAndAnalysis = "design parts and verify structural integrity"
case engineSectionTaskLead = "lead installation and verify assemblies"
case configurationManagement = "align engineering designs with installations"
}
let slsRoles: [EngineeringRole] = [
.structuralDesignAndAnalysis,
.engineSectionTaskLead,
.configurationManagement
]
let responsibilities = slsRoles.map(\.rawValue)
print(responsibilities.joined(separator: " -> "))
关键点:
EngineeringRole用枚举表示岗位,不让职责字符串散落在代码里structuralDesignAndAnalysis对应设计部件和验证结构完整性engineSectionTaskLead对应安装部件和验证装配configurationManagement对应设计与安装对齐map(\.rawValue)把枚举转换成可展示的职责文本joined(separator:)把岗位路径串成一条产品生命周期
这段经历的重点是闭环。设计文件、制造现场、装配结果和配置状态必须互相校验。对 App 团队来说,同样可以把需求、设计稿、实现、测试和线上配置放进一条可追踪链路。
SLS 的物理系统:组件、推力和 Green Run 测试
(08:33)
Space Launch System 高 322 英尺。它由四台 RS-25 engines(RS-25 发动机)、core stage(核心级)、upper stage(上面级,也称 interim cryogenic propulsion stage,临时低温推进级)、两侧 solid rocket boosters(固体火箭助推器)和顶部 Orion crew capsule(Orion 乘员舱)组成。
它产生超过 800 万磅推力,比 Saturn V 多 15%。核心级最近完成 Green Run testing(绿跑测试)。这个测试会让发动机作为整体结构同时点火,8 到 9 分钟内完成多个测试用例。
struct LaunchVehicle {
let name: String
let heightInFeet: Int
let thrustInPounds: Int
let components: [String]
}
let spaceLaunchSystem = LaunchVehicle(
name: "Space Launch System",
heightInFeet: 322,
thrustInPounds: 8_000_000,
components: [
"four RS-25 engines",
"core stage",
"interim cryogenic propulsion stage",
"solid rocket boosters",
"Orion crew capsule"
]
)
print("\(spaceLaunchSystem.name): \(spaceLaunchSystem.components.count) major component groups")
关键点:
LaunchVehicle把火箭的可量化事实放进同一个结构体heightInFeet使用演讲里的 322 英尺thrustInPounds使用演讲里的超过 800 万磅,这里按下限记录components保存逐字稿列出的主要组件components.count可用于 UI 上展示系统复杂度
(09:17)
Green Run 测试之后,核心级需要从 New Orleans 运输到 Kennedy Space Center。它能承受数百万磅的力,运输过程仍然要维护结构完整性。
struct TestCase {
let name: String
let durationMinutes: ClosedRange<Int>
let purpose: String
}
let greenRun = TestCase(
name: "Green Run testing",
durationMinutes: 8...9,
purpose: "fire all engines as one whole structure"
)
print("\(greenRun.name): \(greenRun.durationMinutes.lowerBound)-\(greenRun.durationMinutes.upperBound) minutes")
关键点:
TestCase把测试名称、时长和目的分开记录durationMinutes使用ClosedRange<Int>表示 8 到 9 分钟purpose对应发动机作为整体结构同时点火- 输出文本可以直接进入测试时间线界面
这类数据结构适合做工程科普 App。用户拖动时间线时,可以看到设计、测试、运输、组装之间的关系。
Artemis:先无人验证,再载人返回月球环境
(10:55)
Tiera 用 Artemis(阿尔忒弥斯)计划说明 SLS 的任务路径。
Artemis 1 是 2021 年的无人飞行。SLS 与 Orion 配合,作为初始飞行验证结构。Orion 会飞到距离月球 40,000 英里处,约等于距离地球表面 280,000 英里。全程约 140 万英里。返回时,Orion 以约 24,500 英里每小时进入大气层,乘员舱温度会达到约 5,000 华氏度。
struct ArtemisMission {
let name: String
let crewed: Bool
let year: Int
let objective: String
}
let artemisMissions = [
ArtemisMission(
name: "Artemis 1",
crewed: false,
year: 2021,
objective: "collect data before astronauts come on board"
),
ArtemisMission(
name: "Artemis 2",
crewed: true,
year: 2022,
objective: "carry four astronauts back to the lunar environment"
),
ArtemisMission(
name: "Artemis 3",
crewed: true,
year: 2024,
objective: "carry astronauts back into the space environment"
)
]
let crewedMissions = artemisMissions.filter { $0.crewed }
print(crewedMissions.map(\.name).joined(separator: ", "))
关键点:
ArtemisMission把任务年份、是否载人和目标拆开Artemis 1的crewed为false,对应无人飞行Artemis 2记录四名宇航员返回月球环境Artemis 3记录宇航员再次进入太空环境filter { $0.crewed }选出载人任务map(\.name)提取任务名,用于列表或标签显示
(12:28)
Artemis 2 将执行 10 天任务。Orion 先绕地球两圈,再前往月球。临时低温推进级会把 Orion 推到高地球轨道,之后 Orion 与推进级分离,宇航员验证性能和操作能力。
let artemis2Sequence = [
"reach an initial insertion orbit",
"complete the first orbit",
"interim cryogenic propulsion stage propels Orion to high-Earth orbit",
"Orion separates from the interim cryogenic propulsion stage",
"astronauts verify performance and operational capabilities"
]
for (index, event) in artemis2Sequence.enumerated() {
print("Step \(index + 1): \(event)")
}
关键点:
artemis2Sequence保留演讲中的任务顺序- 数组顺序对应任务流程顺序
enumerated()生成步骤编号index + 1让界面从第 1 步开始显示event是可直接展示的任务事件
这部分对开发者最有用的是任务分解方式。复杂目标先拆成无人验证、载人验证、能力扩展三步。每一步产出数据,再进入下一步。
多元团队:创新需要扩大参与者来源
(13:48)
Tiera 提到 Mae Jemison。她看到第一位黑人女性宇航员之后,才更容易想象自己成为 aerospace engineer(航空航天工程师)。她还讲到自己在会议中曾经不敢发言,因为自己是团队里最年轻的人、唯一女性或唯一非裔成员。
她和丈夫创建了 Rocket with the Fletchers,做学生外展、航天工程教育和导师支持。她把创新的关键组件概括为 passion(热情)、data(数据)和 diversity of mind(思维多样性)。
let innovationInputs = ["passion", "data", "diversity of mind"]
func checklist(from inputs: [String]) -> [String] {
inputs.map { "Include \($0) in the product discussion" }
}
print(checklist(from: innovationInputs).joined(separator: "\n"))
关键点:
innovationInputs使用演讲最后给出的三个关键词checklist(from:)把关键词转成团队检查项map为每个输入生成一条讨论提醒- 输出结果可以进入团队回顾、项目启动或设计评审模板
对软件团队来说,这属于产品流程的一部分。不同背景的人更容易发现不同用户的真实障碍。包容性进入流程后,产品问题会更早暴露。
核心启发
-
做什么:做一个航天任务时间线 App
- 为什么值得做:session 给出了 Saturn V、Voyager、OSIRIS-REx、New Horizons、ISS、Perseverance、Artemis 的连续事实线索。
- 怎么开始:先用
struct Mission建模名称、年份、目标和关键数字,再用 SwiftUIList或TimelineView展示任务顺序。
-
做什么:做一个大型产品生命周期看板
- 为什么值得做:Tiera 的岗位覆盖设计、结构验证、安装、装配确认、配置管理,正好是一条端到端链路。
- 怎么开始:把需求、设计、实现、测试、发布配置建成统一状态模型,用
enum表示阶段,用本地 JSON 保存变更记录。
-
做什么:做一个 Green Run 测试讲解器
- 为什么值得做:8 到 9 分钟内运行多个测试用例,这种高密度测试过程适合交互式可视化。
- 怎么开始:用数组记录测试事件、时间区间和目的,给每个事件绑定说明文字,再用进度条模拟测试推进。
-
做什么:做一个 Artemis 任务模拟学习工具
- 为什么值得做:Artemis 1、2、3 的任务目标清晰,适合做成分阶段学习路径。
- 怎么开始:用
ArtemisMission保存年份、是否载人、目标、关键里程,按任务过滤无人和载人阶段。
-
做什么:做一个团队包容性检查清单
- 为什么值得做:演讲把创新拆成热情、数据和思维多样性,适合转成团队评审动作。
- 怎么开始:用固定模板生成会议前检查项,包含发言机会、用户样本来源、数据依据和决策记录。
关联 Session
- The process of inclusive design — 讲如何把包容性从理念变成设计和开发流程。
- The practice of inclusive design — 通过 App 和游戏案例说明包容性体验的实际做法。
- Accessibility by design: An Apple Watch for everyone — 展示 Apple Watch 团队如何围绕不同用户能力做产品设计。
- Discoverable design — 讲解如何让用户在进入 App 时理解功能和交互。
评论
GitHub Issues · utterances