您服务内部的功能开发
新的接口、后台任务和内部包,按照您团队已有的模式和惯例构建,并通过您现有的合并请求流程接受评审。
大多数在迪拜聘请 Go 开发工程师的企业,已经有一套运行在生产环境中的 Go 代码库,以及一支维护它的小团队。他们通常缺的不是能完成一次性项目的一双新手,而是能融入现有规范、审查同事的合并请求,并与已经熟悉系统的团队一起持续交付的一个人。本页正是为这种情形而写:加入进来,融入一套已经在运转的系统,而不是从一个空文件夹开始重新搭建一切。
Go 语言本身诞生于 Google,其设计初衷是将编译型静态语言的速度,与更接近脚本语言的易用性结合起来,如今它已成为后端服务、命令行工具以及需要在高并发负载下可靠运行的基础设施软件的常见选择。一位理解团队为何选择 Go,而不只是熟悉其语法的开发工程师,能更快融入现有团队,而这正是招聘承担这类角色的候选人时应该重点考察的一点,也是判断对方是否真正适合这份工作的关键。
融入现有团队
默认面对一套正在运行的系统和别人写的代码,而不是一个空白项目。
新的接口、后台任务和内部包,按照您团队已有的模式和惯例构建,并通过您现有的合并请求流程接受评审。
使用 Go 自带的性能剖析和竞态检测工具,诊断已经承载真实流量的服务中的协程泄漏、竞态条件和慢路径问题。
保持 Go 模块始终处于最新状态,以可控的方式处理不兼容的变更,并清理那些已悄然无人维护的依赖。
为当前会直接失败的服务增加重试、超时和熔断机制,并编写相应测试来证明修复确实有效可靠。
为现有服务添加日志、指标和链路追踪,让故障排查可以依据实际数据进行,而不是单纯凭猜测。
为您自己的工程师开发实用的命令行工具,这正好发挥 Go 启动速度快、可编译为单一二进制文件的天然优势。
值得关注的技能
能证明候选人可以在他人代码中工作,而不只是写自己代码的能力。
| 技能或工具 | 合格的表现 | 为何重要 |
|---|---|---|
| 协程与通道 | 能清楚解释何时使用通道、何时使用互斥锁,并曾真正调试过一次并发相关的疑难 bug | Go 中的并发错误很常见,而且往往只在真实负载下才会暴露 |
| Go 模块 | 能熟练管理带版本的依赖,并能批判性地阅读 go.mod 文件,而不只是运行命令 | 一个已上线服务的依赖关系,很少像全新项目那样干净 |
| 标准库熟练度 | 在引入新依赖之前,总会优先考虑标准库中的方案 | 第三方包越少,长期需要维护和审计的内容就越少 |
| 测试与基准测试 | 编写表驱动测试,并能读懂基准测试结果,而不只是关心通过或失败 | 加入一个正在运行的代码库的团队,需要证明改动没有造成回归 |
| 代码评审习惯 | 能建设性地给出和接受评审意见,并结合项目自身的既有规范 | 专属开发工程师花在阅读他人代码上的时间,往往和写自己代码一样多 |
Go 官方的 常见问题解答页面 本身就是一份有用的面试参考:如果候选人无法解释为什么 Go 更倾向于“通过通信共享内存”而不是共享状态加锁,那他很可能没有在真实压力下与协程打过交道。这是让工程师加入一个已上线代码库时,最值得优先问的一个问题,答案往往比简历更能说明真实水平。
这个角色如何展开合作
这个角色围绕一种合作模式展开:一位专属开发工程师加入您的团队,按您的优先级工作,并按月为其时间计费。如果您希望我们构建并交付一项明确定义的 Go 服务,请参见我们 Golang 开发工程师 页面中从项目角度出发的介绍,内容涉及同一门语言。如果您更希望在我们完成寻访和评估后,将这个人直接招聘到您自己的编制内,招聘支持同样适用;如果团队还在决定 Go 是否合适,在做出任何聘请决定之前,一次简短的咨询评审也很合适。大多数通过我们招聘的企业,选择的正是这里介绍的专属合作方式。
考察候选人
专门针对加入现有代码库这一情形设计的考察方式。
展示您代码库中一次近期、具有代表性的改动,询问他们会如何评审这次改动。他们提出的问题,往往和他们给出的回答一样能说明问题。
一个具体的故事,包括他们是如何一步步发现问题根源的,比背诵协程的教科书定义更有价值。
给他们一个小任务,观察他们会优先选择引入新的第三方包,还是先考虑标准库中是否已有现成方案。
请他们对您提供的一个测试文件提出批评意见,看看他们会如何改进它。优秀的测试人员通常能很快发现遗漏的边界情况。
加入一个成熟团队,需要能建设性地对决策提出异议,而不是一味接受或忽视反馈,这种沟通方式在长期合作中同样重要,无论您通过哪种方式聘请,直接聘请还是通过招聘支持,这一点都会在日常协作中清楚地表现出来。
认证
Google 或 Go 团队并未颁发任何 Go 认证,因此对任何声称的资质都应相应地谨慎看待。
由 Google 的 Go 团队维护的官方文档,详细介绍了这门语言及其工具的使用方式,但并未提及或认可任何认证项目。任何被宣传为“Go 认证”的东西都来自第三方课程提供商,而非 Google 本身,因此在评估候选人时,不应将其作为决定性因素。
一个公开的真实 Go 代码仓库、一次他们处理过的生产事故的复盘讲解,以及他们能否自如讨论 Go 只支持最近两个主要版本的发布政策,这些具体的证据,比任何证书都更能说明他们是否保持依赖处于最新状态。
阿联酋相关考量
如果他们负责的服务会涉及客户数据,这一点就与您相关。
根据阿联酋2021年第45号联邦法令,持有个人数据的企业必须妥善保护数据,并在获得同意的前提下处理数据,无论处理行为发生在何处。如果一位专属开发工程师将要维护的 Go 服务已经存储了客户或员工数据,值得在他们入职前与团队确认这项义务目前是如何履行的,以及相关记录是否完整,这也是在授予访问权限之前,可以向任何一位 Go 开发工程师提出的合理问题。
由于这是一次专属聘请,而不是一个交付型项目,代码、代码仓库和访问权限在我们参与之前就已经完全属于您,并将在整个合作过程的每一个阶段始终保持这一状态,不会有任何转移。
这一职位归属于我们的 编程与软件开发 分类,属于 迪拜聘请开发工程师 的一部分。同一门语言,以明确定义的项目形式呈现,而不是专属聘请,请见我们的 Golang 开发工程师 页面。如果您的后端工作范围超出单一语言,我们的 后端开发工程师 和 Python 开发工程师 页面涵盖了相邻的角色,而 Rust 开发工程师 是应对类似性能敏感工作的常见替代选择。
直接解答
当工作是持续性的,需要融入您现有的代码库和评审流程,而不是一个可以独立限定范围并交付的部分时,专属聘请更合适。这也意味着由同一个人持续积累对您系统的真实理解,而不是每次都重新接一份简报从头了解。
没有固定期限。有些客户会围绕特定路线图,让专属开发工程师连续工作数月,也有客户选择让这种安排与自己团队一起长期持续运行下去,不设明确的结束日期。费用按月计算,双方都可以随着产品需求变化随时重新评估。
由您负责。他们会加入您的日常站会,接受您技术负责人的直接指示,并遵循您现有的分支管理和代码评审流程,和团队其他人没有区别。我们不会从外部管理他们的具体工作安排。
可以,我们也建议这样做。在正式开始功能开发前进行一次付费的简短审查,能提前发现代码规范、隐藏的技术债务和潜在的并发风险,让最初几周真正产出成果,而不是花时间反复猜测您的代码库结构。
这个问题更接近咨询服务,而不是专属聘请。我们可以为您对接一位专家,在限定时间内评审这个技术选型决策,再决定是否要投入按月合作。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。