这一篇说编程学习重心的问题,这非常重要。
哥上大学那会迷上编程,去学C++,一本C++ Primer翻了四分之一,倍感艰难,于是给Bjarne Stroustrup(C++的作者)写了邮件,问如何是好。
大侠居然回了:
Focus on concepts,not syntax.
关注概念的理解,而不是语法。
我得到的最重要的建议之一。
在国内国外的团队里工作过后,我发现国内外程序员的一个重要区别是对概念本质的理解。我们看到的国外的同行往往对东西钻得深、透,而国内的同学往往停留在简单会用的程度,只看到一个概念的若干个侧面而不是全面,这就像他们在知乎点赞,大概感觉这人貌似挺厉害,貌似说得有道理,字数也比较多,赞一个,而具体说了什么,他只是瞄了几眼。而编程的智慧根植于人对概念体系的领悟,就像厉害的剑客一定知道所持兵器的长短、重量,属性,经过反复训练,习得运用之妙,存乎一心,活学活用的本事,到达人剑合一的境界。对于编程,这种本事到最后就是从业者的技术品位,以及创造性解决问题的能力。所以技术上的创新其实并不是来自于对于广大技术栈的简单搜刮,而是对于各个栈的深刻理解。
这么多年来,每当我要学新的东西,无论是看视频,在REPL里试验,还是看别人的代码,我都试图把关键概念找出来,停下来,通过消化各种不同层次,不同深度的资料,努力让他们在头脑中形成明确的理解。所有的示例,反例,训练,以及所有照猫画虎的过程,最终都是为了理解概念本身,理解它是什么,不是什么,到底是如何工作的。而示例,反例,训练的具体性,并不是学习的重点,因为项目和场景是无穷无尽的。
理解一个概念以后,代码看过去变得有层次了,更有机了,而不是简单一行行字符的简单叠加,因为那时候你看到的不是代码本身,而是读到了代码的意义,那是柳暗花明的感觉。而这个理解探索的过程,不仅教会了你技术细节在具体事例中的运用,更重要的是初步的架构能力,用技术解决问题的能力。
语法是不需要专门去学得,而是找到cheatsheet,或者直接从文档里找,所有语言的语法都是有限的,熟悉任何语言的语法,在cheatsheet和少量示例的帮助下,并不麻烦。而且有了概念的理解,你会发现语法也变得更有意义也更容易记忆了。
如果如果我说,编程学习中碰到的问题,是一片一片解决,而不是一点一点解决的,我不知道你能不能听得懂。
我认为很多人之所以觉得编程学习缺乏正反馈,太多细节的纠结,很可能是因为他们没有把注意力放在概念上,缺乏一个自我审视的过程。
- 我明白这个词是什么意思吗?
- 它的英文是什么?
- 如果让我描述它是什么,我能不能做到?
- 它不是什么,什么地方容易误解?
- 它什么原理,能找到或者写出来例子吗?
- 为什么这东西有用?什么时候它最有用?
- 这些资料看下来,好像还是不清晰,是不是因为有些概念我没有搞懂?
- 如果中文的解释不清楚,我是否该试试看英文的解释?
缺乏这个过程的结果,就是很多时候当学习者还并不知道自己不知道某个东西的时候,就草草的到了下一步,然后积累的知识漏洞越来越多,以至于要开工自己写东西了,仍然觉得一定感觉也没有。
Focus on concepts。
转自:https://zhuanlan.zhihu.com/p/24023858?refer=d-b-o-y