从招聘信息看ECMWF对科学软件工程师的要求
ECMWF 发布了一条关于数值预报业务系统建设维护岗位的招聘信息,为 CAMS 系统招聘科学软件工程师,职级 A2,详细信息见如下网页:
Scientific Software Engineer - Atmospheric Composition Monitoring and Forecasting
注:因超过申请期限,该网页原文已无法访问。
从招聘信息看,该岗位与笔者当前从事岗位基本一致,侧重数值天气预报业务系统 (以下简称 NWP 业务系统) 建设及维护工作。 本文结合笔者当前岗位对该招聘信息中的核心职责和任职要求进行逐条对比,以期找到本岗位的发展趋势。
下文使用 ECMWF 岗位代表 ECMWF 发布的 CAMS 系统招聘科学软件工程师招聘岗位,使用 NWP 岗位表示笔者当前从事的岗位。
注:以下引用部分均来自招聘信息,并使用豆包 AI 翻译成中文。
招聘信息
核心职责
与科学和技术专家合作,设计、开发和支持 CAMS 业务产品的工作流;
NWP 岗位在构建 NWP 业务系统 ecFlow 工作流时需要和研发团队密切合作。 比如业务同学需要熟读研发同学使用的流程控制脚本和任务脚本,了解整个系统的运行流程和每个任务的输入输出,研发同学需要和业务同学一同验证业务流程的输出结果。 只有在研发和业务同学紧密合作的情况下,才能快速完成研发到业务转化 (R2O) 的工作。
对科学和技术成果进行早期技术质量保证测试;
NWP 岗位经常会参与 NWP 系统业务升级更新前的测试工作,尤其是业务化测试相关工作,主要负责实施对 ecFlow 工作流的测试。 部分业务同学也同时会参与 NWP 系统 Shell 运行脚本开发工作。 但基于脚本的测试(集成测试、批量回算等)通常由研发部门承担,有些情况下业务系统升级测试使用脚本而不是 ecFlow 工作流方式完成,大多是因为从研发脚本到业务工作流需要一定时间,无法按时在升级评审前完成 R2O 工作。
确保新开发内容兼容业务需求,具备优化性和可靠性;
从研发到业务的转化工作主要由 NWP 岗位完成。 NWP 岗位在开发/维护 ecFlow 工作流时,大部分时间都在确保研发程序能融入到业务流程中。比如
- 研发试验通常使用预处理之后的观测资料,而业务系统需要从数据库或共享文件目录中实时获取观测资料。
- 产品后处理任务通常在 ecFlow 系统建设阶段才会接入到整个 NWP 系统流程中。
同时,NWP 岗位也负责从流程方面对系统进行优化,并通过增加脚本的容错性等方式提高系统运行的可靠性。
参与软件版本迭代,响应代码请求并主动进行代码审查,兼顾用户需求与业务限制;
仅有部分气象背景的 NWP 岗位同学能参与到 NWP 系统软件版本开发与发布过程中。 大部分 NWP 岗位同学都不实际接触 NWP 系统核心软件代码,因此也就无法参与代码审查工作,在业务对研发转化(O2R)这一方面还有很大改进空间。
ECMWF 岗位要求科学软件工程师可以在用户需求和业务限制方面入手参与到模式代码开发工作中,比 NWP 岗位要求更高。
沟通工作流变更,确保相关人员理解影响;
NWP 岗位与研发部门协作紧密,但与系统产品用户的联系并不多。 业务升级涉及产品部分通常由产品部门或者研发部门负责。 业务大规模升级更新通常由上级主管部门进行发布。 但受当前工作方式限制,NWP 岗位在对业务系统进行小规模变更尤其是针对工作流变更时,一般仅在运行团队内部进行通知,缺乏面向更广泛受众的发布手段。
ECMWF 岗位通过在线文档 (Confluence) 记录版本变更,NWP 岗位缺乏在线文档分享工具。
监控 CAMS 套件运行状态,运用工具和专业知识解决问题,必要时提供二线支持;
NWP 岗位同学都参与 NWP 系统运维工作,彻底贯彻谁开发谁维护的理念。 随着外协运维团队的持续成长,NWP 岗位也正在朝着二线支持岗位发展。
跨部门协作开发 CAMS 工作流,持续优化服务。
研发部门与业务部门之间的合作属于天然的跨部门协作,在系统出现 BUG 时也会及时进行更新。
任职要求
核心能力
出色的沟通能力,能与技术团队、合作伙伴及非技术人员高效协作;
具备团队合作精神,主动与成员和项目方协作;
基本要求,适用所有岗位。 但实际上在 AI 辅助编程盛行的当下,技术人员的沟通能力非常重要,无论是与 AI 交流还是与人交流,都需要用最简洁的语言将自己的想法清晰地表述给对方,以提高协作效率。 虽然当前 NWP 业务系统运行流程均由 NWP 岗位同学实现,不依赖外协力量,但 NWP 岗位与外协值班团队、外协项目团队有密切的合作关系,需要与多方面人员持续进行沟通。 比如指导外协值班团队进行故障处理,如何将 NWP 业务系统运行流程通过外协团队移植到试验平台中等等。 正因为系统核心运行流程均为自建,非常需要 NWP 岗位同学主动与外协团队进行沟通和协作,推动外协团队持续为 NWP 业务系统贡献力量。
独立工作能力与适时寻求建议的意识;
笔者所在部门属于专门的数值预报业务系统建设团队,同时也承担运维职责,团队大多成员不直接参与数值预报模式软件本身的开发,只负责 ecFlow 工作流的建设,与 ECMWF 岗位基本一致。 NWP 业务系统建设与运维的领域太窄,公开资料太少,很多时候需要自行摸索,需要较强的独立工作能力。 有些相关内容会在国际会议中分享,但笔者没有参加过国际会议,而国内会议一般不会涉及 NWP 业务系统建设部分内容。 不过,部分国际会议有免费可看的录屏,可以用来参考。
另外,构建和测试业务系统很多时候依赖经验,很多踩过的坑并不会在代码和文档中直接体现(比如因 Windows 换行符导致运行报错),所以新入行的同学在遇到问题时需要积极向老同学寻求建议,很多看似无从下手的问题遇到过一次后再次遇到就容易解决了。
优秀的分析与解决问题能力,秉持持续改进理念;
实时运行的 NWP 业务系统往往会因为各种各样原因而出现运行故障,NWP 岗位同学需要及时跟进运行故障的处理情况,分析隐藏在运行故障后的系统 BUG,在找到 BUG 后寻找解决方案,持续对业务系统进行优化改进。
实际上,故障恢复与故障解决不一定是同一件事情。 对于某个运行故障,可以采用某些临时方法绕过故障而不用知道故障的具体产生原因。 而故障解决则需要定位故障出现的具体原因,并针对这一问题提出解决方案。
在这一点上,NWP 岗位和 ECMWF 岗位都非常看重问题分析和解决能力。
工作细致精准,重视全面测试和文档记录;
NWP 岗位也开始逐渐要求撰写系统手册,并在 NWP 系统升级变更时建议研发团队提供文档说明。 当一个系统只有有限的使用场景时,靠个人经验足以应付,但如果需要将系统部署到多种环境,且需要更多人参与系统建设时,文档就成为信息交流的一种常用媒介。 ECMWF 的 IFS 系统有完善的文档,每次升级都会更新,可以在官网访问。 NWP 也正在创建包括区域模式等系统的文档手册,所以 NWP 岗位同学需要清晰地认识到撰写文档也是 NWP 岗位工作的一个重要组成部分。
业务系统升级前都会开展专家测试工作,参与业务测试也是 NWP 岗位的一项重要职责。 开展测试不光是为了完成业务升级前的规定工作,更是为了 NWP 岗位同样承担的系统运维职责。 在测试过程中验证系统的稳定性和时效性,尽可能在测试阶段暴露系统问题,以便在系统上线前优化运行流程。 所以,NWP 岗位负责业务系统切换前的平行试验,在实际业务环境中测试整个业务系统的运行情况。
愿意与内外部专家就 CAMS 业务生产协作;
积极倾听并尊重他人意见,具备高效任务管理能力;
灵活适应合作伙伴节奏变化和优先级调整;
这三点连在一起说明了 NWP 系统建设岗位的两个特点:
- 工作属于整个系统级大团队中的一小部分,很难体现单人成绩
- 工作任务时间紧,临时任务多,很难自己掌控工作节奏
NWP 岗位同学需要具备强大的多线任务切换能力,面对时间紧工作多的“经常性”临时任务,要稳住心态,摆正位置,及时放下手头的工作,全力投入到新的临时任务中,在临时任务结束后,又要尽快捡起之前方向的工作,继续按照年度任务安排开展工作。 在不停切换任务过程中,NWP 岗位同学尤其需要考虑如何在重复繁多的系统建设任务中做出与众不同的贡献,如何能在看似没有科学含量的工作中总结出科学问题,并给出通用的解决方案。 上述招聘信息很隐晦地指出该岗位的特点,由此可见 ECMWF 岗位一定也面临同样的问题。 也许实时业务系统相关的工作都有某些共通之处,存在一些较难克服的困难。即便笔者从事当前岗位已经十多年了,也没能在这一问题上有满意的答案。
英语流利(工作语言)。
基本要求。
教育背景
物理、计算科学、数学或相关学科本科及以上学历(EQF 6 级),或同等专业经验。
NWP 岗位所在部门成员主要由计算机和气象相关专业构成。
专业技能
必需:UNIX/Linux 环境下 Python 等脚本语言编程能力;
基础要求。ecFlow 使用 Python 编写工作流程,Python 也是当前人工智能/机器学习领域最活跃的编程语言,是一门学了怎么也不会用不上的编程语言。
理想:业务或时间敏感型环境工作经验、软件开发项目协作经验;
实时业务系统与科研的批量试验在设计层面上有很多不同,两者的核心目标不一样,因此同样任务的实现方式可能会有较大差异。 如果想了解更多信息,可以参考笔者之前的一篇博文《CEMC数值天气预报业务系统建设介绍(2023版)》。
ECMWF 岗位还要求软件开发项目协作经验,可能是 ECMWF 有很多用于业务系统的开源工具软件需要维护。 NWP 岗位没有强调这一点,因为 NWP 业务系统的开发工作通常采用管理起来最容易的单人负责制,不同工作之间有明确的分界线,基本很少有多人同时修改某一段代码的情况发生。 对于那些需要协作开发的工作任务(通常不是 NWP 岗位的基础职责),一般通过外协项目的方式完成,而不是建立内部协作的开发团队。 也许这不是 NWP 岗位本身的工作特点,而是和团队文化息息相关。 身为局中的一份子,笔者还没看到改变当前工作模式的契机,在向 ECMWF 同行学习方面 NWP 岗位团队还有很长一段路需要走。
科学环境工作经验、分布式应用管理经验、高性能计算(HPC)经验;
高性能计算机的软件环境通常由专门的管理团队负责,NWP 岗位团队仅是超算的使用者,无法使用需要高用户权限的工具,无法随意使用基础工具。 这一条换一种说法就是这一岗位需要在专有环境中使用专有工具进行开发,可能出了这个环境就没用了。
了解数值天气预报、气象数据处理或环境地理空间数据管理;
熟悉国际标准化数据格式(如 NetCDF、BUFR);
数据管理与业务系统通常联系在一起。NWP 岗位所在团队不只负责 NWP 系统建设运维,还负责业务数据的管理和数据软件工具的开发工作。 ECMWF 形成了一套完整的数据管理系统,该系统的大部分工具都已开源发布。 NWP 岗位团队也在数据编解码和数据管理方面有不错的成果,但因为硬件基础设施的管理属于另一个单位,团队的很多想法不容易最终落地。 俗话说巧妇难为无米之炊,没有存储空间怎么管理数据。
法语或德语能力为加分项。
欧洲特色。
注:即使不完全符合所有条件,仍鼓励申请。
人才难寻。
总结
ECMWF 岗位相对于 NWP 岗位的额外职责,也是 NWP 岗位未来的发展方向:
- 模式软件的版本管理和代码审查
- 全面测试
- 文档记录
- 软件协作开发
ECMWF 为岗位起了一个正式的名称是科学软件工程师 (Scientific Software Engineer)。 从 ECMWF 岗位招聘信息来看,笔者所从事的 NWP 岗位在 ECMWF 中有几乎完全对应的岗位,NWP 岗位同学符合 ECMWF 岗位绝大部分的招聘要求。 而招聘信息中也同时隐晦地指出该岗位的一些特点,由此可见工作中遇到的一些问题是从事该项工作必然会遇到的,也许能从国际同行的工作经验中得到启发。 作为数值天气预报业务系统建设工作的从业人员,笔者将继续向国内外同行学习先进经验,持续提升自己的工作水平。
参考
Scientific Software Engineer - Atmospheric Composition Monitoring and Forecasting 链接已失效