热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

如何成为一位卓越的技术经理?

管理一支技术团队可能是世界上最难的事情之一。如果你是一个经理

管理一支技术团队可能是世界上最难的事情之一。如果你是一个经理,你需要和很多方面的专家合作,和你的上级协调产品需求,和负责协调产品交付件的同级合作,和将产品功能转化成技术需求的同级合作,带领直接汇报给你的团队等等。在某些糟心的时刻,你需要面对的是会把患有自闭症的送报小孩(原文,阿斯伯格综合症,爱因斯坦曾患有此症)赶走的同事。


我曾经担任过开发经理、开发总监的工作,也曾经是一个开发人员,在过去的几十年中,在管理技术团队这件事情的两边,我经历过许多非常不一样的“管理风格”。从技术团队的角度出发,就成为一个卓越的技术经理必备的特质,我会给出一些建议。


首先,技术人员的工作环境始终飞速变化,我觉得如何成为一个卓越的技术经理是一个非常重要的话题。 在过去的二十年中,我们可以看到软件开发的模式有发生了巨大的变革。在大多数企业中,软件开发的周期变得短,而且管理层因为每个季度盈利的目标而对产品开发施加更大的压力。对于许多初创企业,都需要在第一时间发布新的软件产品。这些情况都导致了在软件开发中我们会一直使用各种变更管理的方法。(参考PMP传统项目管理或Agile方法中的变更管理Change Management)


在我还是一个开发人员的时候,我明白了第一个道理。我的老板当时问我,你知道你的工作对公司有哪些贡献吗?


我:『额…… 我吗,我就是在写代码。』


老板:『好吧,你是在写代码。让我换一种方式来问你,你觉得你写的每一行代码会给公司带来多少利润呢?』


我:『(脑瓜爆炸中……)噢,不是?我觉得,我不能……我从来没有…… 额……你在说啥?』


我的老板事后向我解释,公司的想法是,每一个开发人员都应当知道自己对于公司的贡献。 当然这不是在讨论每一行代码能产生多少贡献,更主要的目的是,你知道你的工作会对公司的利润产生影响。 你的工作会影响你所开发的产品, 在其生命周期中,这个产品将帮助公司赚钱或是省钱。如果你能得到这些盈利或是节省的数字,除上公司的投入(项目上开发人员的工资收入), 就可以知道你所在项目的大致收益情况。听完这些话后,我一下子茅塞顿开。


这件事情的意义在于,在真实的商业世界里,我在这里引用梳着黑色大背头的Michael Douglas关于贪婪带来的好处的说法:对于公司来说,所有的事情都是赚钱相关的。(详见Michael Douglas参演的电影Wall Street)。然而,作为开发人员,我们专注于开发这一艺术性的工作上。我们创造出的代码,将比以前更快、更好、更优雅地解决问题,完成任务。我们就像画家一般在画布上尽情作画,直到完美,从无到有地创造,开发出令人兴奋、大呼碉堡的软件, 这和利润有半毛钱关系?


技术经理们就像“动物园”的看门人一样(想到程序猿们……)。他们应当要能够使用我们的语言,体谅我们付出的劳动,理解我们的问题,并且和我们一同分享胜利的喜悦。同时,当他们没有在做这些事情的时候,他们给予我们反馈,给予我们产品的需求,代表我们和他们的上级和同级的同事一起制定项目预算,确认开发的费用和团队人数。当某一个表面光鲜的销售姐姐因为要完成她的月度销售指标,将没有在当前开发计划中的产品功能承诺给了客户时,他们会帮助我们去解释为什么这样的情况会导致产品的发布日期延后一周。


经理们是公司机器的润滑油,是公司军队中的军士长。他们知道如何把事情做完,何时要紧,何时要松。简单的说,作为开发人员,你工作上成功的概率基本上正比于你老板的职业技能和工作的有效性。在我一生的职场经历中,我变得珍惜和感谢优秀的经理人,我知道真正优秀的经理人就像能中奖的彩票一样稀少。读了下面的文章,你就可以知道你有没有中了『好经理人』彩票。


1.优秀的经理要联系团队和个人 | Managers Connect


  • 一个卓越的经理会倾听团队的想法和顾虑。他会在公司要求的大框架下去衡量团队给予的反馈信息,努力在产品需求、交付日期和现实状况中达到平衡。


  • 一个卓越的经理会相信他的团队时时刻刻说的都是真话,而且只有真话,同时他会不带感情色彩地去辨别是非黑白。


  • 一个卓越的经理会在团队的需求和公司的需求两者之间进行权衡,而且他能够将同时满足多方面要求的项目计划进行到底。因为他相信这样做是正确的,而且在大多数情况下,这样做是通向成功的唯一道路。


  • 一个卓越的经理,会不时地和整个团队以及其中的所有成员保持密切的沟通。他会知道团队面临的挑战是什么,以及团队或其中的个人应该如何做才能够达到成功。


  • 一个卓越的经理会和团队和公司分享成功的经验,同时他会确保团队得到应得的荣誉。你总是不断地、及时地从你老板那里得到关于你工作表现的反馈,关于你在拟定目标上的进展状况,以及如何提高自身修养的建议,所以你总是能知道你在职业发展的道路上走得怎么样。


2. 优秀的经理要管理任务 | Managers Manage the Task


  • 一个卓越的经理应该首先是一个有技术背景的人。作为一个开发者,当你告诉你的老板,因你发现某些不可重入的(non-re-entrant)函数在运行中会发生系统中断,而需要重构一个特定方法的时候,你的老板应该能够知道你在说些什么东东,或者至少会对你有能力解决这个问题表示认可。


  • 一个卓越的经理要有技术的基础,虽然他可能不再是某方面的专家,但他还是有相当的技术能力参与到团队的技术讨论中去,或是在困难的情况下给予方法论上的建议和帮助。


  • 一个卓越的经理知道他当时招聘的技术专家是你,并不是他自己,所以你的责任是在碰到问题的时候给予解决方案。 好的经理管理的是任务,而不是技术。


  • 一个卓越的经理并不会因为他在某个特定的技术领域的经验而在一个项目计划中强加于你特定的技术,给你挖坑。他认可通常解决一个问题会有很多种方法,多年前的经验和方法在今日未必适用。他不会在没有考虑所有可能的方案的情况下,强制做出技术设计的决定,也不会因为自己以前经常使用某些技术解决方案,而把这些强加给团队。


  • 一个卓越的经理知道技术是日新月异,不断发展的,而找出某个特定任务的解决方法并实施最佳方案的人,应当是开发人员。


3. 优秀的经理要善于管理 | Managers Manage


一个卓越的经理是善于管理时间、任务、需求、规范、资源和人员的经理。 他会拥有看到整片树林的能力, 但同是他相信作为开发人员的你能够照顾好整片树林中的树木。 他会通过各种可能的方法关注你的工作量, 了解你的进展情况。 毕竟卓越的经理应当会使用各种必要的管理方法和工具来跟踪团队的工作和进展。这意味着你的团队应当会使用一些工具来跟踪和汇报每天的开发任务。这类工具可以是简单的缺陷跟踪系统(如 Mantis 或 Bugzilla), 或者是完整的基于敏捷开发流程设计的系统(如 Greehopper)。 不管怎样,这些工具会让你的老板能够以一种非主动的方式管理项目。同时,这类工具也能够提醒你老板在什么时间应该积极地介入到项目中来。


一个卓越的经理不会以“微管理”的方式来管理你的工作(除非你在工作上表现实在很差),而且不会经常每天通过各种可能的方式来骚扰你,来获得你最新的工作进展情况。 他知道在你解决困难问题的时候,你的大脑需要一个不被打扰的环境,任何打扰只会拖延解决问题的时间。他会知道你什么时候需要这样的环境来完成工作。


如果一个卓越的经理不知道为什么你对一项工作的估测时间增大之时,他会需要你提供时间估测的具体分析,并和你一起探讨。 如果需要对你的时间估测进行改动的话, 他会征得你的同意,而不是强行地进行更改。 另外,当计划外的工作被添加到你的计划中的时候,他会重新安排计划,以确保你能有足够的时间来完成这些工作。(《为什么程序员总是不能准确估测项目时间》)


一个卓越的经理会为你提供你所需要的所有资源,以确保你能够在规定的时间内完成工作。 但是,如果你需要的新硬件、软件、或是对工作环境的改变超出了目前项目允许的范围,只要你证明这些变化的确能够提高你的工作效率,他会同意的。 作为一个技术团队的一员, 你的职责是理解投资回报(Return of Investment, ROI)的基本概念。这样的话, 你就能像你的老板描述问什么项目计划外的支出能够帮助公司获得更多的回报。


4. 优秀的经理要尊重他人 | Managers Respect


一个卓越的经理会尊重他的团队的专业技能、 时间安排以及各种诉求。 他会给团队成员提供各种需要的工具来帮助他们在规定的时间内完成事先承诺的工作。 他会尊重你的个人生活和职业发展。当员工需要处理办公室里或日常生活中碰到的各种问题时,他会灵活安排员工的工作。对一个卓越的经理来说,只要团队的工作在规定的时间内完成,他不会要求所有人严格按照进度去工作, 他也不会过度关注每一项工作何时完成。 卓越的经理人知道在特殊状况下团队需要额外的时间来完成一项工作,但他们知道,当团队夜以继日的在每天晚上、周末、假日加班的时候, 这是例外,并不是常态。一个卓越的经理理解当团队一周工作60个小时以上的时候, 这是因为团队想这么干,并不是被逼的。 如果员工是被迫如此加班的话,他会意识到这是他自己在开发任务的时间管理上有问题,而不是因为团队的能力问题造成的。


5. 优秀的经理要代表团队 | Manager’s Represent


  • 一个卓越的经理会在各个方面代表他的团队,他会成为他所代领的卓越的团队的一个真实写照。 他会是一个卓越的领导者,被他的团队视为是一个贡献者而不是一个拖油瓶。


  • 一个卓越的经理会起到标杆的作用,同时他会向所有的团队成员证明他自己也会付出个人的努力来帮助团队获得成功。如果一个经理期望自己的团队一天工作整8个小时,那么他自己也要工作同样长的时间。卓越的经理是那种“按我做的去做”而不是“按我说的去做”的那种老板。


  • 一个卓越的经理会以极大的热情在团队、部门、公司范围内表彰员工的杰出表现。他会经常对有对贡献的员工在公众场合进行表扬,同时确保他们得到物质上的奖励。相反,如果团队失败了, 他会认为这也是自己的失败。


  • 一个卓越的经理会和他的团队一起分析一个特定任务或事件失败的原因,这样他们就可以采取一些措施来防止再犯同样的错误。他会为团队的成功负责, 他也会为团队的失败担负一样的责任。


我完全了解一个经理的职责远远超出了他所带领的团队。我试图从一个团队成员,而不是一个一线经理,或是一个总监的角度来写这篇文章。对程序员来说,在基层工作的一个好处是当你不知道你的上级在做什么的时候,你可以随便批评他们。相信我,一个一线的技术经理每天的工作包含了很多和管理团队无关的事情。如果你觉得你老板的工作很容易,或者你会比他们做得更好,为什么不去试一下做你老板在做的事情?我觉得你是不会想要他们的工作或是相应而来的压力的。


如果一个团队有幸能够得到一位卓越的技术经理,这支团队应当积极地保护甚至培养和他们老板之间的关系。通常,开发团队可以使用他们老板不知道的方法,通过额外的付出和努力来帮助他们的老板成功。一个卓越的经理会关心他的团队,同样的,一支卓越的团队也会如此地关心他们的老板。长此以往,团队和经理成为了有机的一体, 像剑圣一般坚不可摧,战无不胜,成为组织中其他团队的标杆。


在卓越团队中的每一个人,都应该反映出这支团队的经理的技能、态度和道德水准。


英文:Micheal Shallop

译文:伯乐在线 - Lex Lian

链接:http://blog.jobbole.com/42983/


推荐阅读
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了程序员最美的情人节礼物,即使用JS渲染的3D玫瑰,通过在QQ空间和人人网上分享这个特殊的礼物,可以给情人带来惊喜和喜悦。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 如何在跨函数中使用内存?
    本文介绍了在跨函数中使用内存的方法,包括使用指针变量、动态分配内存和静态分配内存的区别。通过示例代码说明了如何正确地在不同函数中使用内存,并提醒程序员在使用动态分配内存时要手动释放内存,以防止内存泄漏。 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
author-avatar
红红的累累vdHRC_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有