跳转至

那些编程水平很高的程序员是怎么训练出来的?

知乎上一个高赞答案:只要照着John Carmack和Edward Kmett的这三句话,一定可以成为编程高手。

John Carmack(游戏开发大神,最早的3D游戏引擎开发者)

Write lots of code. Clone existing things as exercises. Learn deeply. Alternate trying yourself and reading literature. Be obsessive。

编写大量代码。克隆现有的东西作为练习。深入学习。自己尝试和阅读文献交替进行。痴迷。

Edward Kmett(函数式编程大神)

Most of my programming career has involved finding something neat, writing my own version to understand it & often throwing it away.

在我的大部分编程生涯中,我都是找到一些简洁的东西,编写自己的版本来理解它,然后经常把它扔掉。

I program those "clones" like I read papers: change a core part; redesign it. Gain progress or understanding why it is what it is.

我给那些“克隆体”编程,就像我读论文一样:改变一个核心部分;重新设计它。获得进步或理解为什么它是这样的。

总结一下:

1.大量写代码(Write lots of code)

就是说练习的量要大,搞题海战术。这是人尽皆知的道理,量变引起质变。无他,唯手熟尔。

2.深入学习开源代码

有两个要点:

  1. 不能只看,要练。John Carmack的原话是Clone existing things as exercises.

    具体怎么练呢,他没说,Edward Kmett的那两句话给出了具体的方法:

    • 找的开源代码要简洁(finding something neat)。

    • 编写自己的版本以加强理解(writing my own version to understand it)。

    • 优先改编核心部分,重新设计它(change a core part; redesign it),过程中要尝试理解人家的代码为什么要写成这样(understanding why it is what it is)。

    这正是咱们需要学习之处,我们一般学习一样东西,脑子里的关键词都是理解、吸收、消化,顶多也就是什么费曼学习法,将所学知识教给别人。总之,目的都是学会。人家是一边学习一边通过重构创新,层次境界高下立判。咱们普通人即便没有这个本事,至少也应该有这种意识,有这种冲动。

  2. 要深入地学习(Learn deeply)

不能流于表面,不能走马观花。要知道冰山下面是什么,方法背后的原理。理解它是如何产生的,它为什么是这样,它与其他知识的关联。

3.边实践边看文献(Alternate trying yourself and reading literature)

这一点Edward Kmett也给出了具体的方法,与学开源代码一样,自己尝试重新设计论文的核心部分。

4.保持痴迷(Be obsessive)

纯粹热爱,陶醉其中,无法自拔。全情投入,不顾其他。不为赚钱,不为成大神,不为装叉。就像韦神一样。

作者:金致远

链接:https://www.zhihu.com/question/351504112/answer/3541403981

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论