优秀计算机大学生是怎样炼成的?——计算机专业学习的误区
The following article is from 计算机大学生 Author 史爱武
随着IT行业的不断发展,计算机专业每年都是高考十大报考热门专业之一,也是每年招生人数最多的专业之一。2016至2019年,计算机类专业的招生计划数上涨了32%,2019年全国普通本科招生计划是32万多,招生院校数也逐年增加,计算机类专业在高校中的普及率较高,接近八成的本科院校都开设了计算机类专业。
随着我国互联网行业的发展,对于计算机类人才的需求量进一步提升,不少高校都上调了计算机类专业的招生计划数。
每年全国招收30多万计算机专业大学生,四年的在校计算机大学生达到120多万。很多计算机专业的大学生在进校之前除了会用手机或计算机玩游戏之外,对计算机都不怎么了解,有些同学是听从父母家长的强烈建议选择计算机专业的;还有部分学生进大学前连计算机摸都没摸过;对计算机很熟悉的很少,高手更是凤毛麟角。
计算机专业的大学生,不仅要具备良好的数学基础知识,还要具备良好的逻辑思维能力,不仅要会操作计算机,更要喜欢动手实践,能为各行各业提供基于计算机的问题解决方案。
有一些同学甚至还对计算机的学习有着一些天真的误解,计算机专业出去就会有高薪,计算机专业就是写代码毕业后就是程序员(这一重大误区会在后一章节专门解释)……, 殊不知这些错误的理解和想法很可能会在将来的学习道路上给自己添堵,让自己的学习更加困难,甚至失去兴趣。
要知道,计算机的学习还是要靠一定的悟性,而兴趣是培养悟性重要的一部分,如果因为方法或者想法不对,让自己越学越难,越来越困惑,心态好的可能还会狠下心来,硬着头皮咬牙苦学,有可能也能蹚出一条路来;而心态不好的也可能就此放弃,只是混着考试过关,混着毕业找个其他的工作安心上班,除了用电脑打打游戏上上网,可能以后再也没有机会接触IT这个行业了。
那么如何才能让大学生在学习计算机的道路上更加顺畅,让同学们在计算机的学习上更加深入呢?这里总结一些计算机学习中常见的误区,希望能够帮助计算机专业学习者(特别是初学者)更准确更全面的了解这个专业,避免踩到雷区,尽量少走弯路,更快地成长成为优秀的计算机大学生!
01
误区一:计算机专业就是学习编程技术
有些人即使没有这个想法,潜在还是有这种意识,以为学会了一门编程语言,就是学会了计算机技术。甚至许多计算机学院的学生也有这样的念头,认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程统统都不管,极端的学生只要书上没带“编程”两个字他就没兴趣看。
毫无疑问,编程能力是计算机专业学生需要掌握的一项重要技能,而且计算机专业的学生毕业之后,绝大多数也是从事编程的工作。这也可能就是导致很多人(甚至是计算机专业大学生)认为学习计算机就是学习编程技术的一个原因吧。
实际计算机领域里,编程之外的学习和工作空间很大,包括了数据库,多媒体,计算机网络,信息安全,人工智能,模式识别等等方面。编程工作只是把这些具体技术在理论研究或者工程实践中解决问题的逻辑处理算法和流程加以实现。网上的炒作和现实中良好的工作待遇把编程这种工作神秘化了。
其实很多程序员心里都明白(特别是转行搞软件开发的,或者是培训班快速培训出来的编程人员),自己这些东西,学的时候并不比其它专业难,自然也不会高档到哪里去。
这其实就是“无知者无畏”。对计算机知识和技能还是掌握的太少,对计算机专业没有一个全面的了解。片面认为,计算机专业就是点编程技术,学好了编程技术就是学好了计算机专业。
编程的人不一定对计算机技术的了解就一定很高。一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的;各大互联网公司里,不懂代码的人也是很多的。计算机行业的工作岗位除了程序员之外,还有很多,就算是针对计算机专业应届毕业生,也还有需求分析师、测试工程师、系统运维、数据库管理员、IT售前工程师,IT售后工程师等多个基本不需要编程的岗位。
有关这个误区的进一步解释将在下一章节详细展开论述。不过,计算机技术并不只是编程技术,计算机工作岗位也不仅仅是程序员,非编程类工作岗位很多,并不代表这些工作就轻松。和编程岗位一样,这些岗位也是需要我们每天学习、进步。
02
误区二:数学基础差学不好计算机
我们知道数学是大学中比较复杂比较难学的一门基础学科。有很多刚进校的大学生,不论是不是计算机专业的学生,多少会对数学有一定的抵触;计算机专业的学生就更不用说了,因为他们开的数学类课程比较多;有的可能还会将数学和计算机划上等号,认为如果没有学好数学就学不好计算机,那么真的是这样吗?
要回答这个问题,首先我们要了解数学和计算机的关系,计算机和数学之间关系可以说是相辅相成密不可分的。其实在很久以前计算机还是被归为数学的一个分支,但是现在它基本已经有了自己的学科体系,而且在研究计算机技术的过程中,有时反而会推动数学的发展。
数学作为计算机专业学生的基础学科,对于学生理解算法和代码逻辑有很大的帮助。
那么,计算机和数学的关系这么紧密真的就意味着,我们没学好数学就无法学好计算机专业知识吗?答案是不一定。
计算机专业里确实有一些专业基础课程,像数据库原理、算法、操作系统和计算机组成原理等,这些计算机理论和原理级别的课程确实需要以数学为基础,特别是算法,数学不好的话很难搞明白那些高深的算法。但是这些课程毕竟只是少部分,大多数的专业基础课和专业课程(像软件工程,计算机网络、Java语言等)是用不到很高深的数学知识的。
所以在大学计算机专业学习的过程中,数学对于不同的人有着不同的意义。对于算法工程师和学习某些特定技术的学生(例如机器学习、密码学、计算机图形学等)或者想继续深造从事科研工作的同学来说数学是非常重要的。但是对于将来想从事编程工作等实际应用的同学(如网页设计工程师,Java Web工程师,软件测试人员等)来说数学就相对不那么重要了。
这些应用型的工作并不需要用到高深的算法和复杂的逻辑结构,更多的是基于成熟的开发框架或者开放API来实现系统的功能和性能。想从事这一类岗位的同学应该花费大量的时间在实际动手能力上,而不是去研究数学知识,不断加深对各种框架的理解和学习,让自己掌握更多的新技术或者编程语言。
我们也能看到,有很多其他专业(甚至有些都没有开设和计算机有关的数学课程的专业)转行做计算机一样做的很好。所以,那些数学基础不够好,担心学不好计算机的同学完全可以打消自己的顾虑,只要你找对方向并且深钻下去,你也可以成为计算机某个方向的高手的。
最后要强调的是,计算机专业是需要高等数学等多门数学基础的,但是并不是要求像数学专业那么高,很多是基础知识。对于大部分计算机应用级岗位来说,即使数学基础比较差也能够胜任。
对计算机专业而言,逻辑能力比数学能力更重要,学习数学对于大学生来说是一个很好的训练逻辑思维能力的过程,对于计算机专业的学生来说更是如此,不论是写代码或者将来从事计算机相关的研发工作都会有很大帮助。
数学基础扎实,你在计算机这个行业有机会走得更高更远。
03
误区三:想学最好的编程语言
在计算机学习的过程中容易产生的另一个误区就是想要学习最好的语言或者说是担心自己学习的不是最好的语言。
现在基本上每个月都会有一些语言的排行榜,各式各样,同时还会伴随着各种新闻表示某某编程语言势不可挡,某某编程语言与某某编程语言逐渐拉开差距,某某编程语言就业平均月薪超20k之类的话。这些排行榜和新闻对计算机大学生选择适合自己的语言或者是将来的就业没有太大帮助,反而可能会误导大学生做出错误的选择。所以我们在选择之前还是需要经过理性的思考和判断,根据自己的情况来做出选择。
其实计算机编程语言并没有好坏之分,存在即合理。
一个编程语言既然存在,而且到现在还有很多人运用它,那它肯定是有其他编程语言无法取代的独特之处,所以说编程语言只有自己喜不喜欢,运用的场景适不适合的区别,并没有好坏之分。
最好的编程语言是不存在的。
社会是会发展,科技会进步,编程语言也会不断更新迭代和出现新的编程语言。编程语言只会随着发展越来越好、越来越多,只有更好没有最好。
我们常说的最好的编程语言,只不过是在特定时期内面对特定需求时有一门编程语言特别适合而已。
这里拿几种当前流行的编程语言举例:
(1)C语言:C语言基本是我们计算机专业的必修课,现代编程语言几乎都脱胎于C语言,被誉为“上帝语言”。我们所熟知的Java的底层代码就是用C/C++编写的。C语言编写的程序代码量小,运行速度快,功能强大,同时语法机制灵活,可以直接访问硬件,但是它危险性高,开发周期长,复用性差,维护性、扩展性和可读性都不高。所以C语言更适合广泛应用于计算机的底层系统开发,例如操作系统内核、编译器、JVM、驱动程序,还有各种嵌入式软件,固件等。
(2)C++:C++可以说是对于C的继承和扩展,它的运行效率高,高效安全,跨平台性非常好,几乎所有处理器和操作系统都支持C/C++,C++功能在C的基础上增加面向对象的特点,代码可读性好,复用性高,运行效率高。但是C++的学习难度稍大,而且程序代码相比其他语言要大。它的应用范围很广,前至各种客户端,后至网络编程,硬件底层。
(3)Java:前几年最火的编程语言,近几年仅次于Python,具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球较大的开发者专业社群。但是,相比较而言,它运行速度稍慢,不能像C/C++一样做底层开发,主要用于开发大型企业级项目和移动端软件。
(4)Python:Python是近年来最火热的语言,上到大学,下到小学都开始学习Python,可见它很容易上手,而且它还有大量的开源库,很强的可移植性和嵌入性。但是它的运行速度也比C/C++慢,主要应用在系统编程、图形处理、数学处理和人工智能算法等领域。
从以上几个例子不难看出,各种计算机编程语言各有千秋,各有自己的优点和缺点,我们应该根据具体的应用领域和应用场景来选择不同的编程语言,并不需要去刻意研究它们的好坏,或者盲目追求哪个语言最火就去学习哪个语言。
完全可以以不变应万变,根据自己的兴趣去选择适合自己的开发语言。
如果对底层开发比较感兴趣,可能学习C/C++更加合适;如果对Web或者企业项目和移动端软件开发比较感兴趣,可能最好还是研习Java语言和Java Web开发技术;大数据技术(比如Hadoop框架)是这几年来受到广泛关注的新技术,而它的语言基础就是Java语言,初学者想要学习大数据技术必须先学习Java。如果对网络爬虫、人工智能、自动化运维等更感兴趣,可能学习Python更合适。
这里也只是举出了几个例子,还有很多编程语言也有各自的应用领域,所以说语言没有孰好孰坏,就是个工具,合适的场景使用合适的工具就行。
对于计算机大学生来说,至少熟练掌握一门编程语言,如C、C++、Java等。而对于将来要做软件开发工程师的,精通的编程语言至少是三门:C语言;一门面向对象语言(C++、Java等);还有一门脚本语言(Python,Perl等)。这里说的“熟练掌握”和“精通”都指的是要能用编程语言解决实际问题,而不是只是学了书本知识。
学以致用,解决实际问题才是关键!
如果选择了一门语言一定要将它熟练掌握,要精通,不要以为看完了一本编程语言教材,会写几行代码就是掌握了这门语言。编程是解决实际问题的,检验自己是否掌握这门编程语言的方法其实很简单,自己是否能够用这门编程语言解决一些实际问题。
计算机就业市场最缺的就是这种能够在某一技术领域有深入理解的人才,而且只要熟练掌握了一门语言,再去学习另一门编程语言也不会很难。
所以希望计算机专业大学生能够理性地去选择,认真地去学习和理解所学的编程语言(或技术),做到真正的术业有专攻!
04
误区四:重视理论学习,忽视动手实践
计算机专业是一门应用性很强的专业,很多大学生缺乏应用实践的眼光来看待计算机学习。
他们在学习过程中虽然收集了大量资源,看大量的学习资料和视频,但是常常只停留在文字表面,并没有和应用实践相结合。很多教材和视频里面所讲的知识都是一种引导性的知识和例子,很多学生只满足于对这些表层知识的学习,认为只需要把书本相关资料的内容理解就够了。
对这种只顾理论知识而不动手实践的同学来说,他们虽然学了一堆知识,仍然不能解决现实中的实际问题,或者遇到实现问题仍然茫然不知所措。更槽糕的是,学习的计算机理论知识,由于没有动手实践来巩固加强,没过多久,这些理论知识也就忘的差不多了。
学了就忘,其实这些都是很正常的现象。因为理论学习和实际应用是有差别的,只有在实践的过程中才容易发现自己的错误,才能更加灵活和深入的理解这些理论知识。而且人的记忆曲线表示,如果不经过及时的复习,这些学过的东西很快会忘掉,而最好的复习方式就是经常去用它,经常不应用的理论知识和编程技巧肯定是容易忘掉的。
其实解决“学了容易忘”这些问题的办法很简单,就是动手实践的时间一定要多于看书或是看视频的时间。
对于编程来说,花时间把书籍或是视频中的案例全部实现出来,即使感觉自己会了,也要亲手写出来。就像小时候写日记,写作文练笔一样,可以通过编写大量的案例代码,不断培养自己的编程思路和逻辑思维。训练一段时间之后,编程思路就会像写作文一样流畅,这个时候,你开始知道如何用程序来解决实际问题了。编程基本功有了,再在校内或校外参加一些真实的项目实践。这样一来,基本就能具有解决实际问题的应用思维了。
对于计算机硬件或者其他计算机方向来说,动手实践也是很重要的,想从事计算机网络的同学要多动手操作各种网络设备;想从事计算机软件或硬件测试工作的同学来说,要熟悉各种测试方法和测试工具;想成为产品需求分析师的同学来说,要善于市场分析和竞品分析,总结出未来产品的创新功能点和卓越的性能要求。
要注意的是,动手实践的过程不要有一种害怕出错的思想。有一些同学看到自己动手做的东西(比如,编写的代码)没有显示错误信息,就会很开心,并且精心保护好自己做的东西,很怕一不小心动了什么就会报错。
这种害怕出错的学习方法也是危险的。
没有出现错误信息,并不代表实现的东西是能正常工作的,也可能是你的测试数据太少,或者你的测试方法并不完全,也不真正表示你已经充分理解了这个案例的工作原理和掌握了这个案例的知识点。
动手实践时不要害怕出错,失败才能教会我们成功。
真正的计算机高手每天都在处理各种出错信息。只有通过不断出错,才能见识到计算机软硬件系统中出现的各种可能的异常状态。努力解决这些出错的过程,就是一个计算机大学生深入掌握理论知识,提升自己分析问题和解决问题的能力的过程。也只有这样的不断解决实际问题,我们所学习的理论知识,包括操作系统、计算机网络、编译原理、信息安全等知识,就能在实际解决问题过程中加深理解和充分掌握,而且还能把这些知识融会贯通综合应用。
错误给我们带来刺激和进步,学习和成长的道路常常是要经过错误。如果我们要学习,就必须要有所经历,并且允许犯错。正是在错误中我们有所学习,而不是通过成功进行学习。丘吉尔说过:“成功是能够热情不怠地从一个失败走向另一个失败的能力。”
成功人士总是把他们的错误看成未来的投资。如果在年轻时犯错,他们会感到很高兴。错误对他们来说就是思想和知识上的财富。他们从错误中学习,并且试图使这笔投资带来巨大的收益。
05
误区五:追求时髦技术,忽视基础
在计算机学习的过程中有很多的同学为了赶时髦,不停地去学习那些新的技术和框架,从而忽视了基础知识的学习,这也是一个很常见的误区。
大多数的人都希望自己的东西能够马上用起来,变成钱。这种想法对一个已经进入职场的计算机从业人员或者项目经理来说是合理的,而且IT技术进步是如此的快,不跟进新技术就是失业。
但是对于在校计算机大学生来说,完全是一个计算机行业的初学者,学习时间也比较多,眼光一定要长远些,打好扎实的专业基础才是重中之重。一个并未进入到行业竞争中的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习“为什么” 而不是“怎样做”。
时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软硬件系统开发的成本。在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。
基础知识在计算机专业的学习过程中非常重要。计算机专业基础课程,比如数据结构,操作系统、编译原理、计算机组成原理、软件工程等等,这些基础知识的学习可能并没有那么有趣,会有些枯燥,可能会花费很多的时间,而且学习它们不会有立竿见影的效果。这些基础课程的学习虽然不能让你马上就实现一个Linux一样的操作系统,或者一个编译器,但是这些都是将来更深入学习计算机技术的坚实基础。
万丈高楼平地起,勿在浮沙筑高台,所谓的基础知识,就好比是盖房子要打地基一样,没有坚实牢固的地基,房子就没有稳定性。根基不稳,早晚会对自己的发展造成重大的影响。计算机知识的学习过程就好比练功,如果说学习最新的框架技术、最新的编程语言是外功(招式),那么像计算机操作系统、体系结构等基础知识的学习就是练内功,只注重招式而内功不扎实是不可能成为顶尖高手的。
计算机从业人员只有将基础知识牢记在心,才能产生对知识的共鸣与升华;基础打好了,对学习新技术也大有裨益,有利于大大降低学习新技术的难度和节省学习新技术的时间。因为这些时髦技术不论怎么更新,它的底层技术总是离不开这些基础知识。只有在大学期间学好这些基础课程,熟练掌握这些基础知识,才能更好地去了解和学习那些新的技术。而且,对于许多关键的应用领域来说,这些基础知识甚至是至关重要的。
06
误区六:只顾自学钻研,不顾交流沟通
在学习的过程中还有这样一种情况,有的同学总是自己埋头苦干,认为只要自己努力自学和钻研就能把技术学好,以自己为中心,也不愿意和别人交流分享,出现了问题只想到自己解决,从没想到与别人交流沟通,请教别人。
自学钻研本身是好事,学习就应该以自己为主。但是,如果极端的自我主义就不太好了,这也是在计算机学习过程中会出现的一个误区。
在大学的学习过程中,这种自我封闭的学习方式会导致很多的问题。如果学习遇到的问题一直得不到解决,问题就会越积越多,给后续的学习带来较大的压力。最常见的就是有些同学在学习时陷入僵局,不愿意寻求他人帮助,花很多时间在一些本来在别人点拨下很容易就能理解的问题或完成的工作上,有时甚至需要自己花费好几天时间才能搞明白或者完成工作。而这些耽误的时间原本自己可以用来做更多的事情和学习更多的知识。
要知道每个人思路不同,对于问题的理解也会不同。可能一个很简单的问题是因为自己把它想复杂了,或者因为自己忽视了一些小错误。在这个时候,如果敢于沟通勇于沟通的话,老师或同伴的一句话可能就能惊醒你这个梦中人,也会让你产生“原来还有这种操作”的感觉。这一句话可能包含一个开发工具,一种学习方法,或是一个你没有访问过的网站。
有效的交流沟通往往能在大学生学习过程中起到莫大的作用,它能让你的学习效率和工作效率大大提升。
这种自我封闭式的学习可能在大学过程中导致的问题还不够突出,产生的后果还不会太严重。因为大学学习的东西相对都是比较基础的或者做的系统都是Demo级的,可能有时候花的时间会多一点,但是一个人的力量也能够解决。一旦进入了社会,基本都是一个团队协同工作的,而且项目团队的任务都是有时间限制的,特别是有些产品的投入市场是要抢占市场先机的,推迟一天可能导致整个产品的市场占有率大大下降。
所以,这种只顾埋头自学钻研,不顾交流沟通的学习和工作方式暴露出来的问题就会被无限放大,随着项目的规模变大,学习和工作的内容就会越多也会越难,一个人的力量往往是做不成事的。这种方式就会导致整个项目团队缺乏凝聚力,也可能会拖整个项目的后腿。更严重的话,可能因为一个人的交流不畅导致整个项目失败。这个时候,团队的交流沟通,团队的协同作战就愈发显得尤其重要了。
计算机专业学习的一个很好的方法就是同行之间的交流。可以不必谈论任何特定的内容,可以是正在学习的技术,可以是认为很酷的技术工具,也可以是你正在研发的系统。你会发现很多人并不只是喜欢交流具体技术,也可以交流很多宏观的关于行业和未来趋势的,你将了解到其他人是如何看待计算机行业以及技术和行业的未来发展。极有可能,你认为理所当然或从来没有考虑过的事情在与人交流沟通过程中会得到一些新颖别样的见解和观点。
计算机大学生要不断培养自学能力和刻苦钻研精神,但是,也要敢于交流,勇于交流,多多分享,虚心请教;在交流的过程中让自己更深入理解技术和知识,发现自身的缺点不足和问题,从而进一步完善自我、提升自我。
推荐阅读:
该填志愿了,国内大学计算机专业哪家强?给所有入门编程者的几点建议!
每日打卡赢积分兑换书籍入口
👇🏻👇🏻👇🏻