从 Software Developer 到 Tech Lead这是每个程序员在公司内升迁的必经之路。Tech Lead 说白了是一个介于 Manager 与 Developer 之间的角色。做为一个 TL,依然要继续 Coding,但同时也要管理下属和项目的进度。当然一般来说与 Manger 相比,TL 的下属人数一般不会很多。 TL 往往是从 Developer 中技术能力较强者提拔上来的,这是一个悲剧的开始。因为基本上一个人的 Coding 能力与 Geek 程度是成正比的,但 Geek 大部分不善言辞,不善与人沟通。更悲剧的是,一个 CS 的本科生在第一天踏入工作的时候,他之前就已经有了 4 年的 Programming 的专业知识。而一个 Tech Lead 在上任之前完全没有任何专业培训。所这种角色转变注定是痛苦而又漫长的。 不过其实要减轻痛苦也不是很难,关键是要确定目标。首先,怎样的 Tech Lead 才能算是优秀的?前面说到 TL 的主要职责是管理下属的 Developer 以及项目的进度,当然很多时候他依然要担当 Programmer 的角色。 如何管理下属让他们按时完成所布置的任务?一个 TL 面临的第一个问题经常是 “为什么我手下的人怎么都那么弱呢?这么一点事要做两个星期?写出来的 Code 还这么烂?WTF“ 这个… 其实… 如果他们的 Coding 比你强,你能当上 Tech Lead 吗?所以手下人的能力不如你,那是完全一定以及肯定的。所以 TL 的首要任务是要将自己的技术心得与秘技向下属倾囊相授,帮他们做大量的 Code Review,Critical Path 的代码需要逐行分析。和他们一起做项目模块的 Break-down,Break-down 做好了 Project ETA 的 Estimation 自然会变得更准确。我觉得 Tech Lead 最重要的职责是 Mentoring,下属的技术与实现效率提高了,其他问题也就迎刃而解了。 说到这里就不得不提到我刚刚升 TL 时的一个坏习惯,就是” 最硬的骨头一定要自己来啃 “。其实这不是成为 TL 后养成的习惯,因为之前就是一路啃硬骨头上来的。不过现在是该把这些好差使留给你的 Team member 的时候了,这就好比打电脑游戏,你的主角等级已经很高了,即使再杀几个 BOSS 也升不级,但这些经验如果让给队伍里等级较低的角色,那他们可以连升好几级,队伍的整体实力也更强了,要是一天到晚让他们杀些 lv1, lv2 的小怪,再过个一年半哉,他们也还是老样子。当然在跟 BOSS 打的时候,你的主角一定要在旁边盯着,关键时刻给点红瓶蓝瓶,或是放个大招把怪打掉半条血什么的,不然他们怎么死的你都不知道。 有人问,那一段时间之后我手下的人技术上都比我厉害了怎么办?我觉得到那时你就可以升 Manager 了,TL 让他们来做吧。 如何继续做好自己的另一项本职工作,Coding ?这是一个很头痛的问题,除去用在 Mentoring 与 Meeting 上的时间不算,在剩下的时间里 TL 做为很多方的 Contact point,一天之中会被打断无数次,而 Programming 是最忌讳被打断的。曾经问过我们的 CTO,他是如何解决这些问题的?(不要奇怪,我所在的 Slide 是一家 100 多人的 Startup,即便是 CTO 也还是要 Coding 的) 他的方法是人为的制造一段 Dedicate 的时间来 Coding,具体来说就是他会每天早上 8:00 到公司,比一般员工要早 2 个小时,这 2 个小时他会把需要处理的最难的 Coding problem 解决掉。当然一般来说他也会比大部分人早 1,2 个小时下班。虽然没有正面解决被打断的问题,也是一个很不错的 approach。可惜这个方法对很多人不适用,比如我,早起对我来说实在是一件太痛苦的事情。另外一些小的技巧,比如在想要专注的时候,可以关掉 mail client 与 IM,这样别人只有在遇到真正棘手的问题时才会跑到你的 Cubic 来跟你讨论。 但总体来说,对于这个问题,我并没有解决之道。求高人指教! 如何保持自己技术上的优势?前面提到要不惜全力的培养下属,不过 Tech Lead 在骨子里都是希望自己的技术更出类拔萃。那这两者不是相互矛盾吗?我并不这样认为。TL 应该在更 High-level 或是更 Low-level 方面思考问题,不是具体某段代码怎么写,某个模块如何写。在 High level 方面,应该考虑产品的整体 Architecture,抽象出表现,逻辑与数据层,决定哪些技术是成熟的可以使用的,哪些技术是不成熟的或是即将被淘汰的。而在 Low level 方面,应该 Thinking of CPU cycles, memory allocation, thread concurrency 与 network latency,了解底层的机制,才可能写出真正高效与健壮的代码,再好的产品理念,没有优秀的实现,那也注定会一败涂地。这也是在面试的时候,我很在意侯试人是否是科班出生的原因,在 80% 以上的工作中,CS 科班出生的新手程序员相比那些经验丰富的自学程序员工作效率上要差一个档次,但是在一些关键点上前者会处理的更妥当。我可以很负责的说,即使 CS 的教材已经落后了一个时代,只要我们还是使用冯诺依曼的计算机模型,有没有认真学习本科的那些 CS 课程对将来工作会产生很深远的影响。 http://yejianye.com/2010/08/07/from-developer-to-tech-lead/ sohu-dba 本文转载自:微信公众账号 - SOHU-DBA,版权归原作者所有! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|