0. 文章起源
一位网友给了我一个知乎的链接().我看了感触很多,因为我曾经比(网友的开源中国博客名)更加的茫然,更加的不知所措.短短的三年工作时间,我经历过:使用C++工作了一年多,使用PHP工作了半年,而目前使用Python和JS(在参加目前的工作之前,我从来没用过Python和JS工作过).我在Windows平台的MFC下写过代码,用过VC6.0, VS2008, 在Linux下学习过APUE, UNP, 而目前在Mac系统下写web.我学习过很多乱七八糟的技术,编程语言接触过汇编,C,C++,C#,Java,Ruby,Python,PHP,JavaScript,编程技术如Windows的MFC,Linux的一些网络编程等.有时候为了学习C, 我买了TCPL, 买了<C和指针>,买了离散数学,具体数学,甚至还梦想的看完TAOCP(计算机程序设计艺术),我学习Python还专门去学习函数式编程的鼻祖LISP,结果整整三个月才看完前两章半(这对当时雄心要当程序员的我是多大的打击)......
坦白说我上面说的编程语言,没有任何一门是精通的.上面罗列的一些书籍,我甚至都没有翻阅过.我有时候甚至怀疑我看了这么多的东西,看进去了多少,又看懂了多少.但是突然有一天我顿悟了,那种顿悟有一种"开天眼"的感觉.我貌似悟道了学习编程的两个重要的支点:
兴趣和坚持,无关勤奋.
希望你能理解这两点:兴趣在于你要做自己喜欢的事,而自从顿悟后我每天的学习时间再也没超过2个小时,我只是每天坚持学习两个小时.
1. 兴趣
有一个同事问我说:"你为什么喜欢编程呢?"结果我答非所问:
做自己喜欢做的事情,顺便把钱给赚了,多爽.
这实际上感谢于我大学时候看过的一本书吧,是一本心理学的书籍,里面有个关于兴趣的论断是:特定的兴趣是可以培养的.
那时候刚刚毕业,其实对编程一无所知却阴差阳错的选择了IT这个行业,刚开始的时候如此的痛苦以至于我很多次都想放弃,直到我想起了那本心理学书上那个关于兴趣的论断:
特定的兴趣是可以培养的.
所以我开始疯狂的看书.我看书的意义不在于我要学习多少技术,不在于是否要理解书上的内容,我就是往死里看,我就是要培养自己的兴趣.那本APUE前九章(英文版)我看了三遍(第三遍终于看完了这本书),即使我前两遍都没看懂.SICP的前三章我看了两遍,即使第一遍我根本没看懂.CSAPP我还看完了,即使我目前还不知道它讲的是什么,更多看不懂的书比如:UNP卷1,卷2(UNIX网络编程卷1,卷2),深度探索C++对象模型等等.
但是看着看着还是有收获的,比如<C++ Primer>我看了四遍,第一遍习题基本全部做错,第二遍会做一点,第三遍习题就做完了,第四遍开始优化答案,然后就找到了一份C++的工作.比如关于C语言,刚开始学习K&R,第一遍真的无法理解为什么大家这么推崇K&R,看了第二遍感觉这本书写的好细致,然后看了两遍<C和指针>,看完<数据结构:C语言版>(也是花了两遍),顺便把习题都做完后再回头看K&R,我当时的第一感觉是:这本书足以媲美SICP,算是计算机编程的顶级书籍(在我心目中K&R和SICP永远排第一).也比如我看了三遍<Python核心编程>后,就找到了目前的工作,顺便看了三遍<JavaScript高级程序设计>后就足够胜任目前的前后端工作了.
看书需要一步步来的,如果我刚开始就看TAOCP这类的书,估计我早去工地上搬砖了(我很清楚我没这个能力学习TAOCP,所以我还在补基础中).
2. 坚持
关于坚持,我想引用当初写过的一段话(摘自 ):
"3. 我还有一个在广州的同事,当时跟我一样疯狂,每天学习到凌晨两点,后来我回武汉后就没那么疯狂了.但是他依旧如此的努力.前段时间听同事说他被软辞了,原因是他能力不行.于是我突然明白:"疯狂学习到凌晨两点的人,有很多根本没看进去书,而一遍遍的自我安慰说:看,我又学习到了凌晨两点.",于是我要求自己每天的自学绝对不能超过两个小时,因为重要的是坚持."
我有过一段时间真的非常的努力,努力到每天都被自己所感动.但是后来理性的分析了以后我才发现,当时的自己是多么的幼稚和可笑.我发现当时有一种现象很经常发生在我身上:
很努力,很拼劲,每天坚持学习到凌晨两点,结果坚持了两三个月后,长达一个月的时间里我对编程没有任何的兴趣,每天再也学习不进去,有时候甚至看到编程的书籍就想吐.
后来我回想起我的高中同学(我高中就读于福州一中,福建省最好的中学,而我幸运的通过少数民族加分进去的),他们之中很多人看起来真的不怎么努力,但是为什么所谓的数学物理难题在他们弹指之间灰飞烟灭呢?后来我想起了一件事:我的那位舍友每次看书的时候如此的认真(他考入了香港中文大学)以至于我每次过去碰他一下他都是吓得跳起来(毫不夸张).
他们每天并没有学习很长时间,但是都是极其的专注.所以我很惭愧:我每天学习到凌晨两点,有多少时间是真心静心下来学习的?
想通了以后,我每天的学习时间再也没超过两个小时.除非个别情况,我每天都坚持学习两个小时,而且效果还真不错.
3. 如何学习
1. 基础要牢固
我推荐的C语言书籍只有以下三本书(不是以C语言作为工作语言,而是专门为了打基础用):<C和指针>(看了两~三遍),<K&R>(看了四五遍),<数据结构:C语言版>(看了两遍).
推荐的顺序是:
1. 先把<C和指针>完整的看一遍(至少要把习题全部做完),然后再完整的复习一遍.
2. 然后有能力完成<数据结构:C语言版>
3. 而K&R是那种每半年就要学习一遍的书籍
看了你的问题,我目前唯一给的建议只有上面这三本书.如果你踏踏实实的把上面的三本书真正的理解(千万不要认为K&R这种书看一遍就够了),那么你自会找到自己学习编程的方法和方向.
然后一定要记得写博客,把你所学习的都要通过博客记录下来,即使博客上面都是学习笔记.
还有一点:虽然我没用Java工作过,甚至就看了一周的Java书籍(还是几年前看的),但是我有自信给我两周的时间,我就可以入手Java的工作,我希望你也能有这种自信.