一个优秀的程序员应该具备哪些技能和修养?

  • 发布时间:2017-10-31
  • 作者:优才君

 

一、首先是“快速学习能力”。


  这里不是说一定要去快速去学习各种各样的新技术,而是说当有需要时,能够快速的学习。很多人开始学新的技术和技能时,一开始就一头扎进去写样例、写Demo、看源码,我认为这不是好的方法,而且比较耗费时间,收效也不明显。


  我给大家分享一个新方法。我在学习新的技术的时候,都是按照这样的步骤去了解的:


    1.这个技术能解决什么问题。


    2.比较适合在哪些场景应用。


    3.这个技术跟我已经掌握的哪个知识或技能类似,有什么差别、有什么特点、有什么优点和缺点。


    4.了解前面的问题后,我才会开始去尝试写写Demo,或者更进一步去应用。


    5.觉得有兴趣或者其实现很牛逼的情况下,我就去研究一下原理机制,看看源码等。


  其次是“良好的理解能力”。


  程序员需要将产品人员或者用户用自然语言表述的需求翻译成程序语言。自然语言有一个特点就是通俗但不严谨,而程序语言必须是非常严谨的。如果对产品人员或者用户提出的需求没有很好的理解,即使程序语言写的再漂亮,技巧再高,最后做出来也是一个不符合要求的产品。


  记得有一个关于“美女”的笑话:人听到“美女”后的反应是想到“天使面孔魔鬼身材童颜巨乳”,而猪听到“美女”后的反应是“乌克兰大白猪”,猫听到“美女”后的反应是“有着金色光滑皮毛的波斯猫”。如果程序员给了猫一个“天使面孔魔鬼身材童颜巨乳”的美女,猫一定会觉得很难看。


二、是“持续不断的学习”。


  软件开发领域设计的知识和技能太多了。从广度上来说,有操作系统、数据库、编程语言、网络、设计等,编程语言又有几十种;从深度上来说,操作系统、数据库、编程语言等都是可以不断深入去学习的。无论你是从事对技能广度要求更高的业务开发,还是从事对技能深度要求更高开发专项系统,都需要不断的学习,这样才能不断的提升自己的能力。


三、“乐于分享”。


  如果单纯从个人完成工作的能力来看,可能确实也有很多程序员不爱分享但确实很厉害。但我认为真正优秀的程序员一定是除了自己优秀外,还能让其他人也变得优秀,或者能够贡献优秀的开源项目以降低别人的重复工作。分享的途径有很多种,可以给公司人员做培训,可以写博客,可以贡献开源项目等。


四、 程序员如何“挤”出时间来提升自己或在技术上提升自己?


  关键就在于一个“挤”字,其实就是“利用时间碎片”,10分钟就可以了,


  以我最近为例谈谈我现在怎么挤时间的,大家可能就明白了。


  7:40~8:00:送完小孩后到出门去地铁中间有20分钟,看《失控》一章


  08:20~09:00:地铁上带一本书,大约可以看完一章,容易看的书可以看两章


  09:30~09:50:看技术类的PDF,比如说最近看JQuery,大约可以看一章,不用担心,每天20分钟完全不会影响工作


  20:20~21:00:和早上地铁一样



  睡觉前15分钟:看15分钟书,前段时间这样花了大约2个月看完《三国演义》


  这样累积下来,我一天大约可以看2个小时书,今年上半年看了大约23本书。


五、给年轻程序员的几条建议


打造你的工具箱。


  工欲善其事,必先利其器。每个开发者都应该有一把自己的瑞士军刀,在将来漫长的职业生涯中,这些工具可以为你省下宝贵的时间,并帮助你更好的组织个人知识库。举两个例子


一套高效的开发环境


  一个信息采集器和一本笔记本


高效的开发环境。


  我们可以从编缉器谈起,这里有IDEvsTextEditor,有VimvsEmacs,有SublimevsAtom,那该如何选择呢?在做选择之前,我们先想想自己的目标。我们希望这是一个长期的投资,这款编缉器能被长期使用,在这个过程不断的打磨,使其能完全适合自己的习惯,最大化编缉效率。如果程序员是侠客,编缉器则是他手中的剑。


信息采集器和笔记本。


  前者是用来收集别人产生的信息,后者则是收集自己产生的信息。前者一个简单的例子就是浏览器的Bookmark。你需要能随时将一组有用的信息归档,并在未来的某个时刻快速找到它。后者最直观的例子则是MacOS或是iOS自带的笔记本,这里的目的是能随时随地记录你自己的想法。从本质上讲,就是你需要有一套好用的工具来做你的知识库管理(Knowledgemanagement),也可以说是你知识和思想的外部备份。我个人现在是用Evernote同时来做信息采集与笔记的。如果有一个好的流程,你也完全可以用两个工具来分别把这两件事做好。但我建议你花足够多的时间来思考如何组织你的个人知识库。