前几天看了一篇文章,现在总结一下。
你知道“有能力”和“熟练”的区别吗?
这听起来像一个具有欺骗性的问题,因为两个单词看上去似乎说的是一件事情,但是两者之间的微妙差异却正是关键点。
“有能力”的含义是使用足够的经验和知识将事情做完;“熟练”意味着能够清楚认识到选择某种方式做事的原因以及此种做事的方式是否符合大的框架。换句话说,一个能够熟练地做某件事情的人总是一个有能力做好这件事情的人,但反过来说可能就不成立了。
我们首先将“能力”定义为“我知道如何做事”–这是一个过于简化的说法,但用来表达我们的意思已经足够了。公平地说,不管你从事何种职业,知道如何做事都是相当重要的。如果你是个程序员,那么你的工作中的很大一部分是学习如何做事:
- 我需要知道如何使用版本控制
- 我需要知道如何使用统一的代码风格
- 我需要知道如何建立一个持续集成服务器
- 我需要知道如何查询数据库
- 我需要知道如何实现一个响应式布局
- 我需要知道如何使用一个服务的API
不要误会我的意思:知道如何做事以及与此相关的许多事是很重要的.不要停止在“知道如何做事”的状态上努力,否则你很快会发现自己失业了。
但是在通向专家道路上处于中间位置的程序员许多都在某个层次止步不前(许多人甚至一辈子都停留在此处):处于该层次的人会认为可以用所做事情的多少来区别新手和专家。这种想法只对了一半,且该想法还强调了较为次要的部分。
有能力和熟练之间的差距可以解释为什么有许多人都在高层次的编程思想之上挣扎,如设计模式。
一个有能力的程序员能够熟读备忘录模式,并且理解如何实现它。他们甚至能够识别出备忘录模式适用于何种应用场景(可能在GUI里实现一个undo操作)。但是由于他们不知道更大范围的框架性的东西,他们可能还是会错误地应用这种设计模式。
相比之下,一个熟练的程序员能够知道备忘录模式什么时候会失效(例如,如果正在拷贝大量数据,或生成大量副本时)。他们能够考虑一些替代方案与备忘录模式进行对比,从而考虑备忘录模式是否是最优的实现方案。他们也理解备忘录模式背后的基本设计思想,从而创造出一种能够更好的适应特定应用场景的定制化解决方案。