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

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

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




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




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


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


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


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


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

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




有能力和熟练之间的差距




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


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


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


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




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




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


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


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


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


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


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


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




结论




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


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


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

如何成为一个牛逼的C/C++程序员? (仔细阅读)

这个题目的噱头太大,要真的写起来, 足够写一本书了。   本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路。   每个人的情况不一样,我下面的描述可能并不适合每...
  • u010229420
  • u010229420
  • 2016年08月18日 14:34
  • 3131

作为程序员,其实你并没真正努力(一)

IT技术发展迅猛,新技术层出不穷,具有良好的学习能力,并及时获取新知识,成为程序员职业发展的核心竞争力。本文作者结合多年学习经验总结出提高程序员学习能力的三个要点,即要善于读书、要高效学习、要有好心态...
  • zhangchaoq
  • zhangchaoq
  • 2015年06月12日 00:09
  • 2154

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

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

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

原文链接:点击打开链接 如果想成为一名程序员,只需要学习一门语言就算踏入了程序员的行列,被称为程序员。但如果要成为一名优秀的程序员,就需要不断地学习掌握并将之应用到工作中。 周而复始...
  • qq_40954115
  • qq_40954115
  • 2018年01月03日 15:32
  • 10

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

如果想成为一名程序员,只需要学习一门语言就算踏入了程序员的行列,被称为程序员。但如果要成为一名优秀的程序员,就需要不断地学习掌握并将之应用到工作中。 周而复始,而在这个过程中有一部分人说程序员,写代码...
  • weixin_40581617
  • weixin_40581617
  • 2018年01月03日 15:22
  • 13

学历对一个程序员来说真的那么重要吗? googleHr 表示 更看重解决问题能力

你拥有傲人的电脑/互联网技术,作为荣誉学生毕业于世界一流的名校,能对面试中的各种刁钻问题对答如流。但这一切,还不一定能保证你获得 Google 的 Offer。 根据 CNN 对 Google ...
  • java_goodstudy
  • java_goodstudy
  • 2016年10月02日 12:16
  • 1561

一个熟练程序员所具备的特质-1

一个熟练程序员所具备的特征你知道“有能力”和“熟练”的区别吗?有能力”的含义是使用足够的经验和知识将事情做完;“熟练”意味着能够清楚认识到选择某种方式做事的原因以及此种做事的方式是否符合大的框架。换句...
  • u012365926
  • u012365926
  • 2016年08月25日 18:29
  • 287

一个熟练程序员所具备的特质-2

熟练的含义在于整体思维的灵活性。模式、原则、习惯用法、库、语言特性–这些都是工具。但一个真正的熟练程序员会使工具适应工作,而不是让工作适应工具。许多人从没有特别专注于开发的熟练度,因为坦率地讲,以一个...
  • u012365926
  • u012365926
  • 2016年08月27日 17:11
  • 295

认知和声产、实习报告通过实习,来熟练和掌握电气专业及相关学科知识,并初步熟悉各种电子元器件,理论联系实际,将课堂上所学的会计知识与现实的操作相结合,及时在模拟实习中发现自己对所学知识掌握的不足之处,并及时改正。培养自己独立思考、主动发现问题和解决问题的自学能力,同时形成对我们信息工程专业的一个整体概念。

  • 2009年05月27日 19:45
  • 30KB
  • 下载

一个及格的java程序员应该有这个能力

英文的玩笑,用中文看有点不太容易懂。它的意思就是一个关于 Python(蟒蛇)经验只有三周前去过一次动物园的程序员,只要他足够的好,他也可以用一周的时间,基于 Python/Django 完成一个在线...
  • u012402926
  • u012402926
  • 2016年03月14日 15:06
  • 278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个“熟练”程序员和一个“有能力”程序员谁更牛?
举报原因:
原因补充:

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