贺老师你好,我是一个大学生。我也看过你的专栏,觉得很有帮助。
我现在学习C和数据结构有一些时间了,也基本上掌握了里面主要内容。然后我现在不知道该做一些什么比较好,我想过去做一些小游戏,但是C又做不了界面。然后对于一些让我学习比如组成原理等相当基础的书籍的建议,我有这个打算,但是又有一点有心无力,总觉得现在再学习理论知识对我的帮助不明显。
我现在非常的郁闷,我希望老师能给我一个建议,到底是要去做些什么?学些什么?
谢谢回复。
【我的回复】
有些情况你没有讲清楚,如你是几年级的,什么专业,对什么有兴趣,将来如何打算,这些都和学什么、做什么有关。这类的问题因人而异,没有一个标准的、笼统的答案。是否可以补充一下你的情况,或者仔细考虑下你的兴趣和将来的打算,自己就可以给出答案。
【来信的补充】
我现在是大三,学的是信息与计算科学,不算严格的计算机系,我打算先学VC,再做其他的发展,我本人其实还蛮喜欢计算机。
贺老师,我是这么打算的,我想要学习软件编程,但是我又不想只是做一个程序员,到一定年纪后就*转行。我希望自己有着相当扎实的基础,多干几年,因为这个还是挺有意思的。
我现在遇到的麻烦是:我离毕业时间不多了,之前我学习计算机也就是学校的水平,想要努力不能没有基础。因此我在暑假,把数据结构和C语言重新看了一遍,觉得效果很好,当年上课时好多没听懂的东西,现在看着看着就懂了,而且主要算法题目都做了一遍,并调试成功。
我原本打算将windows程序设计语言学一学,可以编一些图形界面,连数据库等。这样子,将一个大致的框架流程学明白。但是这么做,有一些人就反对,认为我这样子会走弯路,应该先打好基础,专攻算法,这样子再学一些东西会轻松很多。
所以我想问,老师你怎么看呢?你是认为我应该先做哪一方面,是先专攻算法还是先学习编一些大的程序,像是游戏和一些项目?
【我的回复】
信息与计算科学,很好的一个专业,与计算机、软件工程等工程性专业比,科学的成份多一些,更易于进入到计算学科的深层去。实际上,这个专业的学生的算法素养应该要高于计算机专业的。但从你的表述看,并未进入到这个专业的核心去,现在想在工程上多做一些,也未尝不可。而计算机学科(非计算学科)也包含了科学与工程的两个方面。算法是科学部分的核心,而工程方面的学习,需要通过实践去提高。鉴于你已经是大三,从信中看出你也是准备去从事开发工作的,建议你这段时间的学习,从工程入手,至少在找工作时,能拿出一个像样的原创作品给人看。算法素养的提高是需要的,但已经不是纯为学而学的阶段了,以你已经有的经历,再深入也还是纸上谈兵。说“专攻算法”后,“学一些东西会轻松”,我总觉得不是很靠谱,不是算法不重要,而是工程能力的提高,并不是算法就可以顶起来的。再者,二者的关系不必完全分开,如在做工程时,遇到需要讲究数据结构和算法的时候,不要迁就,随便拿一个方案去应付,而是通过精心的设计和论证,在用中提高算法的能力。所谓的项目,不必一下就来很大的,注意循序渐进。
最后纠正你的一个看法,关于“*转行”。如果大学上了四年,现在要万般辛苦地具有“相当扎实的基础”,要学算法,做工程,只落得如此个“*”,何苦呢?为谋口饭吃,有的是办法。做足了准备让行业淘汰,真不至于吧。IT行业中的从业人员,有一个发展的台阶,当你到了一个层次,不需要你做某项工作了,只要你把握得好,结果中的换岗位,往往有升迁、高就的味道。
从这封信中看出,你需要提高的还有表达。我无法回复的第一封信,源于你表达时并未抓住问题的要点。多写一些文字,凡事注重理出头绪,是可以提高的。
【回信】
我先感谢老师在百忙之中给我回信,解答了我的疑惑。
老师在回信中说到信息与计算科学比其他的计算机专业有更多的科学成分,并指出我并没有深入这个专业的核心。我惭愧又不解,信息与计算科学在我看来,它好像基本是在学数学,虽然我数学学得还可以,但是我不是非常清楚它有哪一些部分是那些和计算机相关较密切的课程,哪一些课程是较多的涉及算法的学习。希望老师指点一二,要不我就身在宝山却空手而回了。
还有,老师建议我从工程入手,相对于计算机、软件工程等工程性专业,我有着较大的劣势,那对于那些工程专业,他们的强项课程又是什么呢?我需要补充一些什么样课程知识,有那些课程是工程比较重要的又不可或缺的呢?从工程入手,我的打算是学习相对较接近的windows编程开始,不知道老师有什么建议。
最后,我回头看了一遍第一封信,我的表述能力确实有所欠缺,我会尽量提高。
【我的回答】
有种说法你应该听过,计算机要求的数学基础很高。在计算机科学方面有成就的,学数学的占绝对优势。抛开你所在学校执行培养方案的因素,培养方案中所涉及的数学课,应该都是与计算机有关的。只不过,有些直接用,如数值分析、概率统计、线性代数(高等代数中的部分)等,有些,是建一般模型的基础,如离散、代数、逻辑、图论等,还有些作为基础,如数学分析。理解了数学中的抽象之美,懂得欣赏这些从具体而来的一般,在这个领域中前行,或者致力于让一般再回到具体,都是可走的路子。所有这些,可能都可以归结到算法上去,只不过,你需要自己去打通。计算机界的重大进展,大公司的核心技术,大多表现在抽象层面,反映在具体的编程技术上的少。对此,我也说不了太深了,建议你可以看《数学之美》和《研究之美》这两本书。
之前的来信,我以为你是那种数学不好的信科学生,数学还可以,但是有误解,我改变主意,建议你重新审视自己以后,再决定继续努力的方向,也请找些你自己专业的老师请教,可以选择在强化算法方面多下功夫,成为强项,这种人才难得。至少近两年,感觉类似做数据分析等工作的人很抢手,以后大数据的发展,也提出了更多的需求,而这些工作并不是一般计科的人能胜任的,你们专业的人至少在这些方面有优势。如果决定还是走工程、技术的路子,软件工程类的知识要补充,并且这些知识要靠实践获得。具体要学的技术,要看想做系统底层的工作,还是要在应用层面上发展,windows编程让你接触些底层的知识,而做应用,可能学些开发框架类的东西更适用。