提升编程技能的三种方法

在企业 Linux 环境中,编写代码的能力对于每个职位角色来说都是一个巨大的优势。作为一名运维和 DevOps 经理,我 постоянно 面临着提升团队编程技能的挑战,而团队也真心希望变得更加精通。
但是如何做呢?
结构化培训是一个标准的答案:参加课程!像许多公司一样,我们公司在学习资源上投入了大量资金。我曾与一位工程师一对一地坐在一起,我们一起研究在线门户网站,琢磨最合适的 Python 学习路径。
然而,存在两个问题。问题一:课堂材料几乎立即被遗忘,如果不是直接应用的话。问题二:我会失去对进度的可见性,持续数天、数周甚至数月。我会太晚才发现材料不合适或过于高级。
我想分享三种补充方法,我发现这些方法可以有效地帮助工程师们在立即提高生产力的同时,轻松掌握编程。每种方法都适用于不同的基础技能水平。
新员工:首先教授框架
没有或很少有编程经验?不要要求工程师编写代码;相反,让他们编写文档。我知道这听起来很矛盾。但这是关键:工程师要像对待代码一样对待他或她编写的内容。你们团队的开发实践要被严格遵守,无论内容如何。如果你们的团队还没有像对待代码一样处理技术文档,请开始这样做!
真的——对没有经验的人来说,困难的不是基本的语言结构和过程——而是其他的一切。比编写代码更重要的是仓库的概念和 Git 的机制;持续集成、持续交付 (CI/CD) 管道、安装和配置集成开发环境 (IDE) 等。
在我的团队中,我挑战非常新的程序员编写“runbooks”——一套由一级支持和系统管理员用于事件响应的书面程序。我期望一个迭代循环;runbooks 将被正确地合并到我们的仓库中,并不断更新和修订,加强这种实践学习。通过反复使用,你就会“掌握” Git。
要求新程序员编写文档在以下三个方面有所帮助:
-
员工掌握了版本控制和其他最佳实践基本工具的实践理解。
-
输出立即可用,并受到同行的赞赏。
-
这是一个向下一个逻辑步骤轻松过渡,即编程:用自动化取代手动操作。
更有经验的员工:现代化遗留代码
许多工程师可能有一些编程技能,美好的意愿,但难以交付可行的解决方案。他们被分配了一个最终过于复杂的问题,感到沮丧和焦虑。或者至少你会因为不断增长的技术债务而感到沮丧和焦虑!
一个实用的解决方案?我保证你的组织有大量的旧 shell 脚本或用遗留语言编写的代码。也许有一个 Windows VM 潜伏在那里,因为没有人花时间让 PowerShell 在 Linux 系统上工作。
你知道在凌晨 02:30 被 PagerDuty 呼叫醒来有什么乐趣吗?什么都没有。但尤其令人恼火的是,试图理解几年前用 awk 编写的一些正则表达式解析程序,当 UI 更改在非工作时间推送时,程序就崩溃了。
这是一个绝佳的机会,可以将这些 shell 脚本用你组织选择和约定的语言重写,即“跨语言重构”方法。
重构 shell 脚本有很多优势:首先,由于你已经有了(据推测)可用的代码,业务不会因等待交付而受到影响——新代码是并行编写的。其次,工程师可以使用现有的脚本作为模板。最后,你的仓库实现了现代化,自动化是用正确的编程语言编写的:可以说不是 shell!
扎实技能:扩展边界
高级团队成员可能会感到厌倦并寻找额外的项目,或者想学习更流行的编程语言。也许你的 DevOps 管道或系统管理程序相对成熟,大部分工作都是简单的维护和更新。
我保证有一些关键指标,无论你的团队使用什么软件进行应用程序性能监控 (APM),这些指标都不容易被看到。你的老板、她的老板,甚至可能是一位高管都想看到它。
考虑挑战你的顶级工程师编写一个基于 Web 的应用程序或仪表板,以显示这些数据。我发现这是一个很好的方法,原因有二。首先(诚然更像是一种人为的工程技巧),在管理链中获得认可的潜力是一种强大的激励。其次,开发人员必须解决跨不同应用层和技术的端到端解决方案。这也是指导的绝佳机会,因为重点被限定在一个特定的挑战上,而不是一个开放式的、模糊的要求。
例如,我们的一位高管希望定期更新客户入职情况。手动收集指标很繁琐。一位系统管理员通过编写脚本来应对这一挑战,定期查询数据库记录和磁盘上的非结构化数据。输出被格式化,并使用 Slack 的原生 Webhooks 每 6 小时自动发布到管理频道。
总而言之,我不想淡化课堂教育在学习编程时的重要性。但对于新的程序员来说,立即获得支持工具的实践经验对于未来的成长至关重要,而交付文档是学习工具和流程的好方法。对于更有经验的程序员,考虑重构旧代码以符合你当前的实践。最后,挑战高成就者编写 Web 应用程序,或以其他方式向更大的团队发布关键数据。