WWDC Quick Look 💓 By SwiftGGTeam
Out of this world... on to Mars

Out of this world... on to Mars

观看原视频

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 Computer
  • if 判断把控制能力和输出文案连接起来

这给开发者一个直接启发:复杂系统的关键转折常常来自数据采集和流程自动化。火箭如此,软件产品的发布、测试、回滚流程也一样。

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 1crewedfalse,对应无人飞行
  • 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 为每个输入生成一条讨论提醒
  • 输出结果可以进入团队回顾、项目启动或设计评审模板

对软件团队来说,这属于产品流程的一部分。不同背景的人更容易发现不同用户的真实障碍。包容性进入流程后,产品问题会更早暴露。

核心启发

  1. 做什么:做一个航天任务时间线 App

    • 为什么值得做:session 给出了 Saturn V、Voyager、OSIRIS-REx、New Horizons、ISS、Perseverance、Artemis 的连续事实线索。
    • 怎么开始:先用 struct Mission 建模名称、年份、目标和关键数字,再用 SwiftUI ListTimelineView 展示任务顺序。
  2. 做什么:做一个大型产品生命周期看板

    • 为什么值得做:Tiera 的岗位覆盖设计、结构验证、安装、装配确认、配置管理,正好是一条端到端链路。
    • 怎么开始:把需求、设计、实现、测试、发布配置建成统一状态模型,用 enum 表示阶段,用本地 JSON 保存变更记录。
  3. 做什么:做一个 Green Run 测试讲解器

    • 为什么值得做:8 到 9 分钟内运行多个测试用例,这种高密度测试过程适合交互式可视化。
    • 怎么开始:用数组记录测试事件、时间区间和目的,给每个事件绑定说明文字,再用进度条模拟测试推进。
  4. 做什么:做一个 Artemis 任务模拟学习工具

    • 为什么值得做:Artemis 1、2、3 的任务目标清晰,适合做成分阶段学习路径。
    • 怎么开始:用 ArtemisMission 保存年份、是否载人、目标、关键里程,按任务过滤无人和载人阶段。
  5. 做什么:做一个团队包容性检查清单

    • 为什么值得做:演讲把创新拆成热情、数据和思维多样性,适合转成团队评审动作。
    • 怎么开始:用固定模板生成会议前检查项,包含发言机会、用户样本来源、数据依据和决策记录。

关联 Session

评论

GitHub Issues · utterances