软件执行官给开发者的建议

本文是翻译,版权归原作者所有


简介

领导技术团队的乐趣之一是有机会和很多聪明、葆有激情以及具有创新精神的工程师打成一片,我的主要职责是保持他们的精力并转换成尽可能多的富有生产力的方法。

美好的回忆

我待在技术行业也许有37年了,大部分时间在软件上。我看到很多变化,比如代码的开发与管理、团队运作与合作,个体如何评估职业生涯。“我多久才能变成一名架构师?”“这对于当领导意味着什么?”“我怎样才能担任管理角色?”“我需要哪些技能才可进阶到较高位置?”我并不认为,每天某人至少不会暗示其中一个问题。

在微软的那些日子(1987-1998),没人会过多关注职级。我先回忆一下在Uinx Business Unit(是这样的……那时的微软持有的Unix证书拷贝要比其他所有Unix厂商加起来的总和还要多)的第一天。

Unix团队有一大把超级聪明的家伙。开发的高性能内存管理,还有处理器从ring 0切换到ring 1保护【注1】(这还是在非常有限的设备上)都是硬货。没有人想当管理者,做领导是非常酷的,因为除了指导小团队,还意味着他比团队其他人有更高的水平。

开发人员成功的关键特点是永恒不变的,非常肯定的是:技术变化的节奏非常快。除了找到擅长最新编程框架的开发人员,我常常寻找基础扎实、对学习新技术、极端沉迷于解决问题的有浓厚好奇心的人。

在微软时,我看到了桌面操作系统跟随多用户分布式处理系统的崛起。桌面进化成了客户端-服务器端范式,这就需要开发人员有更好的网络概念的基础。

后来,有了因特网和基于web的应用程序的兴起。性能和可伸缩性仍然受到关注,但是集中在技术的不同领域。然后,新的框架和编程语言多了,寻找精通makeup、管理代码等技术的开发人员变得有挑战了。

我们有了来自微软和“开放系统”【注2】新的开发框架,这进一步增加了雇人的挑战。对我而言,当我需要具备这些技能的工程师时,我选择去雇佣聪明、有激情和创新能力的人。我发现这种人能够做任何事情。一个聪明、有激情的开发人员能够快速掌握最新的编程语言;然而,你不能把一个编程语言专家“培训”成有激情和创新能力的人。

最终,我离开了微软,去BMC Softwar和Citrix Systems这样的大公司以及一些非常小的硅谷创业公司工作。那时候我们需要解决较难的问题,比如面向成千上万用户的可缩放UI界面、管理数亿的数据文件或email文件夹/消息,我们就需要招聘深谙架构和严格的编程技巧的开发人员。但是,我招聘的任何开发人员需要聪明、有激情和创新能力。

既要精,也要广

团队里的晚辈询问过工程师的职业规划问题,我是这样告诉他们的。

你需要精通当下的web技术(比如HTML5/CSS3),脚本语言(比如JavaScript),丰富的响应式客户端类库(比如Knockout),应用程序框架(比如Ruby-on-Rails),和有利于系统集成(比如Python)的语言等。

过去,开发人员可以只做后端或前端,但是今天行不通了。开发人员需要平衡,这包括实现数据库驱动的应用程序所需要的较好的SQL和(或)NoSQL技能。的确如此,数据库技术水平真正高超的工程师是非常紧缺的。同样,能够编写高可扩展、高性能搜索或分析程序的开发人员因其算法的高水平也是很有竞争力的。最后,我们专门再聊聊大数据。

有趣的是,我现在的公司(DNN)已经涉足了这些领域的多个方面。我们已经看到了编程要求从传统的基于服务器的C#转向了基于JavaScript、Knockout和JSON的富客户端代码。

我们的产品也必须适应种种桌面和移动设备参数,因此我们也不得不掌握基于HTML5、bootstrap、LESS等技术的响应式设计。然后还有平台自身的:我们解决方案是以可用性为前提,还要部署到云端。

后者带来了一大堆新的要考虑的技术,特别是带宽利用率,网络利用率,服务框架优化,数据库优化,服务恢复,组件管理和部署、测试,服务监控等很多技术。

云也带来了一个新的工程师阶层,他们具备开发和运营(“DevOps”【注3】)的能力。当找不到具备必要技术和偏执(你不能用不合格的运营工程师应付)的人时,我们不得不使人结对。

当招人时我们关注什么

当招聘管理者时,我们从今天的开发人员里寻找什么呢?我仍然倾向于聪明、有激情和有创新能力。但是后来,我也加了“结果导向”。最终,原因是我们的公司正如所愿。

对于工程师来说,无论一个module、一套组件集成或完成了research spike(译者注:这个词语搞不明白,跳过)与否,这都和结果有关。我们需要能把事情搞定、快速工作的人。我不是说研究性的事情每次要都完成;而是说用符合公司目标的、彻底而及时的方式完成。

当简历只是简单列出某人的项目或用过的工具/服务,我通常不会留下印象。当他们提到有挑战性的问题,就会引起我的注意。如果这个开发人员还能够描述一个全面的、与系统引起的挑战,他们离被雇佣就不远了。

这并不是说我不关注通常的技能。一个DevOps在New Relic、chef、Puppet Labs、Spluk等工具上的经验是非常重要的。对于DevOps而言,它就像扑克牌游戏中的赌注。我还是要再次强调,聪明、有激情、有创新能力且结果导向的人能够完成并且非常快速地学习大部分技术,这有利于完成重要的公司目标。

自我评估要诚实

基于此,我们再来讨论不可避免的职业发展问题。过去按照资历,我们仅仅考虑一个人的工作经验年份。标准是相对的,还要考虑其解决问题的能力、领导水平、规划和适应能力等因素。

这些特征也决定了他成长为一个独立的贡献人员或者管理者。当一个工程师真的适合做一名主力开发(因为他们乐于这样,编码能力超强),或者把伟大的规划看做紧凑的系统时,他常常渴望成为管理者。

这不是说开发人员不应该做管理;真正好的管理者是很难找到的。在我的公司,技术管理者被要求对我们产品有很强的动手能力,和团队成员打成一片,以及面对任务管理的组织能力。

如果他们能够证明具有想象和优雅的表达技术方向的能力,就有机会成为领导者:定前进方向而不只是管理工作的人。

结论

给工程师总结为:一切和变化有关。所有伟大的工程师喜欢改变事情,他们喜欢把挑战看成要解决的问题和必须被改变的事情。

然而,工程师常常疲于应付发生在身边的变化。我最后的建议就是拥抱变化,你做出的和发生在你身上的变化,你在这里的成功最终决定了你能爬到多高的职业阶梯。

原文地址:http://www.codeproject.com/Articles/702422/A-Software-Executive-s-Advice-to-Developers 注1:ring0:http://zh.wikipedia.org/wiki/核心态 注2:开放系统(open system):http://en.wikipedia.org/wiki/Open_system_(computing) 注3:DevOps:http://zh.wikipedia.org/wiki/DevOps

译文:软件执行官给开发者的建议 》| 腊八粥