怎样才算得上合格的程序员

  最近同一部门另外一个项目组的一位程序员被“主动离职”了,虽然我不曾与这个程序员共事过,可是听过一两次他的内部分享,感受技术仍是挺厉害的。后来与一个消息灵通的同事聊天,才知道真正的缘由是老大以为A难以沟通,搞得其余程序、QA都怨声载道。工做这些年,身边的好多同事来了又走了,主动或被动,这不由让我思考什么样的程序员算得上合格的程序员。html

  虽然你们都自称“码农”、“IT民工”,但我相信,这仅仅是自嘲或者自黑,大多数程序员应该仍是承认本身的这个职业的,固然,我算不上一个优秀的程序员,由于我都未曾在开源社区贡献过代码、也不精通白板算法、对技术也不狂热、不geek。个人目标是作一个合格的程序员:把本职工做作好,对得起本身的薪水,在生活与工做平衡,996什么的我是难以接受的。前端

  本文地址:http://www.cnblogs.com/xybaby/p/7531620.htmlpython

  对于程序员而言,技术过关固然是很是重要的,这是硬实力。然而只会技术也是不行的,毕竟大多数的程序员仍是要与人打交道,软实力也是不可或缺的。怎样才能算合格,我认为有如下几点:程序员

 

扎实的基础redis

  计算机领域是一个快速更新换代的领域,每隔一段时间都会有新的语言、框架、思想产生,追随每个新技术很累。但仔细想一想,事实上并无那么多新东西。不少新东西只不过是已有技术的封装、或者借鉴的其余领域的技术。好比缓存数据库redis、memcached,其基本思想不就是操做系统中的缓存吗;分布式存储中的分片与复制集,不就是文件系统中RAID的扩展吗;还有Google的MapReduce框架,不就是来源于函数式编程语言的map reduce吗。掌握好计算机基础知识,可以更本质的看待新技术。算法

 

善用工具数据库

  磨刀不误砍柴工,打造好本身的工具集很是重要。编程

  开发中会用到大量的工具,无论是编辑器、调试工具仍是监控工具。你们都喜欢争论哪一个IDE更好,然而这并无多大意义,关键在于可以熟练的使用本身喜欢的工具,掌握各类快捷键,高度自定义,这样可以大大提升工做效率。并且对于平常中重复的操做,最好脚本自动化,这里推荐如下python,写小工具仍是很快的。后端

  另外,强调程序员必备的两个工具,那就是浏览器和VPN。后者你们都懂的,很少说,主要是有了后者才能发挥浏览器的威力。浏览器你们每天都在用,可是如何高效的使用,好比在指定网站搜索、经过标题、url过滤、选择合适的关键字 仍是值得研究一下,对于程序员,要使用好浏览器,那还得具有下一个能力:英语浏览器

 

过得去的英语

  不得不认可,在软件创新领域,国内仍是落后于国外的,新的技术、一手的资料都是英文的。当新技术被普遍应用以前,咱们在百度搜到翻译要么是machine translated,要么错误百出。看翻译的最大问题取决于翻译者自己的水平,即便翻译水平都很高,但同一个单次每每有不一样的翻译,致使看文章的时候会有困惑,最好仍是直接看英文原文。大多数原文,除去专业词汇、仍是比较好理解的,并且,我发现不少牛逼的项目,都有很是通俗易懂的文档。

 

良好的编码习惯

  代码是写给机器执行的,同时也是给人阅读与维护的。维护者多是别人、也多是几个月后的样子。良好的代码规范,必要的、清晰的注释可让本身少被问候祖宗十八代。

  

  对于代码风格,网上争议也不少,最重要的是保持项目内的统一。作为技术负责人,必定要在项目开启之初就顶号规范,当大量代码被堆出来以后就很难统一了,而后作好新人的review。

 

保持学习

   程序员这个职业,相比其余职业,可能仍是要年轻许多。特别是在国内,最老的一批程序员好多都转管理了,再过10年20年,咱们会怎么样呢,没人知道。前段时间华为35岁程序员被离职的事情,给咱们敲响了警钟,悲哀之余,只有尽力学习了,拼不过体力就拼能力与经验吧

  学习这个事情提及来就复杂了,我以为两点很重要:基础、学以至用。

 

独立思考

  合格的程序员解决的是问题,而不是实现某个解决方案。产品经理(特别是知道一点技术的产品经理)的某个需求可能只是某个问题的解决方案,他认为这个方法能够解决他的问题,因而把解决方案当成了需求,而不是真正的问题。程序员应该主动沟通,多问几个为何,了解真正的问题,也许能有更好的解决方案。

  以前就有这么个例子,给到的需求:为每个用户(用户有惟一的id标示)生成一个惟一的邀请码,同时也要为将来一段时间可能增长的用户预生成邀请码,保存到数据库。而真正的需求是老用户分享本身的邀请码,若是新用户使用了该邀请码,则老用户得到相应奖励。而我提出的方案很简单,直接用户的惟一id生成可逆的邀请码,这样就根本无无需数据库存储。

  

  产品经理常常改需求这是程序员最头疼的事情,做为程序员应该也站在PM的角度思考,帮助PM分析出本质的需求,这也许能够减小需求的变动。固然,前提是得干一行爱一行,须要对业务有必定的了解。

 

先思考后行动

  写代码的时候先想清楚了再下笔,而不是先写出一堆代码,而后在开始修bug。

  休bug的时候,多看看上下文,搞明白为何出bug,修改这个bug可能带来的影响,而后再修改。反面教材有两种:第一种随便改改就把代码改好了,但本身内心并不清楚为何这样修改就修好了,撞运气,也许还有其余一样的bug也发现不了。另外一种就是,头痛医头脚痛医脚,不仔细评估修改的影响,这样每每会引入新的问题。

  

  程序员成长的一个办法就是修bug,修别人用不了的bug,但前提是搞清楚bug的原因,这样才能避免相似的错误,有所收获。
 

顺畅沟通

  不是巧如舌簧、也不是忽悠达人。须要的只是耐心倾听,而后清晰表达本身的意见。

  如今的软件开发,已经再也不是单打独斗的年代,大多数的软件、产品都须要多人、多部门的协做。而交流、沟通是很是耗时耗力的。沟通以前,先想好目标,组织好语言,尽可能不要发散、不要跑题,对事不对人。对于重要的事情,保留沟通记录,最好有邮件,省得说不清。

   沟通是门复杂的艺术,最基本是听明白、说清楚。

 

管理好本身的暴脾气

  

  做为 一个程序员,要被PM怼、要被交互怼、要被QA怼,再变态的需求均可能有,QA给你提的BUG可能也不属于你。并且,还有猪同样的队友(本身在别人眼里未尝不是这样呢)和下属。无论谁是谁非,发脾气、吵架都一点用没有,吵完仍是得解决问题。calm down,有怒火也得等个几秒再发做,也许这几秒理智思考一下,就能解决问题。

 

负责任

  能力(技术能力)与责任心谁更重要呢,都重要。若是一个新人有培养的潜力,那么责任心就更重要。两我的,第一个技术能力很强,但责任心不好,对项目的事情也不上心;第二个能力差些,但责任心强,是本身的问题必定负责到底,即便本身不能解决也能主动询求帮助。我以为前者对项目的危害更大,特别是项目紧要时期,由于能力强的人通常负责的是比较复杂、困难的功能,别人上手也须要时间,这个时候若是摞担子,bug也不修,那么就很为难了。

  不负责任的典型表现就是扯皮、甩锅:这不是个人bug、不关个人事。有协做的地方更容易出现问题,好比前端与后端、各个部门之间。若是不清楚到时是谁的问题,不妨主动一点,帮助排查。

 

不要老是说不会

  做为程序员,总有一些工做是之前没有作过的,也许来自产品人员的需求,也许来自项目自发的优化。我见过一些程序员,在面临未知的问题、挑战时,老是习惯于说:不会、没办法、不可能,这样的程序员就算不上合格的程序员。事实上,这样的程序员是给本身过早地留好退路,事实上问题可能并无想象得那么困难,也许通过一番探索就能解决。若是习惯于对未知说不,那么在别人看来就是能力不行,影响我的形象与声誉,并且老是待在本身的温馨区也不利于自我成长。

  固然,也不是说要盲目自信,急于拍胸脯保证必定能解决,这样每每是坑本身。

  因此,面对新的需求,谨慎对待,既不轻易否决也不随意承诺,而是再理清须要先去研究一下,评估是否能完成,须要的资源与时间。

 

  暂时就想到这么多,固然我也还不达标,好比容易控制不住本身的怒火,与君共勉吧