(一)好员工的素质
好员工的类型有很多种,尝试着抽象出一个定义吧--好员工是那些主管分配其任务放心、同事喜欢与其共事、对自己工作负责、志在自我提升和价值实现的人。知识经济时代,好员工首先是做好自我管理的,终能独挡一面的个人(参见博文“怎样培养独挡一面的能力”)。作为半个程序员,姑且聊一聊好员工该具备的素质(部分针对程序员)。
我认为,一个优秀员工的衡量要包含技能水平(技术宽度、广度、熟练程度)、沟通能力、工作态度、学习能力。例如,做一个好的程序员,无论是有志于走向管理还是高级工程师,应该都需要陆其明@happydeer说的“先从一名高效能的程序员做起吧”,最好的开发者往往不是代码写的最多、最快的人(是优秀程序员其中一类吧),而是沟通能力卓越、从大局出发、精于思考、能站在更高视角审视的人。好员工的工作风格应该包括(但不局限于):
(1)知道自己正在做什么、要做什么。他们安排自己手头工作要掂量的起轻重缓急,即懂得时间管理。
(2)让主管和同事放心。他们以解决问题为导向,总是能按时按量完成自己的任务,他们不怨天尤人、总是自我反省、努力先解决自己的问题。
(3)有大局意识。他们把握系统的整体结构、从更高的角度审视任务,他们追根求底,从不靠运气编程,绝不会胡乱的修改代码以解决bug,而是尽可能去追究bug产生的根源。
(4)把团队放在首位。他们能够很好地跟别人相处,他们选择合作,他们能认识到别人身上的卓越之处,并且欣赏。
(5)对自己高标准、严要求。他们不断的提高自己的技术能力和个人修养,也帮别人共同进步。
(6)卓越的沟通、表达能力。他们跟人进行清晰、有效、恰当的沟通,说服别人与之协作,推动项目的前进。
(二)工作的态度和技巧
(1)接受和分配任务双方要达成充分共识。为了尽可能减少理解误差,主管分配任务时你要主动与之确定任务是什么、什么人参与、达到什么目标、何时完成、度量标准是什么。
(2)主动汇报工作计划和进度。主管需要把握全局,因此他们需要处于“一切在掌握之中”的状态。作为员工,你要在任务达成共识后主动上报任务计划,并阶段性汇报进展。进度报告要包括什么时间段内达到了什么目标、解决了什么问题并概述你用的方法。这样,你自己也收获匪浅。
(3)任务要无条件接受、主动沟通、尤其别抱怨。主管不是傻子,不会无缘无故任务砸你头上。如果此时你确实忙不过来或不懂,如实告诉主管、表明难处、请主管裁决是否交由其他人做或者延迟再做。这需要你首先能做好个人时间管理。
(4)不要问主管该怎么做。你受雇是来解决问题的,你应该是专家,至少走在做专家的路上。遇到未知问题时,自己去思考和咨询,给出你的理解和多个解决方案,供主管选择。
(5)主动承担责任、分担任务。主管其实是很累的,尤其是技术主管,你看着他陀螺转不体谅、心疼吗?你要主动推动工作的进行并汇报,这需要你的全局意识和更高的视角。
(三)空闲期可以做的事
空闲期指项目全面进入测试阶段或者一个项目完结、另一个未曾开始阶段。管理人员要关注空闲期、帮助成员安排提升计划,个人则要对自己负责、对团队做做贡献。空闲期可以做(但不限于)的事情包括:
(1)分析之前的bug可以分析bug产生原因、规律,也可以是开发帮助检查和分析bug的工具,让一切尽可能的自动化该是不懈的努力。
(2)总结经验,提升个人技能的层次。总结要站在更高的视角去进行:为什么这么做?上下游模块怎么写作?有什么更好的替代方案?写出来、分享就是一种很好的总结方式。写作是梳理自己思路、整理知识系统、发现和填补漏洞的过程,教别人是提高自己水平的最好途径之一,也使你能够更清晰的表达自己的想法。有效写作是基础性技能、是职业生涯的助力。
(3)反思自己的职业生涯。软件项目中需要各色的人才,包括分析需求、提出解决方案的产品经理、管理协调项目利益干系人沟通的项目管理、设计架构的架构师、编码和研究算法的程序员等等。我们该根据自己的性格特点规划职业生涯。空闲期是审视自己职业生涯现状的最理想时机。你过去对自己的认识正确吗?你现在处在你理想中的位置吗?你的职业生涯在向正确的方向前进吗?你准备好迎接新的挑战了吗?你需要做些什么,以使自己忙碌并能富有激情?如果通过上述反思,你觉得必须改变一下,那么,越早采取行动越好。
(4)学习新知识、新技能。去学团队未来可能使用的或者自己感兴趣的知识,一来拔高自己的知识和技能层析、提升竞争力,二来为团队储备技术、获得提拔。
(5)团队建设,积累技术经验、促进协作。这需要主管的推动,去回顾过去项目开发过程中的技术和管理经验。哪些是个人常犯的错误?哪些是团队犯的错误?怎样能做的更好?怎样才能让大家更好的合作?
(6)原型开发,将团队的开发经验和思想形成原型可用于分析、学习。也可以去提前了解用户需求、策划未来产品、研究相关新技能。