一个“熟练”程序员和一个“有能力”程序员谁更牛?

转载 2018年01月01日 00:00:00

一个“熟练的”程序员与一个“有能力”的程序员哪个更厉害一些?




“有能力”和“熟练的概念




“有能力”的含义是使用足够的经验和知识将事情做完。


“熟练”意味着能够清楚认识到选择某种方式做事的原因以及此种做事的方式是否符合大的框架。


换句话说,一个能够熟练地做某件事情的人总是一个有能力做好这件事情的人,但反过来说可能就不成立了。


我们首先将“能力”定义为“我知道如何做事”。公平地说,不管你从事何种职业,知道如何做事都是相当重要的。如果你是个程序员,那么你的工作中的很大一部分是学习如何做事。知道如何做事虽然很重要,但是不要只为“知道如何做事”努力,否则你会很快发现自己失业了。


要知道在通向专家道路上,处于中间位置的程序员,都在某个层次止步不前(许多人甚至一辈子都停留在此处):这些上流不属于上流,下流不属于下流的程序员会认为可以用所做事情的多少来区别新手和专家。他们的这种想法其实只对了一半!

此处就引出了“熟练”的含义。“熟练”的本质是关于“为什么采用这种方式做事情”——这是理解一个难题的各个部分与理解各个部分如何构成一个整体的难题的不同之处。




有能力和熟练之间的差距




举个栗子,有能力和熟练之间的差距可以解释为什么有许多人都在高层次的编程思想之上挣扎,如设计模式。


一个有能力的程序员能够熟读备忘录模式,并且理解如何实现它。他们甚至能够识别出备忘录模式适用于何种应用场景(可能在GUI里实现一个undo操作)。但是由于他们不知道更大范围的框架性的东西,他们可能还是会错误地应用这种设计模式。


相比之下,一个熟练的程序员能够知道备忘录模式什么时候会失效(例如,如果正在拷贝大量数据,或生成大量副本时)。他们能够考虑一些替代方案与备忘录模式进行对比,从而考虑备忘录模式是否是最优的实现方案。他们也理解备忘录模式背后的基本设计思想,从而创造出一种能够更好的适应特定应用场景的定制化解决方案。


更重要的是,一个熟练的程序员总是能够识别出讨论设计模式的合适时机。就像向一个新手解释代码库的概念,一个熟练的开发者可能会重点说明代码做了什么,而不是抛出一堆设计模式的名字,之后告诉一个菜鸟“读完《Gang of Four》之前不要问我任何问题”。




熟练的含义在于整体思维的灵活性




模式、原则、惯用法、库、语言特性,这些都是工具。但一个真正的熟练程序员会使工具适应工作,而不是让工作适应工具。


许多人从没有特别专注于开发的熟练度,因为坦率地讲,以一个有能力者的角度进行开发更直截了当。但是如果你想要改变自己做事情的角度,并且需要一些帮助以便更好的开始,这里有一些建议可以尝试:


解释你想要以某种方式做某件事的原因,但是不要说是因为“最佳实践”或者是社区指南。仅仅就当前需要解决的问题内容讨论解决方法的利弊。


学更少更有价值的事情,之后尝试着将所学到的知识应用到不同地方,观察所学知识在哪里起作用,哪里没效果。使用失败的经验来发现自己真正所需的新工具,并添加到自己的技能库中。寻找那些其他人“打破规则”并获得成功的例子。偶尔也打破你自己的规则,看看这样做对你是有伤害、有帮助还是没有起到任何作用。


挖掘事情的本源而不是只知道大概。这会耗费更多精力,但能帮助我们找出某项技术的基础和边界,同时我们也会受到核心思想的启发而产生我们自己的想法。


将自己置于某个自己最不熟悉的工程中,然后试着在不依赖自己现有的工作流程、**惯和规则的条件下找到解决方法。询问其他人做事情的原因,但不接受教条式的理由。通过询问其他人,能够试着站在其他人的角度考虑事情。这样做有很大的价值,因为这能够让你认识到他们以自己熟悉的方式思考出的想法的优势和劣势。


选取一小部分自己能够使用但不精通的技能,试着将对这些技能的掌握程度从“有能力”变为极为熟练一致痴迷的程度。达到对整个知识体系中一小部分的掌握,比你所知的任何人都要高的程度。一旦你达到那种境界,再去检验那些很深很专一的知识的优缺点。




结论




作为一名程序员,要一直探究不熟悉、不同角度、不精通的技术。只有这样你才能在“有能力”的基础上更上一层,才能脱离仅仅是“知道某些事情”的程度 。


最重要的是:一旦你开始专注于以“熟练”为目标,有很大机会能够找到一条真正通往“精通”的道路。


公众号内回复“1”带你进粉丝群!

优秀程序员应该具备的12种能力

1. 编程语言能力   不用多说,作为合格的计算机程序员,精通一门语言是必须的。这种精通,不是说看了一本编程宝典,抄了几个程序就能说精通的,要靠长时间的积累。   2.编码能力   ...
  • diannet
  • diannet
  • 2015年02月16日 09:39
  • 1866

如何提升你的能力?给年轻程序员的几条建议

一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验。我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发。 我工作过的公司有4家,NVIDIA, ...
  • nowadaysall
  • nowadaysall
  • 2015年06月06日 11:19
  • 1382

合格程序员应该具备的12种能力

毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的 12种能力。中国软件行业的崛起,靠的是合格的程序员。任何...
  • u011075946
  • u011075946
  • 2014年10月17日 09:48
  • 1713

怎样评估一个程序员?

技术能力的核心是什么?解决技术问题、达成业务需求的能力?要达到这个目的从哪些方面来衡量判断,下面做一简要分析: 1、计算机理论基础:计算机理论技术原理:现在大多数视频教程培养出来的新手,这个东...
  • dipolar
  • dipolar
  • 2016年07月20日 12:57
  • 1354

合格程序员应具备的专业技能

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内...
  • Yu_Yangjun
  • Yu_Yangjun
  • 2016年09月04日 11:44
  • 1631

谈谈程序员解决问题的能力

谈谈程序员解决问题的能力 解决问题的能力,程序员立业之本。 一般写文章我不会特意去写,而是有感而发的时候刚好又有时间我就会去写写文字。本想推些技术文章的,但写技术文章又很耗时,写得太浅显又没有技术...
  • wwj_748
  • wwj_748
  • 2017年03月25日 12:36
  • 5675

大牛程序员经验:什么才是程序员的核心竞争力?

学习能力,尤其是自学能力,你啥时看到那些有名的程序高手在论坛上问“学习 XX 该看什么书,如何快速学习 XXX,学习 XXX 有什么代码推荐”之类的问题,他们想学什么很快就能自己找到相关资料。这个行业...
  • jshin
  • jshin
  • 2015年02月21日 21:08
  • 678

程序员的奋斗史(七)——沟通交流、表达能力的重要性

一个优秀的IT综合型人才不仅表现在技术方面,其他的素质也很重要。本文就从沟通交流、表达能力说起。          你明白和你能把别人讲明白是两码事。很多时候自己也有这种感觉,自己对...
  • Angiexia
  • Angiexia
  • 2014年03月03日 18:10
  • 1779

程序员能力矩阵 — 敢测吗?看自己在哪个档次

今天看到一个很有意思的程序员能力界定,用大家熟知的复杂度量级进行界定,非常形象也十分详细,不知道是哪位大牛绘制出来的,大家看看自己分别在哪些单元格里呢?反正我有种不忍直视的感觉…… 注意:每个层次的知...
  • Augusdi
  • Augusdi
  • 2014年06月10日 15:46
  • 4531

也说说几种让程序员快速提高能力的方法

很多同学经常抱怨自己为什么做了多年程序员工资还是不见涨,别的人工作时间比自己短却能当上技术主管,为什么自己辛苦工作多年还是一个底层员工。那么作为将来的技术主管,技术总监,甚至创业公司的CTO,以下几个...
  • HornedReaper1988
  • HornedReaper1988
  • 2015年02月02日 04:20
  • 3317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个“熟练”程序员和一个“有能力”程序员谁更牛?
举报原因:
原因补充:

(最多只允许输入30个字)