Great introduction: characteristics of the master programmer-programmer-IT information
Do you know what is the difference between a competent and proficient it?
This sounds like a difficult question to answer, because they seem to mean the same thing. But subtle distinction between them is essential.
Competence refers to the sufficient experience and knowledge to get the job done; master involved know why you want to use to do things in a certain way, and how it fits into the big picture. In other words, the master-practitioner is always capable, but the converse may not be tenable.
The Dreyfus Model of Skill Acquisition, covers the topic in great detail. Although the title sounds a bit academic, but papers are very approachable.
I suggest reading the original resource material to facilitate better throughout the course from beginner to expert. In this article, I focus on most software developers will encounter bottlenecks: gullies that spans from up to the master .
So, first of all, we want to know is, where qualified is defined as "I know what I'm supposed to do"-Although an oversimplification, but it is very close to our needs. To be fair, no matter what career you work in, it is very important to know how to do . If you are a programmer, and an important part of learning how to do your work:
? I need to know how to use version control
? I need to know how to use a consistent coding style
? I need to know how to set up a continuous integration server
I need to know how to query the database
? I need to know how to implement a responsive layouts
? I need to know how to use the service API
Don't get me wrong I mean: know what to do, is very important. Do not stop to learn how to do it, otherwise, you will soon find yourself losing the job .
However, programmers tend to be stuck in between the two (many repercussions), but they were stuck where it was thought to be beginner and differences between experts, can be used to measure how much you know. There was only half right, and it emphasizes is not half so important.
This is the master source. And master is the essence of "why do you want to do things in a certain way"– is understanding the problem separately for each part and understand the differences between part is how it fits into the whole.
Competent and proficient in the gap between may explain why so many people want to climb the high level programming, such as design patterns.
A competent programmer can of course read the Memento Pattern and understanding of how to achieve it. They may even be able to determine the scene mode can be applied (perhaps implementation of undo actions in the GUI). However, if there is no more about the big picture, they can still be applying inappropriate models.
By contrast, proficient programmers are able to determine when the Memento Pattern fails (for example, you wish to copy large amounts of data, or when you want to have a large copy of). They may know some alternatives to consider, when the model is not a perfect match. They also have some idea of how using basic concepts behind Memento, and then apply these ideas to create a custom solution that is more suitable for a particular use case.
More important is that the master programmer to identify the correct design pattern and error -if building a proof of concept features, proper code design issues that could become irrelevant. If explained to beginners code library, master developer may insist on focusing on what code is actually doing instead thrown naming pattern and tells novice "before asking me any questions, to read of the Gang of Four."
Master flexibility also means that there is a whole thought .
Patterns, principles, styles, language capabilities-these are tools. However, a true proficient programmers make tools to match, rather than job matching tools .
Many people never specifically focused on developing proficiency in ability, because, frankly, competence is more direct. However, if you want to change your focus and get some help to climb a new journey, you may wish to try some of these:
? Explain why you want to do things in a certain way cause reasoning, does not rely on common "best practices" or Community guidelines. Simply you discusses the pros and cons in the context of the current problems to be solved.
? Know less, learn more. And then try to be applied in different contexts, see where they are effective, where is not valid. From the failure to find an opportunity to search for new tools, tool to help broaden your skill set, but only when you have established a clear requirement.
? Look for other people "break the rules" and examples of success. Occasional broke its own rules and see what is going to hurt you, helping you, still no change.
? Explore the basic resources, rather than just reading the summary. This requires more time and effort, but can help you figure out the basis and technical limits, but also give you a chance to generate new ideas inspired by the core principles.
? Delving into a project that you are not familiar with, and try not to rely on memory, routines, habits, and rules, and find your own way of doing things.
? Ask others to explain why they want to do things, but don't just accept the dogmatic reasoning. Require examples and ask contextual background, so that you can try to put yourself in thought. Doing this are very valuable because you can see the strengths and weaknesses of their natural habit.
? Selecting a few specific you are good at but not proficient in skills and ability to develop up to the extreme, almost obsessive degree. Once you reach the top, check the pros and cons of deep and highly specialized knowledge.
On the master, one step at a time, have a long way to go. You need exceptional level of competence in order to "understand and will" stand out -but even if it is loose know "how to do the right thing at the right time" will take you very far.
Pertain to the essence is: once you start focusing on proficiency, then you have a good chance of eventually will find the right path to solve the mystery .
大神攻略:精通型
程序员的特点 -
程序员 - IT资讯
你知道有能力胜任和精通之间的区别是什么吗?
这听起来像一个很难回答的问题,因为这两者似乎意味着同样的事情。但它们之间的微妙区别至关重要。
有能力胜任是指有足够的经验和知识来完成各项工作;精通涉及知道为什么你要用某种方式来做事情,以及如何融入到大局中。换句话说,精通型从业者总是有能力胜任,但反之可能不成立。
《Dreyfus Model of Skill Acquisition》非常详细地涵盖了这个主题。虽然标题听起来有点学术化,但是论文非常平易近人。
我建议阅读原始资源材料以便于能更好地纵观从初学者到专家的历程。在这篇文章中,我将重点放在大多数软件开发人员都会碰到的瓶颈:跨越从胜任到精通的沟壑。
因此,首先,我们要知道的是,这里胜任的工作定义是“我知道该怎么做”——虽然过于简化,但非常贴合我们的需要。公平地说,不管你工作在什么样的职业,知道怎么做是非常重要的。如果你是一个程序员,学习该怎么做是你工作的重要部分:
• 我需要知道如何使用版本控制
• 我需要知道如何使用一种一致的编码风格
• 我需要知道如何建立一个持续集成服务器
• 我需要知道如何查询数据库
• 我需要知道如何实现响应式布局
• 我需要知道如何使用服务API
不要误会我的意思:知道怎么做,是非常重要的。不要停止去学习怎么做,否则,你很快就会发现自己会失去这份工作。
但是,处于两者之间的程序员往往会被卡住(很多因此而裹足不前),而他们被卡住的地方被认为是初学者和专家之间的差别,可以用来衡量你知道多少东西。这里只有一半是正确的,并且它强调的是不那么重要了的一半。
这正是精通的来源。并且精通的实质是“为什么你要用某种方式做事”—— 是单独理解问题的每个部件与理解部分是如何融入整体之间的差异。
胜任和精通之间的差距可以解释为什么如此多的人想要攀登高层次的编程思想,例如设计模式。
一个有能力胜任的程序员当然可以阅读Memento Pattern并理解如何去实现它。他们或许甚至能够确定可以应用模式的场景(可能在GUI中实施撤消操作)。但是,如果没有更多地了解大局,他们仍可能会应用不适当的模式。
相比之下,精通型程序员则能够确定何时Memento Pattern失败(例如,在你要复制大量数据,或要有大量拷贝量的时候)。他们或许会知道一些可考虑的替代方案,在模式并非完美匹配的时候。他们还对如何在Memento背后采用基本概念有一些想法,然后应用这些想法以创建一个自定义更适合特定用例的解决方案。
更为重要的是,精通型程序员能够识别正确和错误的设计模式 —— 如果建设概念验证功能,适当代码设计的问题可能就变得无关紧要。如果向初学者解释代码库,精通型开发者可能会坚持着重于代码实际上是做什么的,而不会抛出命名模式,并告诉新手“在问我任何问题之前,先去阅读《Gang of Four》”。
所以精通还意味着有整体思维的灵活性。
模式,原则,风格,库,语言功能 —— 这些都是工具。但是,一个真正的精通型程序员会让工具来匹配工作,而不是工作匹配工具。
许多人从来没有专门专注于发展精通能力,因为坦率地说,胜任能力更直接。但是,如果你想要改变重点并得到一些帮助来攀登一段新的历程,那么不妨试试这些:
• 解释为什么你想要用某种方式做事的原因推理,不依赖于通用的“最佳做法”或社区准则。单单只在你要解决的当前问题的背景下讨论利弊。
• 了解的东西越少,了解得越深。然后尝试在不同的上下文中加以应用,看看它们在哪里有效,在哪里无效。从失败中寻找机会来寻求新的工具,可以帮助拓宽你的技能集的工具,但只在你已经确立了明确要求的时候。
• 寻找其他人“打破规则”并取得成功的范例。偶尔打破自己的一些规则,看看是会伤害你,帮助你,还是没有变化。
• 挖掘基本的资源,而不仅仅是阅读摘要。这需要更多的时间和精力,但可以帮助你弄清楚基础和技术界限,同时也给你一个机会来生成由核心原则启发的新想法。
• 深入钻研一个你不熟悉的项目,并且试着不依赖记忆套路、习惯和规则,找到你自己的做事方式。
• 要求别人解释为什么他们要这样做事,但不要只是接受教条式的推理。要求例子并询问上下文背景,以便于你可以尝试着设身处地地去想。这样做是非常有价值的,因为可以让你看到他们自然习惯中的长处和短处。
• 挑选少数特定你只是擅长但不精通的技能,然后开发胜任的能力到极致,到几乎偏执的程度。一旦你到达顶峰,检查深刻且高度专业化知识的利弊。
关于精通,一次一步,有很长的路要走。你需要超凡程度的胜任才能够在“懂和会”上脱颖而出 —— 但即使是松散的明白“如何在正确的时间做正确的事情”也会带你走得很远。
关于精华的部分是:一旦你开始注重于精通程度,那么你有很大的机会最终会发现解决谜团的正确路径。