学习编程的方法、软件和工具
编程的学习跟许多其他技艺的学习一样,首先必不可少的就是理论基础,其次就是需要大量的、不断地练习。老生常谈,这也许是每个人都懂得的道理,但说起来容易做起来难。所以想要学好编程,还需要些方法和毅力才行。
对于编程来说,理论阶段的学习相对比较抽象。过早地就希望一口气掌握所有理论知识然后再开始实践,往往会越学越迷茫。因此从大的方面来说,比较好的方法是理论学习-实践-总结-理论学习-实践...... 这样周而复始地不断学习,不断练习,这样是比较高效的学习方法。根据我自身的学习经验,有一些学习方法以及工具推荐给你,希望对你有用。
1. 确定学习方针和路线
首先要想好自己的学习之路该怎么走。比如学习一门语言,开始之前要制定好计划。多上网看看别人(特别是那些已经学成的牛人)是怎么学习的,推荐了哪些经典书籍,有哪些告诫。然后再根据自己现阶段的水平,制定适合自己的学习计划,这样才能少走冤枉路。
在这里推荐一些不错的帖子,希望有适合你的:
2.一定要做好笔记
选好路线后,就可以先开始理论的学习了,就是看书,看好书。以前,我是个爱看实体书的人,喜欢看书时把各种感悟都记在书的空白处。这样做的好处是再翻书查找时不仅可以找到相关知识,还可以方便地看到当时对这段文字的理解。但当看的书多起来,五本、十本、二十本... 这种零零碎碎的批注就变得比较零散,不成体系了。因此可以在书上做批注,但一定要及时的总结,将每一章的知识网络都统一记在一个地方,这样比较容易融会贯通,以后查找每一章大体内容时也有个大纲。
3. 多看原版的电子书
以前我很爱看实体书,拿在手里很有质感,而且还可以让自己暂时离开电脑屏幕,短暂地休息一会。但现在我的想法有了一些变化,原因主要有三。第一,很多技术书籍都是老外们先写出英文版的,然后N年后我们才能买到中文版的,因此实体书(除了国产原创的)往往滞后于英文原版的很多。第二,看电子书时做笔记和摘录会更容易些,也方便日后将自己的心得发到博客中与其他人分享。第三,在电脑上看电子书,能更及时地完成书上的各种练习。以前我看实体书时,经常先把碰到的想做的练习记下来,想等最后看完整本书时一起完成。但结果是或者书没有完完全全地看完,或者有些练习到最后看完书时印象不深了,因此练习很容易就被搁浅了。
现在网上又多了很多名校的公开课课程,这同样是很好的学习资源。感受感受名校的课堂气氛,练习了英语听力,又学到了喜欢的技术,何乐而不为呢?
4. 多总结,多分享
写博客记录下看书和编程实践的心得是很好的方法。既通过不断发博客来激励自己不断地学习和总结,又在写博客分享给别人的过程验证自己是否已经真的懂了。博客可以分为两种:一种是读书笔记或摘录,起到备忘的作用;另一种是比较原创性的,如编程学习过程中自身的感悟,对某源码的剖析。
5. 自律自信,戒骄戒躁
学习是个苦差事,没有一定毅力和自我控制力是很难长久坚持下去的。唯一能有帮助的应该就是兴趣了吧,对技术学习的狂热,对知识的渴望可以让你苦中作乐,甚至都不觉得寂寞和艰苦。除了自律,学习过程中一定会碰到种种困难,相信自己可以学会,可以解决问题。虽然每个人的资质不同,但我始终相信一个道理,只要肯学,资质差就比别人多付出努力,笨鸟先飞,你一定有厚积薄发、一鸣惊人的那一天,是金子一定会发光的。此外还要戒骄戒躁,不能急于求成。如果你真的喜欢技术,很简单的一个问题研究很久花了很多时间又能怎样呢,只要你学的开心就够了。当一个简简单单、朴实无华,每天沉浸在自己的世界里的程序员也是令人羡慕的。
还有一点要注意的就是学习效率。要劳逸结合,累了就放松会儿再学,比一味地回到家就开始学,一直学到看不进去了为止要好很多。
6. 软件和工具
对于不同技术的学习,要搭建不同的开发环境来帮助我们学习。
对于Java来说,Eclipse是必不可少的。此外,练习的代码放在本地并不保险,所以还需要个免费的代码管理服务,如Google Code的SVN服务以及GitHub。自己编写好的程序也可以部署到免费的服务器,Google的AppEngine支持Python和Java开发,国内的Sina AppEngine目前只支持PHP,是个学习PHP的不错选择。
对于C语言的学习,在Windows平台上当然是微软的Visual Studio集成开发环境。可以结合C语言的学习,方便地学习Win32的开发。但更好的学习平台还是Unix和Linux。我一直用VirtualBox上的Ubuntu Server版虚拟机来帮助我练习C语言,再加上个SSH客户端,就可以轻松地在本机和虚拟机之间传递源文件。
学习工具方面,Evernote当然是做笔记必不可少的工具。按学习主题分门别类,你会爱上做笔记、网摘的感觉。此外还可以用Google Reader订阅一些热门站点、博客的RSS输出,每天上去看一下了解最新的动态。
以上是本人一些学习经验的总结,希望对你有些许帮助,同样也欢迎你的有关编程学习方面的好建议。