跳转至

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

知乎上一个高赞答案:只要照着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

来源:知乎

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

评论