学习编程自然是需要多写代码的这应该不光是编程吧,我们学任何东西都是一样的。我如果要学习设计,那一定是经常勾勾画画,CoreDraw、Photoshop那一定是经常用,把很多常用的快捷键都记住,最后融会贯通。如果不经常练习使用,那估计画直线都不一定能画好。编程自然也是一样,因为语言本身其实并没有什么太大的难度,但是将语言编程一种工具,中间的过程并不是看看书,冥想一下就可以实现的。作为一个程序员,其实我们在编程过程中用到最多的功能就是Debug。因为一个函数,可能包括是几百行甚至上千行代码,人的大脑是有极限的,你很难%的确定几百上千行代码执行的过程中,你的大脑计算结果和程序的计算结果就是一模一样的。
所以,我们在编程的过程中,还有大量的时间是用来发现问题并解决问题。当我们发现问题,解决问题的过程中,我们又会学习到很多的经验和知识,未来我们再次面对类似的问题时,我们就能够很好的避免出现同样的错误。而这个过程,一定是在不停地写代码,不停地Debug,不停的思考过程中所带来的成果。如果我们只是去看书,只是去在大脑里模拟书上的内容,其实是无法系统化的对程序进行了解的。换一种说法,现在让我们去写一篇论文,那么我们一定是先整理出大纲,然后在根据大纲补充内容,而补充内容的过程中我们也需要去尝试,去翻阅一些书籍。
就算论文写出来了,后面也会有各种修改和补充,基本没有一步到位的论文。如果现在,让我们不去写,也没有练习,只是通过“想”,就勾勒出一篇论文,这不是人力所能达到的范畴。所以,多写代码可以说是程序员成长最最基本的。当然,如果仅仅是不停地写代码,也并不是就正确学习一定不是一个闷头自己干自己的过程,很多的知识、很多的学习方法其实前人都已经总结出来了。写代码是通过实践和其他人的知识转化成为自己的一个过程,或者说是自己发现和印证自己理论的一个过程。所以,我们在写代码之前,还需要多去看别人的优秀代码,然后通过读懂别人的代码,然后模仿别人的代码,最终实现自己能够写出这样的代码。
我也简单分析一下我个人曾经的学习经验吧:就拿我以前学“领域驱动设计”时的情况来举例吧。我最开始是在一些技术讨论的QQ群里面第一次了解到的领域驱动设计,也就是DDD。当时我对于DDD还什么都不懂,于是对这种架构模式产生了浓厚的兴趣。首先,我去了一些在线的知识库,了解了一些DDD的基本概念;然后,在京东上买了两本书,《领域驱动设计模式、原理与实践》和《实现领域驱动设计》。显示较快速地读了一下这两本书,不需要说记住这些知识,只是做一个大概的了解;接着,就去开源社区里面去找别人的源代码,我当时看了好几个,其中一个是汤雪华的Enode,还有一些外国人的sampleCQRS之类的。
自然看的时候,又会遇到一些疑问,汤雪华的开源项目是有一个QQ讨论群的,所以大家可以在里面提问和探讨。而一些开源项目就没有这么方便,那么遇到问题时,就可以把之前买的书找出来,对照知识点自己理解一下;最后,自然就是自己动手写代码了。我个人会选择先模仿,就是看别人的代码,理解一下,在自己去写。写的过程中思考,如果是我,我能怎么去优化或者封装一下。最后,当自己基本理解透彻以后,就完全按照自己的思想写一个小东东出来。所以,我学习的方法基本就是先了解知识域,然后在写代码的过程中慢慢学习,慢慢提高。写代码的过程是必不可少的,而且可以说是花时间最多的,因为很多知识点,不自己动手做一下,很难能够理解为什么?