编程入门课程、书籍推荐
学习编程,用什么语言入门好呢?很多人第一反应,C语言,当然是C语言,学校教的不就是C语言吗?额,这个嘛,这个事情还是得辩证地看待。虽然我学习编程接触的第一门语言也是C,但目前写程序用的最多的却不是C,大家明白我的意思了吗?学习编程先学C有一定的好处,因为很多主流的编程语言,比如C++,Java,C#等,都是C-like语言,而且C对于性能细粒度的优化很强大,但也有一些不妙的地方,因为C语言中的指针,内存管理,文件操作,结构体等,对初学者并不是那么友好,很容易陷入一种对偏底层的编程语言的恐惧中。而对Python、Ruby等脚本语言的学习,却可以让你很快开发出一些能够用得上的程序。比如处理txt,CSV,JSON,XML文件等,Web编程,系统管理或和数据库打交道(Python SQLite)。
或者可以学习一下HTML,CSS,JavaScript等,做一个简单的网页,也很容易上手。再深入一些,可以学习一下jQuery,AngularJS等,学习一下bootstrap,了解一下响应式布局,学一下PHP,读点计算机网络方面的书,至于SQL,Git,正则表达式之类的,现学现用就行,然后买个域名,租个服务器,做个网站。当然这要花费不少的时间。
个人感觉C++太杂,面向对象,泛型编程,元编程(连Lambda都有,简直了),什么虚函数,指针等等,你得知道什么时候用多态,什么时候用模板,什么时候用宏,另外还有很多从基本范式中衍生出来的复杂而丑陋的东西,不容易学好。Java和C#就比C++友好多了。Java也被叫做C++--,去掉了一些没什么太大必要存在的东西,比如对安全性影响不好的指针。C#其实和Java很像,之所以会有C#这么个语言,还是因为Sun对Microsoft的诉讼,至于其之后发展壮大,就是后话了。不过个人不喜欢.NET那些没什么意思的技术,因为微软的商业策略,很多人都不喜欢用微软的东西。我就不黑了,大家可以参阅清华贵系大神王垠早些年的帖子,《完全用Linux工作》等。本人推荐学习Java,目前来看前景依然很好,很多企业的网站用的都是javaEE的技术,比如京东从.NET迁移到了JavaEE,淘宝也是用JavaEE,只有很少一部分是PHP,市场对人才需求量大,找工作比较容易。还有一个方向就是Android,Android的市场占有率逐年提升,虽然整个市场的利润iOS拿去了大头,但Android开发人员依然吃香。学好JavaSE,学习Android其实是你愿不愿意的事情,并没有太高的门槛,稍微花一点时间,就可以入门了。多说无益,说太多对于具体编程语言的东西,很容易陷入争论,而争论本身没有什么意义,而目前来看,此文好像已有这种倾向。我的建议是,如果有时间有精力,可以都学,然后自己做一些小项目,自己体会。上述内容我都蜻蜓点水学过一些,听过课,目前仍然挣扎在专业课的学习当中,如果有什么说的不对的地方,还望指正。
其实学什么语言入门并不重要,重要的是你是否已经入门。喝再多的鸡汤,听再多的故事,也过不好这一生,逛再多的论坛,看再多的帖子,也学不好编程。你要做的就是,凭感觉选定一个方向,现在就开始学习,先学学看嘛,何必认真。下面正式进入正题,推荐一些比较好的学习资源。
C语言:
强烈推荐浙大翁恺老师的课程,中国大学MOOC,网易云课堂上都有资源。翁恺老师讲的很好,本人也是ACM-ICPC金牌教练,技术大牛。他的C语言我听过两遍,在不同的时期有不同的感受,讲的很好。儒雅的气质,很容易让人忘记这也是一个程序员。可以说当初学习编程就是听着翁老师的课程入门的,对老师至今心存感激,这也是我推崇他的课程的一部分原因。关于C语言的书,我只读过零基础学C语言(康俪,李宽著),C primer plus,其他的不好说。比较有名的有,The C programming language,树立了K&R标准的经典之作,大名鼎鼎的”Hello, world”就是此书的第一个示例程序。还有Effective C,Effective系列的书,都很好,可以读读。
不过还是应该以视频学习为主,然后适当做一些OJ练习,课本拿来看看就好,深究很容易陷入语法的细节中,浪费时间精力,就违背学习编程的初衷了。学习编程主要是要解决一些实际问题,而不是钻牛角尖般的技术深究,除非有这个必要的时候。另外,谭浩强老先生的书也很有名, 当然这个有名和上面所说的有名是有本质区别的。此处吐槽一下,个人感觉(电子)图书馆里那些外国名校的教材比国内那些东拼西凑,错误百出的教育部XXX规划教材要好得多了去了,推荐大家直接读英语版,因为这并不难,科技文一般不会用什么复杂的语法句式和生僻的词汇,都很容易读懂,如果对英语实在是排斥,可以读译文版,如果有什么地方感觉不太对,那一定是翻译的问题,拿原文来对照一下基本就没问题了。
C++语言:
课程推荐北京邮电大学的崔毅东老师的课程,和翁恺老师的C语言同属于网易云课堂计算机专业体系课程(这个体系的课程都很棒,大家有长期修习计划的话,可以学一下)。崔老师才华横溢,幽默风趣,就以他在网易云课堂的自我介绍为例,大家可以稍微感受一下。“生为山民,初入学,好三国四国,乃逃课,四年尽,虽完璧,实杯具。后续学,乃开窍,终成论文,借师祖余荫,辩而过。奈何职难求,遂从教。十年弹指一挥,旦夕间毁人无数。”这门课程我是在今年暑假学完的,大家感兴趣的话可以听一下,有问题也可以和我交流。
书籍的话,我只读了一点C++ primer,还没读到一半,没什么特别的感受,只能说是一本还不错的书,另外Effective C++、More Effective C++据说都很不错,可以拿来看看。如果你和我一样,没有那么多时间的话,把课件打印出来,听听课程,做好笔记,自己琢磨琢磨,做做OJ题,目前阶段也差不多了。
Java语言:课程依然推荐翁恺老师的,因为当时学习的时候太功利,听了很多培训机构的课程,比如慕课网,极客学院的,后来听翁老师的课程,才追悔莫及。现在IT培训的老师主要是两大群体,一是以高校教师为主,对于教学多有心得,比较专业,能讲到技术的本质上去,另外一个群体,是一些仍在职,或退下来的工程师,对于一些技术的具体使用技巧和流行的一些开发框架、开发模式比较有心得,但授课效果很一般。个人感觉能听高校名师的课程还是听名师的课程,因为有些工程师实在是讲的太糟糕,就拿英语单词的发音来说,你们说的这真的是英语吗?真是看啥读啥,恣意妄为,误人子弟。此处没有太多不敬的意思,只是宏观感受,不针对个别教的好的前辈。另外大家有时间的话,可以看看博客园,CSDN等,逛逛Stack Overflow,可以从业界牛人的帖子,问答中学到很多逼格很高的技术。书籍的话,前期还是不要买太厚重的,随便找本看的顺眼的配套学习就行。如果想要深入学习,可以读读李刚老师的《疯狂Java讲义》,很厚的一本书,八百五十多页,我把它撕成了十几个小册子,一册一册地消化了,个人感觉李刚老师讲的很好,很到位,很详细,易于理解。李刚老师的书在各大电商网站上销量极高,由此可见一斑。其他的书,比如《Effective Java》、《Thinking in Java》都是不错的。有兴趣的话,可以一起读读,欢迎约战读书。
如果想要学的深入一些,还应该了解一下代码重构和设计模式,各有一本经典的教材,大家自行搜索,我就不赘述了。总而言之,以视频学习为主,以课本阅读为辅,以OJ练习为重,以技术博客作为参考。至于数据结构,算法等,暂时就不讲了,说起来就内容太多了。回头一看,已经敲了三千余字,话唠的本性暴露出来了……本人是在很早的时候就接触了MOOC,在十几个课程平台上,修过几十门课程,如果大家对于某些技术的学习有所困惑,需要推荐学习资源,可以找我,至于具体的问题,我不一定学过,不一定会,也不一定给你解答,但一般会给一些我的思路,可以试试能否找到答案。对于其他编程语言的学习资料推荐,篇幅有限,暂不赘述,如果后期反馈良好,比较空闲的时候还会继续更新。
Email:qingtianguzhu@sina.com