Focus on concepts,not syntax.

这一篇说编程学习重心的问题,这非常重要。

哥上大学那会迷上编程,去学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

时间: 2024-08-02 04:02:47

Focus on concepts,not syntax.的相关文章

input的focus事件时,鼠标光标在最后

1.如果input框里面没有值,那光标肯定在最后. 2.当input里面有值时,focus事件时,光标会在最前面. 3.想要focus事件时,光标在最后,可以获得焦点后重新把值清空复制粘帖一下 <input type="text" value="input框有值,获取焦点时,鼠标在最后" /> var _val=$("input").val(); $("input").val("").focus

2014.11.26 向MySQL数据表中插入数据时,显示“syntax error”时应检查

插入语句: "insert into tablename (a,b,c,d) values(1,2,3,4)" 插入结果: a b c d 1 2 3 4 有误时,请检查: 1.名值对有没有写错: 2.代码的字符串处理有没有问题: 3.代码中的列名和表中的列名是不是一一对应的: 4.定义的列名是否跟SQL语句中的关键字重复,例如dec等.

web项目引入js包时,报syntax error on token

解决方案也很简单,下面介绍一下,解决步骤: 1.选中jQuery报错的web工程: 2.右键-->Myeclipse-->Exclude From Validation,选中: 3.继续右键Myeclipse-->Run Validation. https://www.cnblogs.com/yadongliang/p/7594470.html 原文地址:https://www.cnblogs.com/2016-cxp/p/9219068.html

CSS样式中visited,hover,active , focus这四个分别表示什么意思?

CSS伪类用于向某些选择器添加特殊的效果.CSS又名层叠样式表,所谓层叠,就是后面的样式会覆盖前面的样式,所以在样式表中,各样式排列的顺序很有讲究. :link 与 :visited 在样式文件中的顺序可以随便放置. :focus,: hover,:active这几个,如果你设置的顺序不同,会直接影响样式的显示效果. :focus -> :hover -> :active 有些人可能会困惑,为什么必须要按这样的顺序,而不能打乱呢? 其实他们每一个选择器都代表一个含义. :link代表为访问链接

多窗体,菜单工具栏

多窗体 主窗体不关程序无法退出. 主要有4点 1.哪个是主窗体 Form2 f2 = new Form2(); f2.Show(); this.Hide(): 打开form2窗口,隐藏form1窗口 问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了 构造函数传值,将窗体传到另一个窗体中去 2. 2.窗体只能打开一个 创建一个全局的泛型集合,为了放置全部打开的窗体1.在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了 bool

WinForm设置控件焦点focus

winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winform的Activated事件 在Form的Activated事件中添加textBox1.Focus(), 即可获得焦点. private void Form1_Activated(object sender, EventArgs e) { textBox1.Focus(); } /* 何问起 hove

$( ).focus()与$( )[0].focus()区别

$( #id).focus()与$( #id)[0].focus()没有区别,因为id必须是唯一的.如果同一页面出现多个相同的ID(这是不符合w3c规范的),$(#id)也只会拿到第一个该ID,后面的无视掉,结果和$(#id)[0]一样. 同理,因为可以有多个name$('[name="Acc_account"]')[0].focus();和$('[name="Acc_account"]').focus()就有区别

对于指定区块div,如何区分区块内的点击 和 区块外的点击?

需求:对于区块div内点击事件, 需要展示区块内的附属操作区块,对于区块外的点击, 需要将前面说的附属操作区块隐藏掉. 分析:对于一般的HTML控件,有标准的js事件接口, focus和blur,来实现类似效果, 在focus中添加显示附属控件操作, 在blur中隐藏掉.例如 文本输入框, 和 image 类型的input, 但是对于设计出的样式不能通过这类控件来表达时候,就需要使用div框来设计布局,虽然HTML控件具有更好的accessibility.   技术思路:事件event在DOM树

jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

1.jQuery鼠标事件之click与dbclick事件 方法一:$ele.click()(不带参数) <div id="test">点击触发<div> $("ele").click(function(){ alert('触发指定事件') }) $("#test").click(function(){ $("ele").click() //手动指定触发事件 });   方法二:$ele.click( h