一说到管理者的能力特质,咱们立刻会联想到沟通、受权、决策等能力。然而,对于软件开发活动中的基层技术管理者(team lead、line manager等),我想指出被极为忽视的另外一种重要能力 — 技术敏感度。编程
对于基层技术管理者来讲,何为技术敏感度?技术敏感度表现为:1)工程师解释技术问题时,能快速理解并切中问题要害; 2)面对多个技术方案作选择时,具有权衡能力,并能给出有建设性的意见和建议,甚至作出选择;3)工程师提出技术想法时,能敏锐地意识到对产品和团队的意义; 4)能根据团队成员的个体差别和技能特色,及团队技能总体发展的须要,合理地调配团队成员的工做内容;5)从代码层面了解项目的质量情况;6)理解软件开发活动的复杂性本质。部份内容看似应是工程师应具有的,为什么却要求基层技术管理者必备?架构
第一,基层技术管理者在平常工做中做为技术团队面向管理层的接口人,他们在各种与产品经理、项目经理的会议中表明着工程师队伍解释影响项目进展所面临的技术问题。这就要求管理者适时地了解项目在技术方面的进展,显然,这些进展得从工程师口中得到。平常工做中,基层技术管理者不只要能理解工程师所解释的技术问题,还得掌握问题要害,而不能工程师解释时了解,事后却健忘。基层技术管理者如不具有这种能力,容易形成与管理层和技术团队的沟通不顺畅而影响工做效率。(注:我碰到过一些基层技术管理者,一样的技术问题得在不一样时间段为他解释。开技术会议的主要工做是让他理解所出现的技术问题,效率之低能够想象)设计
第二,基层技术管理者在平常工做中不时会面临团队技术方案的选择问题。规模较大的技术方案(如系统级、子系统级)的选择一般由架构师们完成,但团队级别小规模的技术方案选择不少情形下会成为基层技术管理者的工做内容。当团队具有一个以上技术实力至关,但在设计理念上存在明显差别的工程师时,他们颇有可能在项目实施的过程当中主张不一样的实现方案,若是设计方案没法及时达成共识,势必影响项目的顺利进展。此时,基层技术管理者得参与其中,经过运用本身的技术能力与团队共同作出设计方案的选择。在这种状况下,即便技术管理者不直接作决策,也得经过询问一些问题帮助团队作出决策。所问的问题可能有:各方案的开发成本如何?各方案所得到的长远与短时间利益分别是什么?长远与短时间利益哪个更紧迫?等等。问怎样的问题,彻底取决于基层技术管理者的技术能力和项目当时的具体情况,并无标准问题集。基层技术管理者若是不具有这种能力,很容易让团队在技术方向上迷失,不利于在团队维持向上的技术氛围。(注:我看到过一些基层技术管理者,对于团队所出现的由于技术方案选择而产生的争议漠不关心,作决策时是根据各方案有多少人支持,而不是依靠本身的技术能力施加影响)blog
第三,工程师在工做中会提出这样或那样的技术想法,基层技术管理者很重要的工做内容是对这些想法进行积极的回应,以引导团队的技能发展。这就要求基层技术管理者对各类技术想法具有甄别能力,能敏锐地发现想法对产品与团队的意义。对于能改善产品质量与提升团队效能的想法,基层技术管理者应在团队内给予及时的确定,并为想法的实施适当地分配资源。假如基层技术管理者缺少这种能力,要让团队具有必定的创新能力几乎不可能。要知道,工程师所努力的方向很大程度上与基层技术管理者的承认内容有很大的关系。(注:这一点我认为是基层技术管理者作得很糟糕,他们彷佛只在乎项目计划和进度)接口
第四,提升团队技能是基层技术管理者的核心工做内容,这就要求基层技术管理者在工做中有意识地弥补团队的技能“短板”,经过考量团队成员个体的特色和技术特长合理安排工做。技术管理工做中,很惧怕的是忽视个体特色觉得每一个人只要有机会都能成为技术专家。另外,软件开发活动中所出现的项目延期,很容易给人的假象是“任务估计不许”,而实际上,这是团队能力不足的表现。(注:请参见《技术管理的核心内容 - 提升团队技能》一文)资源
第五,设计是软件产品的质量之本,但再好的设计也得经过程序代码这种“物质外壳”去表达,所以代码质量将决定软件产品的最终质量(引自《专业嵌入式软件开发》)。对于基层技术管理者来讲,真实了解软件产品的质量情况并不是简单地知晓发现了多少缺陷,或阅读所谓的“质量报告”,而应从产品代码中得到。因为软件开发团队是以交付高质量软件产品为使命的,这就要求基层技术管理者根据代码质量去指导技术管理工做,不然很容易浮在质量管理的表面。我认为基层技术管理者很重要的一个工做内容是帮助团队造成良好的编程习惯,若是对项目的质量没有代码级的认识,就很难就这一点在工做中引导团队。(注:有很多基层技术管理者根本没有阅读过项目的代码,而是一味地经过项目的缺陷率间接了解产品质量,甚至一厢情愿地生活在“产品质量很高”的梦境中)开发
第六,软件开发做为一种脑力密集型的工做,基层技术管理者如何管理知识工做者一直存在很大的挑战。在面对和克服挑战的过程当中,必定须要基层技术管理者很好地理解软件开发的复杂性本质(没有“银弹”),不然很容易生搬硬套纯率的管理理论,而忽视技术因素。也只有理解软件开发的复杂性本质,才能对工程师由于面临技术难题而使得工做处于焦灼状态表示理解和保持耐心,也有助于在工做中区分问题的根源是来自管理域、抑或技术域。(注:很多基层技术管理者由于忽视管理工做中的技术因素,采用管理方法去解决技术问题,其效率与效果能够想象)get
技术敏感度归结起来就是要求基层技术管理者应具有很强的技术能力(千万不要丢了“很强”两个字),或者说对技术具有良好的洞察力。对于以上谈到的几点,读者或许会想:绝大多数基层技术管理者都是技术出身的,难道就没有技术敏感度?我消极地认为,不少人都没有!产品
不少基层技术管理者是从技术能力较强的人群中提拔上去的,这是一个事实。然而,因为他们中的大多数在技术道路上积累的时间都比较短(8年如下),在走上管理岗位时其实对软件的复杂性本质并无深入的认识,更谈不上拥有本身的软件哲学思想,也没有多少成功克服技术困难的磨砺。加之,一旦走上管理工做岗位,公司在能力培养方面总爱假设他们在技术能力上能胜任工做,而大力弥补他们的管理技能。结果是,至关数量的基层技术管理者技术能力并无达到至关的水准(管理水平也通常),谈不上对技术敏感。it
基于这种现状,对于那些在技术积累尚未达到至关水准却一心想成为管理者的同仁,个人建议是:请不要急着去作管理,不然你会身不禁已地失去技术的成长空间。尽管早走上管理岗位能让咱们把握先机,但操之过急的职业发展是以牺牲本身的未来而换取的。在现在浮燥的社会,不多有工程师知道,其实精进本身的技术是通向成功技术管理的最有效途径。技术敏感度的缺少会让咱们在未来付出不少,也会在职业发展的道路上面临更大的困境(到时技术不精,管理也作很差,拿什么去竞争?你如何证实你的管理能力突出?)。
之因此如此强调技术敏感度,是由于只有这样基层技术管理者才更具软件开发常识,而运用常识去管理复杂的软件开发应是最为有效的方法。现实中,正是由于基层技术管理者常识的缺少,他们在不了解工程师能力的状况下却作着绩效管理(能公平吗?),在很大程度不了解项目技术细节的状况下却作着项目计划(能合理吗?),在没有读过项目代码的状况下却作着质量控制(能有效吗?),……
强调技术敏感度并非说基层技术管理者对所管理的项目须要了解每个技术细节,而是强调他们应具有很好的技术积累。这里的技术积累并非简单地指他曾经经历了多少项目、写过了多少代码(这些都是必须的),而是须要对软件开发能有深入的认识,并拥有本身的思想,由于只有这些内容才对不一样的项目具备普适性。
读到这,相信有读者会问:管理者若是没有技术敏感度,难道就不能经过用好技术人才而得到成功吗?这种话某种程度上具备必定的欺骗性。在个人工做经历中,的确碰到过一位技术敏感度缺少,但在技术管理上却作得很好的基层技术管理者。这类人在心态上与大多数人不一样,他们敢于认可本身技术能力的不足,且对团队中的技术人才给予允分的尊重和信任。实际上,要作到这些很难,尤为对于那些有很强控制欲的人来讲,根本不可能。
对于基层技术管理者,最后我想说的是:你所得到的不仅是权力,更有责任 — 让团队成员在快乐的工做中不断提升技能。