刘炯(Sharpmark)的博客

v4.0 一个不怎么更新,又舍不得关掉的博客

答“请教学长关于大学学业生活的的几个问题”

经发信本人同意,将一次Email内容公开。希望更多有同样问题的同学能有所收获,因为这位学弟的问题很有典型性,以前也跟很多同学以邮件、QQ、讨论会形式讨论过这个问题,我知道比我强的人还有很多很多,我对这些问题的见解也可能很浅薄,欢迎有想法的同学一同讨论交流。为尊重个人隐私发信人名字隐去。

学长好:

我是大一的学弟,马上就要进大二了,应该不再叫freshman了,但是,我觉得自己在很多方面仍然是freshman.来自农村,真正接触电脑是在去年进大学之后,之前,我对电脑很陌生,对所谓的软件只是听说有这个名字而已.当别人把电脑玩的轻车路熟,谈得头头是道时,我在盯着键盘找字母.在这将近一年的时间里,我没有能够对我现在所在的专业有很好的了解.我的了解非常肤浅,致使我现在很迷茫.

我知道,很多计算机高手都是后来居上,很晚成才的,他们以他们的勤奋而有所作为,我想,我也要成为其中的一员.我相信,天道酬勤,以我的努力与付出,四年会有充足的时间来让我成长,成才.但是,光有勤奋是不够的,我现在很迷茫,没有明确的方向,我感觉自己在茫茫旷野里狂奔,却不知奔向何方?!什么都想学,什么都学不会.这就是我写这封信的初衷.

首先,谈一下多做题与学习这个问题.也许你觉得这个问题很好笑,不要误会,我没有表达清楚.现在我身边有些同学天天做北大ACM,我也想现在多做些题来提高编程能力,尤其是一些经典难题如八皇后,骑士之旅等等,但我发现这是一件很费时间的事:我现在没有电脑,到暑假才能买,另外,那些难题一般解法多样,要完全理解,以我现在的水平也不是很快就能搞定的事情.这样我就没有什么时间来自学其他的专业书籍了,所以,现在,在多做编程练习和自学之间我只能择一,我选择了后者,我想等我买了电脑后在多练练吧.你觉得呢?另外,我想问的是:编程能力的提升在于多练,但练也有不同的练法,请问学长,怎样练提升较快?比如多做什么样的题,注意什么东西等.

刚才我说了我现在侧重于自学专业书籍,但最大的问题是该学哪些书,要成为一名计算机高手需要知道哪些东西?我对这个专业怀有很浓的兴趣和好奇心,去年我什么都想学:flash, photoshop, 网叶制作等等,今年发现,我的专业里还有很多更重要的东西需要学(我现在在学数据结构和面向对象编程,刚开始学,学得很慢).我希望学长可以对我现在需要或者最好学些什么书作一下指点,并推荐一些好书,杂志,网站,博客等学习平台.同时,我希望对我们这个专业我将要走的路做一下全面一点的介绍,我现在对我将要做什么都不清楚,感觉被学校的安排牵着脾子走,很被动.

然后说一下数学,数学是每个工科专业的基础,我想问的是,除了考研要学好数学外,我们的专业跟数学关系紧密吗?有必要学得很好吗?说实话我现在不怎么看重数学.

最后说一个问题:总听说学校培养的人与公司要的人有很大出入,我们在大学学的东西,出去了没什么用,那么,在大学四年的学习中我门应该注意写什么,来减小这个出入呢?

之所以向学长你问这些问题,是因为你即将毕业,刚走过我将要走的路,必然还很熟悉,也有一些最新的感受.而且学长在专业方面是很强的,值得我去学习的.也许我的问题很琐碎,但对一个很茫然的人来说,详细的了解一些东西是很需要的,你的只言片语也许会影响我四年的生活,影响我的发展,所以,真诚希望学长可一挤出点时间来给我指点迷津.
最衷心的感谢!
此致
敬礼!
学弟:XXX
2007/6/10

我的回复如下:

XXX,你好!

“四年会有充足的时间来让我成长,成才.” 四年时间可能转瞬即逝。所以要珍惜。
如果你能找到方向,用四年寻找都是值得的。我现在也不敢说我找到了方向。
大学里面我不断涉猎各个领域,然后寻找自己喜欢的。
到现在也不知道自己是不是找到了。
感到迷茫,没有关系。你只要一直在的学习就好了。学到什么知识都不会让你吃亏。
如果你一点方向都没有,建议你可以学基础的东西,比如说数学、英语、数据结构、算法、C++
这些是将来无论从事什么方向,都需要用到的。而且本科本来就不见得要有什么方向,本科就是该大好基础的。

关于多做题还是多学习的问题。首先,两者是辩证的,缺一不可,相辅相成。多做题,打扎实基础,以后学习才能更快速;学习的多了,对于”题目”就有更高层级、更抽象的理解。
对于我个人来说,我从小学,中学就写过上万行的代码。所以我应该是属于那种先多做题,后多学习的类型。而且,其实我小时候学习也没有电脑,就是自己写在本子上,写了好多本。上中学以后才有电脑的。
大学以后,我看书很快,学习新技术也非常快。可能跟我基础比较扎实有关。
所以,希望你也可以多做一些题目。ACM可能有些比较难。你可以先找《数据结构》课本后面的习题练习一下。编程是需要多多练习,才能理解透彻的,跟数学一样,要多做题<。当然,你要根据你的实际情况来定,我的例子比较特殊<,很早就学了,花了几年的时间打基础,所以,可能不适合你,你要摸索自己的路。
什么时候,你看到一个题目,你脑中想到的只是算法,逻辑。而忽略了程序语言,语法细节就算有质的飞跃了。而不是说看到一个题目,还在想,一个for循环的语法是什么。
此外,练习快速提升的方法是,你要多多的阅读别人的代码,学习他们的思路,思维。一道题目,你用什么方法写,答案或者别人用什么方法写,他好在哪里,为什么好,他是怎么想到的之类的问题都要去想。可能你写一段时间代码之后,你就觉得无法提高了,这个时候,就要大量学习理论知识了。好的编程功底,能让你学习事半功倍。

世界上没有”计算机高手”,每个人涉及的领域不同,思维方式不同。所以很难界定什么是高手。flash/photoshop跟专业无关,有兴趣可以私下学,但是要分清主次。数学方面你可以看《具体数学》,线性代数之类的;学习C++可以看Thinking in C++,有基础了可以看Effective C++/More Effective C++。当你把这些书籍看完了,你自然就会知道你下一步会看什么了。

高数(尤其是傅立叶)用在信号系统、图像处理等地方;概率常用在模式识别阿,搜索,语音之类的地方;Google的最根本的PageRank就是个大矩阵,所以线性代数也很重要。所以你要好好学,都很有用的。我就比较后悔数学没有好好学。

很多公司要员工会Java/.net/vc++之类的,本科可能都不会。但是你要知道,本科学习的都是基础知识,是那些的基础,都是有用的。另外,你要在本科阶段,学习”学习的方法”。IT界技术日新月异,你不可能把所有知识都学会,你要获得的,是快速学习的能力和深厚的技术基础。
你学习冯诺依曼结构,学习操作系统原理,学习数据结构,好像公司都不看,但是,如果这些都不会的话,只会那些语言,就像建立在没有基础的浮空大厦一样。
本科生跟社会上编程速成班的区别就是科班出身的人基础好,知识面牢固。

另外,我以前还写过一个新生指南,你可以看看

欢迎随时交流

Sharp Mark
07-06-10

Comments