那些编程水平很高的程序员是怎么训练出来的?¶
知乎上一个高赞答案:只要照着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.深入学习开源代码
有两个要点:
-
不能只看,要练。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)。
这正是咱们需要学习之处,我们一般学习一样东西,脑子里的关键词都是理解、吸收、消化,顶多也就是什么费曼学习法,将所学知识教给别人。总之,目的都是学会。人家是一边学习一边通过重构创新,层次境界高下立判。咱们普通人即便没有这个本事,至少也应该有这种意识,有这种冲动。
-
-
要深入地学习(Learn deeply)
不能流于表面,不能走马观花。要知道冰山下面是什么,方法背后的原理。理解它是如何产生的,它为什么是这样,它与其他知识的关联。
3.边实践边看文献(Alternate trying yourself and reading literature)
这一点Edward Kmett也给出了具体的方法,与学开源代码一样,自己尝试重新设计论文的核心部分。
4.保持痴迷(Be obsessive)
纯粹热爱,陶醉其中,无法自拔。全情投入,不顾其他。不为赚钱,不为成大神,不为装叉。就像韦神一样。
作者:金致远
链接:https://www.zhihu.com/question/351504112/answer/3541403981
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。