【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

开发经理是否应该写代码?

  • 2018-09-23
  • 本文字数:2828 字

    阅读完需:约 9 分钟

我花了很多时间为开发经理提供建议,很多刚走上开发经理岗位的新手总是问我:“我应该写多少代码?”

网上有很多文章建议开发经理要么完全不写代码,要么最多花 30% 时间在代码上。

但问题是,太过关注开发经理需要写多少代码,反而忽略了开发经理为什么要写代码。

一名优秀的开发经理意味着你的优先考虑事项是管理以及与团队成员互动。你需要培养管理技能,而我认为最重要的是同理心。同理心意味着你需要从工程师的角度看待问题。

很多优秀的开发经理曾经也是工程师。然而,工程技术领域在不断发展,作为开发经理,需要与时俱进才能保持对团队的同理心。

因此,不要问“我应该写多少代码”,而应该问“我在什么情况下可以写代码”。

在 Coursera,我们的开发经理就是这种方法的最佳实践者。这样做不仅让我们可以“保鲜”我们的工程技能,同时又提升了对团队工程师的同理心。

什么情况下不要写代码

有时候,回答一个棘手问题的最好方法是回答反面的问题,比如“在什么情况下我不应该写代码?”。

如果人是开发经理的首要任务,那么通过代码塑造一个伟大的工程团队需要更多地关注测试、监控、代码评审、设计文档等。

完成这些任务所需的时间和空间只有全职工程师才有。如果开发经理去写代码,同时又期望其他人能够完成其他繁重的工作(测试、调试、文档、评审、监控、维护等等),那么开发经理将失去激励伟大工程团队的能力。

开发经理不应该在团队的关键路径上写代码。虽然这看起来似乎有所限制,但也带来了新的机会。

什么情况下要写代码

代码评审

编程活动包含了 10%的编码和 90%的设计、沟通、测试、阅读代码等。

因此,开发经理的另一种“编码”方式就是完全不写代码。

代码评审有助于建立团队同理心,同时还可以加强编程技能,并建立对产品更好的理解。代码评审要求评审人员能够阅读和理解代码——可以说是伟大工程师最重要的技能之一。

修复小 bug

有时候,开发经理有机会卷起袖子修复一些小 bug。与代码评审一样,修复这些 bug 不需要写大量的代码。

但它需要阅读与 bug 相关的代码,并需要一个有效的开发环境。

开发经理应该要十分谨慎,避免引入新的 bug,并在修改完 bug 后进行测试,但要尽量避免修复团队最近引入的 bug。

开发经理应该在存在巴士因素(bus factor,团队成员被巴士撞伤会影响项目进度,指某些事情只有某些人会做就会成为项目的风险点)的项目上这么做,或者负责处理那些老 bug 或琐碎的问题,因为这些问题只会消耗已经负担过重的团队成员的时间。

虽然团队专注于构建优秀的产品,但仍有很多机会改进用于设计优秀产品的工具。通过自动化改进这些工具或开发新的内部工具为工程师和开发经理提供了发挥影响力的绝佳机会。

例如,Nick Dellamaggiore(Coursera 的基础设施负责人)注意到,工程师使用了大量样板代码来监控事件管道中的事件。他希望减少这些样板代码,并避免为每个新监控器重新部署服务。后来,他做到了,甚至超出了期望。

我们现在都在使用他的方法对我们的产品进行性能监控和产品使用监控。

但是,如果这些工具变得非常流行且不可或缺,那么维护和开发新功能可能会成为开发经理未来的负担。为了避免这种情况,开发经理需要将工具交给新主人。

开发经理可以尝试构建更好的工具,帮助团队更好地完成工作,而不是寻找管理任务以外的事情!作为开发经理,可以通过代码来改进或自动化很多任务。

1. Google 脚本

几个季度前,我过了一遍之前所有的事故分析报告,从中识别出事故发生的趋势,并确定我们在跟进预防性问题方面究竟有多大的实力。

我们的事故分析报告太过分散,而且从每个报告中复制数字数据是件非常耗时且无聊的事情。

为了给我自己以及其他开发经理减负,我开发了一个 Google脚本。现在,工程师只需填写一个Google 表格,回答一组标准问题,就可以自动生成事故分析报告,同时将有价值的指标填入中央电子表格。

这样不仅改进了事故报告的分析工作,我还从工程师那里听说,他们花在填写事故报告上的时间更少了。

最近,Priyank Chodesetti(学习体验团队的开发经理)也写了一个Google 脚本,用于自动化团队sprint 回顾过程。自从他发布了这个脚本以后,sprint 回顾的参与度得到了很大的提升。

2. JIRA

在 Coursera,我们使用 JIRA 进行 bug 跟踪和 sprint 计划。

Jerry Charumilind(学习体验平台团队负责人)汇总了一份关于我们团队在解决 ticket 方面的有效性报告。

虽然 JIRA 可以做很多事情,但很难通过内置插件来提取历史数据。不过,借助 Python 和非常有用的 matplotlib,Jerry 直观地向我们展示了我们的团队在这方面做得有多好。

最近,Jerry 又写了一个自动化脚本,可以向问题所有者发送有关问题时效性和优先级的通知。

3. Slack

slackbot 为开发经理提供了一个写代码的机会,同时还可以提高团队的工作效率(或娱乐性)。

去年,我创建了三个 slackbot:

  • Buggy——用于创建、搜索和分配 JIRA 问题;
  • Foody——用于查询我们的午餐和晚餐菜单;
  • Booky——用于搜索 gitbook 上的工程文档。

4. 检查器

伟大的工程实践也可以从编程中受益。Mustafa Furniturewala(学习体验团队的开发经理)在他希望改善团队测试文化时就遇到了这种情况。

在 Coursera 评审代码时,我们会自动执行 linting,阻止不遵循编码样式指南的代码提交。Mustafa 写了一个脚本,强制要求所有新组件至少包含一个单元测试。

开发经理因此可以花更少的时间在手动检查代码提交上,并花更多的时间深入思考如何激励团队进行更好的单元测试和集成测试。

5. 公司内部黑客马拉松

在 Coursera,make-a-thon(我们的黑客马拉松版本)为开发经理提供了绝佳的写代码的机会。在过去的三个季度中,几乎每个开发经理都参与其中。在上一个 make-a-thon 中,Richard Wong(Coursera 工程总监)因为他的项目能够自动从视频脚本生成音频而斩获了最佳表现奖。他的现场演示非常精彩!

一些开发经理喜欢参与宠物项目、副业或甚至是开源项目(例如,我在维护不是很流行的 emailjs )。这些项目为他们提供了编写大量优秀代码的机会。

外部工作为开发经理提供了有趣的编写代码的机会,与此同时,企业应该考虑采用更全面的方法来鼓励开发经理抽出时间来编写工作相关的代码,特别是鼓励健康的生活工作平衡。

什么时候可以认为开发经理写的代码够多了?

我已经建议开发经理在哪些情况下可以写代码,当然,这并不是一个完整的清单。好的开发经理可以通过这些方法来为他们的团队建立同理心。

开发经理在适应了这些写代码的场景后,现在就可以更好地回答之前的问题:何时以及需要写多少代码。

我不认为它有一个正确的答案。这要取决于每个经理自己,他们需要确定他们在激励团队构建优秀产品时是否具有足够的同理心。

最近,我的一位工程师在调试她发现的 bug 时向我求助。我们花了大约 20 分钟阅读代码,并尝试各种输入,最后找到导致 bug 的根本原因。当我的团队很乐意找我寻求帮助时,这些互动告诉我,我写的代码已经够多了。

英文原文: https://medium.com/coursera-engineering/should-engineering-managers-write-code-wrong-question-ec5fc54d3903

2018-09-23 10:102105
用户头像

发布了 731 篇内容, 共 430.5 次阅读, 收获喜欢 1995 次。

关注

评论

发布
暂无评论
发现更多内容

2022-09-08:以下go语言代码输出什么?A:5 66;B:5 88;C:7 88;D:以上都不对。 package main func main() { var x = []int{4:

福大大架构师每日一题

golang 福大大 选择题

计网复习二,网络应用

前端小刘不怕牛牛

计算机网络 HTTP 9月月更

C++学习------cmath头文件的源码学习01

桑榆

c++ 源码阅读 9月月更

【JavaWeb】Servlet系列——HttpServletRequest接口详解

胖虎不秃头

Web java; 9月月更

讲究卡路里多少的美食出圈了!维小饭被评为“2022中国轻食十大品牌”

联营汇聚

云桌面解决方案 企业最佳合作伙伴

力软低代码开发平台

计算机网络——分层结构

StackOverflow

编程 计算机网络 9月月更

有效预警6要素:亿级调用量的阿里云弹性计算SRE实践

阿里云弹性计算

监控 预警 SRE实践

每日一R「23」回顾基本概念

Samson

学习笔记 ​Rust 9月月更

VUE 项目本地没有问题,部署到服务器上提示错误

HoneyMoose

Linux系统安装Redis

Centos 7 redis 底层原理 9月月更

Zilliz 论文入选数据库顶会 VLDB'22

Geek_2d6073

SD-WAN应用选路方案

阿泽🧸

SD-WAN 9月月更

mysql基本类型

急需上岸的小谢

9月月更

融云 x KUPU:印尼蓝领用工的「直聘」样板

融云 RongCloud

互联网

SpringBoot源码 | prepareContext方法解析

六月的雨在InfoQ

springboot 源码阅读 9月月更 prepareContext

全面构建数据安全“护城河”,助力企业数智化升级| 极客星球

MobTech袤博科技

大数据 数据安全

Online Schema Change(在线更新元数据)

KaiwuDB

分布式数据库 schema

国内低代码平台“定制化开发”能力较强的有哪些?

优秀

低代码

leetcode 437. Path Sum III 路径总和 III(中等)

okokabcd

LeetCode 数据结构与算法

Zilliz 论文入选数据库顶会 VLDB'22

Zilliz

数据库 分布式 云原生 VLDB'22

线上直播预告:数据库人才培养创新与变革

阿里云数据库开源

数据库

Elasticsearch6.1.2源码下载和编译构建

程序员欣宸

elasticsearch 9月月更

转转商业化OCPC产品的护航之旅

转转技术团队

人工智能 计算广告 PID OCPC

[Go WebSocket] 多房间的聊天室(一)思考篇

HullQin

Go golang 后端 websocket 9月月更

【C语言深度剖析】详解strlen与sizeof的区别及用法

Albert Edison

C语言 sizeof 9月月更 strlen

【JavaWeb】Servlet系列——使用纯Servlet做一个单表的CRUD操作

胖虎不秃头

Web java; 9月月更

数据治理(十一):数据安全管理Ranger初步认识

Lansonli

数据治理 9月月更

网络IO是如何一步一步走向零拷贝的

C++后台开发

cpu 零拷贝 C++后台开发 网络io C++开发

Java终极学习路线-共计9大模块/6大框架/13个中间件

小明Java问道之路

Java 架构 JVM 中间件 9月月更

nft系统开发

开源直播系统源码

区块链 NFT 数字藏品 数字藏品软件开发

开发经理是否应该写代码?_语言 & 开发_Coursera_InfoQ精选文章