计算机专业学习的一些思考与总结

Apple WWDC 2014 标志及宣传语
* 大学四年不知不觉一晃而过,在临近毕业之际,写下这篇文章一方面是对自己的总结,另一方面向其他同学分享我的经验。*

<br >

1. 兴趣是最好的老师

有两种力量会推动我们不断前行,一种是兴趣,一种是责任感。其实在前行的路上会发现这两种力量往往会互相支持着我们前行:因为兴趣我们开始了我们的学习、事业,遇到了困难,因为责任而坚持;遇到了瓶颈,忽发现这些正是自己的热爱所在,又坚持了下来,就像这样循环往复以至最后。

编程是一件很需要兴趣的事情,因为它需要不断的学习,不断的练习,这其中会包含许多不解的难题、无法fix的bug、难眠的夜晚,如果你不能发现其中的乐趣,很难坚持下去并且把它做好。

如果你是计算机专业的,并且喜欢编程,那么你很幸运可以快乐地畅游在代码的海洋中;如果你是计算机专业的,但是一点也不喜欢编程,而是已经有了其他的想法,那么你也很幸运,因为你有了奋斗一生的目标。如果你是计算机专业的,但是一点也不喜欢编程,但是不知道要做些什么,没关系尽管去尝试、去找寻,不要把时间浪费在一点也不喜欢的事情上。如果你不是计算机专业,但却喜欢编程,那么放手去编程吧,编程方面的知识通过自学完全可以,我的第一份工作所用到的知识,大部分不是源于课堂,而是来自于自我学习。如果你在纠结要不要从事编程相关的工作或者想从事编程相关的公作又缺乏兴趣,那么我推荐几种培养兴趣的方法。

(1)寻找自己的偶像

在体育明星中我们经常会听到某一个成功的运动员被采访时会说我是因为看了某某某的比赛而开始训练、比赛并且让我一直坚持下去的。我们也需要自己的偶像,一个能激励我们不断学习,在困难时让我们坚持下去的人,“程序猿”的偶像们通常智力超群、目光坚定、成就超凡,比如苹果公司的乔布斯和沃兹尼亚克、微软的比尔·盖茨、谷歌的拉里·佩奇和谢尔盖·布林、Facebook的扎克伯格等等,他们通常以Make The World A Better Place为己任。的确,因为他们,因为技术,因为“程序猿”们,我们的世界飞速发展,智能手机、网络,我们的世界的确更好了。当你通过观看他们的采访、演讲、纪录片、专记等等,那帮看似无趣的“程序猿”,其实才华横溢、极富人格魅力,让我们也想成为他们那样的人。

(2)书籍与影视作品

这和上一点有点像,随着对编程的了解、对编程的人的了解、对他们生活的了解,很可能会产生加入他们的兴趣。我收集了一些作品列表,程序员阅读手册(不断更新中)程序员观影手册(不断更新中)。记得我看完一部讲述一群独立游戏开发者的纪录片《独立游戏大电影》之后,立刻下载了游戏引擎捣鼓起来,在后来的多门课的课程设计中我都做了小游戏。

(3)最重要的,现在就开始编程

记得大一的时候,我对编程并没有兴趣,我觉得编程只是我大学生涯的作业、任务,我学习的很被动,只能勉强能够应付课程和考试。但是在那些被动尝试的过程中,我却感受到了程序输出正确时那种成功的喜悦,bug不能解决时想放弃的无助以及经过不懈努力解决bug时的柳暗花明。正是这些尝试、体验,然我了解到编程其实是乐趣横生的。如果你喜欢挑战,喜欢新鲜事物,编程一定能给你带来乐趣。我们会有很多机会能把兴趣和编程联系起来,各种课程会有各种课程设计,老师的要求通常是,使用Java语言(或是某某其他语言)、使用与课程相关的知识,做一个作品。这时我们可以做些自己想做的课题,做些有意思的,自己会使用的东西。

<br >

2. 速成的谎言,坚持才是不二法门

经常在书店里看到这样一类书,《21天学会XXX》系列,《7天学会做网站》,我买过、也看过,这类书无非是抓住人们渴望“速成”的心态,一本书一般就说了一个例子,演示了一个例子的过程,而对细节的解释远远不够,看完之后只会有大概的了解,离学会、熟练掌握还相去甚远。

Peter Norvig 写过,计算机博士徐宥翻译过一篇文章——《十年学会程序设计》里提到编程像所有其他的技艺一样,遵循一万小时理论,即不断的练习才会真正的掌握编程这门技艺,编程既是技术、也是艺术,要成为编程大师,我们需要灵感、天赋、反复的练习、在挫折中进步。来不得半点马虎,速成是不可能实现的,坚持才能。


3. 我的编程学习经验

前面扯了那么多闲话,下面干货来了~ 分享一点我自己学习的经验。

(1)学校学习

我觉得学校的课程中,有几类课是十分重要的。一类是语言基础课,尤其是你大学乃至人生的第一门编程语言课是十分重要的,因为它会培养你最初编程感,培养你编程的基本功,以后上手其他语言,就会容易很多。

还有一类是计算机基础和总体知识的课程,比如操作系统、编译原理、计算机网络等等,它们会教给你宏观的计算机知识,让你了解计算机是如何运作的。

对于以上两类课程,我的建议是除了认真听课、完成作业,课后也多查阅资料,多练习,多实践。

(2)自我学习
  • 技术书籍的选择
    要选择“著”而不是“编著”,“著”的书往往包含了作者自身长年积累的经验和知识、见解。而“编著”往往只是简单的知识的整理收集,缺乏对知识的梳理、讲解。国外的书往往质量更高,能直接阅读英文原文著作当然是做好的,翻译的作品也是不错的。

  • 在线编程学习网站

    1. 网上有各类论坛、博客包含信息,不时逛逛,收获良多。
    2. Codecademy 强力推荐的一个交互式编程学习网站,它以练习实践的方式,进行编程教学。
  • 在线课程
    如今的在线课程开放平台十分活跃,能给我们提供的课程也十分多,质量也很不错。

    1. Coursera 由美国斯坦福大学两名计算机科学教授创办。旨在同世界顶尖大学合作,在线提供免费的网络公开课程。
    2. edX 麻省理工和哈佛大学于2012年4月联手创建的大规模开放在线课堂平台。
    3. Udacity 大量优质的计算机相关课程。
    4. 学堂在线 由清华大学研发出的网络开放课程平台。
    5. Khan Academy 可汗学院,有关于数学、历史、金融、物理、化学、生物、天文学等科目的内容。
    6. imooc 国内一个IT课程平台,多为一些IT圈内大牛主讲的课程,质量很不错,授课内容十分实用。
    7. 网易云课堂 多为技能类课程,种类多。
    8. 网易公开课 各类公开课。
      ... ...
      ... ...
      还有很多在线课程能够很好地帮助我们自学。
  • 问答社区
    在自学的过程中,经常会遇到各种各样的问题,一般可以去百度、谷歌等搜索引擎进行搜索,也可以去IT类的问答社区。比如著名的stackoverflow,上面的答案可信度非常高;还有国内的segmentfault 等等。

  • 英语
    从我上面推荐的资料看来,很多资料都是英文的,这就需要英语的能力。英语能力或许计算机从业者们是除了专业技能之外最重要的技能了。因为最新的技术往往来自于大洋彼岸说着英语的国家,一手的资料往往都是英文的。而且英语是全世界的开发者的通用语言,和其他开发者交流心得体会也需要英语。总之,学好英语有百利而无一害。


4. 关于工作

(1)选方向

计算机类的技术工作分为好多方向比如Java、C++、Android、iOS、前端、数据库、数据挖掘等等。确定好自己的方向,沿着某一个方向前进是明智之举。同时可以关注各个公司招聘的职位发布,找到自己的心仪职位并且按照职位的要求来学习。

(2)boss们真正需要的是什么?

作为一名初出茅庐的大学生,老板们当然不认为你有“两年以上工作经验”、或是“熟练掌握XXX框架、XXX技术”,他们知道你很多东西都没有接触过,他们往往需要两点,态度和学习能力。态度不用多说,学习能力即学习掌握新事物的能力,就是你多久能融入工作团队,面对新的任务能否及时完成。要培养学习能力,最好的方法就是在平时多看多学新技术,技术之间都是有同性的,接触的多了,自然有了套路,知道该如何下手。

最后,请记住我们伟大的梦想:
Write the code. Change the world.

mixj93
2015年5月

推荐阅读更多精彩内容