【转载】优秀的开发人员

原文 本文是我将原作者一个系列的多篇文章归纳而成

零、如何定义优秀的开发人员

举例来说,更快的开发效率、更好的程序设计、更好的代码质量、更善于 debug、更能够解决技术难题。

一、兴趣

有兴趣的人,比较有动力去学习新东西、碰到新鲜玩意喜欢去刨根问底、碰到有开发过程的困难(比如一些难调试的bug)也显得比较有耐心。

判断是否有兴趣:
假设有两个工作岗位A和B供你选择。
工作岗位A:你可以随意地去干除了软件开发之外的任何事情(只要你喜欢的,都可以);
工作岗位B:你必须全职从事软件开发,不能干其它事情。
并且岗位A的收入比岗位B高很多。

二、自学

主动性分类:

  1. 抗拒自学者
    这类人不愿意自学(部分人是由于懒惰、另一些是由于抵触新事物)。当工作中要用到某项新技术而需要自学时,他/她就找若干理由推诿。
  2. 被动自学者
    这类人平时没事不会想到去自学新东西。只有当上司逼着他去学XX技术,他才勉为其难地去学。
  3. 需求驱动型自学者
    这类人自学的动机和方向是基于需求驱动。比如因为工作中要用到XX框架、XX库、XX软件,然后就利用业余时间找资料去看。
  4. 计划型自学者
    这类人自学的动机和方向是基于自己的规划。定期看看自己的知识结构有什么缺陷、将来自己想朝什么方向发展、最近哪个新东西将来会用得上、……然后给自己定一个学习计划。

自学的方法:

  1. 搜索引擎
  2. 订阅社区、博客
  3. github看源码(这是我自己加的)
  4. 读书

三、设定个人发展目标和计划

我一般会把个人发展目标分为“长、中、短”三种类型,以此来对应不同的时间阶段。不管是哪种类型的目标,都要把目标设置得难易适中。太容易的目标对自己的成长帮助不够大;而太难的目标则容易中途放弃或者超出时间(导致打乱计划)。还有,设定的目标要尽量容易评估(否则到时候连自己也搞不清楚到底目标算不算已达到)。

先说说短期目标。短期目标的时间跨度大约在几个星期到一个季度之间。短期目标要定得比较具体,便于自己评估目标是否达成。下面举几个短期目标的例子:“在本月读完《Thinking in C++》”、“在本月熟悉Spring框架”、“在这2个月用Flex写一个五子棋游戏”……

然后说说中期目标。中期目标的时间跨度大约在几个季度到1-2年。中期目标比短期目标更抽象,且必须是短期目标的有机结合。比如有个短期目标是“本周看完《Dive into Python》”,那么对应的中期目标可以是“1年内成为熟练的Python程序员”。

最后谈谈长期目标。长期目标同样也必须和中级目标沾边,它的层次当然更高,时间跨度大约在5年以上。而且长期目标一般不会关系到具体的XX语言、XX平台等,倒是经常和职业岗位有一定的关联。比如“5-7年内成为技术总监”、“5年内成为公司产品的架构师”等。

当你把3种目标都设定好之后,就形成了个人发展计划。既然是计划,你就得在每一个阶段结束时自己总结一下,评估一下该目标的完成情况好不好,有什么收获、有什么经验教训。必要的话还需对尚未开始的后续目标进行一下调整。定期回顾还有一个好处,就是能获得一种满足感,从而有利于你坚持完整个计划。

四、最正确的事

“做正确的事”的关键在于评估你准备做的每件事情的权重。权重来源于这件事情对于达成你的目标(我们在本系列上一篇帖子“设定个人发展目标和计划”已经谈到如何设定自己的目标)是否有帮助,帮助有多大。帮助越大,则权重越大。然后,每天醒来,你都要把当天准备做的事情根据权重排好优先级,然后严格按照优先级顺序执行。

如果工作中偶尔碰上看起来紧急的突发事情,也不要轻易改变原先安排的计划表,而要先冷静评估一下这个紧急的事情的权重。只有属于紧急且权重高(重要)的突发事件,你才可以调整计划,把这件突发事情加入其中。关于重要性和紧急性的平衡与处理,在杜拉克的名著“卓有成效的管理者”中有详细的介绍,大伙儿如果有兴趣可以去看看。