我不是一个伟大的程序员,我只是一个具有良好习惯的程序员。 ―Kent Beck
只有足够强的“个人品牌意识”,才能帮助程序员养成良好的习惯。--鲁迅
看似只有kent beck这种不世出的程序员才讲究“个人品牌”,其实作为劳苦大众码农更应该讲究。
虽然我们不及kent beck那样有广泛的影响力,但是在有限的团队中被认可,也绝对是对个人的有力激励;继而成为一个正向约束,使自己不断精进。相反,一个不具备“个人品牌意识”的程序员,“写三天,修三天,推到重来又三天”,很快会给人产生一种“不靠谱”的印象。这种“坏印象”通常比“好印象”更容易让人留下印象。虽然它短时间内不见的会断送你的职业生涯,但缺乏“个人品牌意识”而慢慢养成的坏习惯,对一个程序员来说,却绝对是致命的。
就在前两天,团队内一个小兄弟问我:“飞哥,我一直在努力的学习新技能,但是要学的实在太多,反而搞得自己很焦虑,我该怎么办?”。他问的很真诚,我一下子不知道如何作答。但我很肯定的告诉他:“没有捷径,只能慢慢积累”。一以贯之的坚持个人品牌,慢慢积累,量变一定会引起质变。
下面我要分享的,虽然没有太多具体可以操作的行为准则,但是通过强化一些意识,对正在快速成长的程序员绝对有益(应该可以笼统的说:个人品牌意识是目的,以下几个意识是手段)。同时,我认为劳苦大众码农往往是抱团成事,一个团队只有拥有了同样的意识,才能拧成一股绳,形成合力,提高生产效率。
第一:产品经理意识
这个是很大一部分程序员所不具备的,甚至是以“技术”自我标榜的程序员所排斥的。但其实,除了极少数的程序员能以技术立身,绝大多数程序员都是在做业务、做项目。我们强调这个意识,是因为“产品经理”在一个项目中承担了至关重要的角色。业务逻辑和流程设计上的合理性,比技术实现要重要的多的多。一个项目要做什么、什么能做、什么不能做,没有技术背景的产品经理,往往把握不到位。此时,如果研发唯“产品经理的需求”是从,不做任何质疑和建议,那很有可能陷入修来修去的泥潭,处于被动地位。
第二:设计先行意识
年轻的程序员较多缺乏这个意识。对于他们,往往是在“时间紧、任务重”的感觉中度过;本身设计能力的欠缺,又进一步加剧了这个意识的缺失。于是,他们一边写,一边想,一边copy,一边粘贴。这种情况,我建议年轻的程序员一定要有“静气”,不要慌着动手;也一定要矫正设计能力慢慢会有的错误认知——任何能力都不是无中生有的,都需要有机会不断去尝试去锻炼。试着在反复梳理需求的过程中,拆解、汇总,再学习几种常用的UML建模工具,我相信对于编码的质量和效率都会有很大帮助。
第三:主动承担意识
这个意识分两个场景来具体说明。首先是跨团队协作的场景,接口的定义不见的一定是服务端提供,如果服务端遮遮掩掩不想提供,我们大可主动站出来,掌握先机,抢占主动权。其次是在接口报文定义上,能不让客户端传递的字段,尽量在接口服务里自己封装,因为如果服务端能获取到的参数,你让客户端传值进来,你往往需要进行校验,工作一点都不会少。当然,主动承担不仅仅限于我列举的这两个场景。这种意识的养成,会很大程度上润和协作关系,提升自己的品牌影响力。
第四:防御编程意识
这也是年轻程序员容易缺乏的意识。随着工作经验的增加,你会越来越发现,实现文档中明文规定的需求,只是一个合格程序员的最基本素质;那些文档之外的工作,才能见真章。比如异常情况的考量,日志的合理记录,甚至必要的一些审计功能的开发。因为这些工作不但能提高程序的健壮性,更能在发生生产问题时,提供一手的资料,帮助我们快速定位问题、恢复生产。
第五:穷其究竟意识
我们在开发、运维工作中往往会碰到一些不常见的问题,我们当然可以换一种实现方式来解决。但是,如果我们能通过阅读源码、查阅资料、知其所以然,我相信这种成就感一定更强烈,而且这个过程往往会带来意想不到的收获。还有就是面对一些常见的问题,不要每每都用“粗心、大意”搪塞过去,要认真复盘,要多问自己几个为什么,要多想想以后如何避免。不然,这种低级错误就像一个定时炸弹,会让你身边的人在“靠谱”后面打上问号。
以上是我自己的一点浅见,也是我这几年在团队中坚持传递的经验。最后,希望大家都能强化这些意识,树立自己的“个人品牌”,日益精进。