大学本科计算机专业应该学点什么?

答应给一位刚上大一的小盆宇指点一下,所以我这里简单的说点吧。有砖家看了觉得可笑的话,请勿发表高见。谢谢。

首先还是要推荐Sir前辈的《胡侃》(点击可传送),将近20年过去了依然是经典。然后,我对各种课程的理解是这样的:

首先简单说下英语吧。大学是没有人“教”你英语的,英语课很扯淡,英语全靠自学。好在讲语法的地方高中都讲完了,大学基本就是词汇量,实际应用等等。英语的重要性在于:四六级、 考研、还有原版专业书。其中原版专业书是最重要的。你将来要接触的计算机的资料,英文的比中文的要管用的多。

然后是数学,数学的重要性不亚于计算机的专业课,在某种意义上说,要比某些专业课更重要。大学计算机专业的数学课大概有这么几门:高等数学,线性代数,概率与统计,离散数学,数值分析。

高等数学:大学数学的基础,从学分也能看得出来它的重要性。绝大多数学校工科学生都学高数,而理科(尤其数学专业)学的是数学分析。二者内容差不多,都是极限微积分之类的东西, 但是高数的重点在于求出式子的解,而数分的重点在于证明公式。换句话说,高数偏应用,数分偏理论。不好说哪个更重要,二者的思维方式是不同的,我觉得这个东西的重要性就在于对自己逻辑思维的锻炼,从这点上来说,二者是同样重要的。因此,有空都看看无妨。推荐高等教育出版社的《高等数学》(一般学校的高数教材),北大出版社张筑生的《数学分析新讲》,sir前辈推荐了南京大学出版社的《数学分析教程》,还有余力的话,可以做一下吉米多维奇的《数学分析习题集》(简直恐怖!)和李永乐那本厚厚的考研数学手册(叫什么我忘了)。

线性代数:另一门数学基础,跟高中以前的数学长得都不一样,上来就是一个大方块行列式。但是学着学着你会发现,其实就是外观上不一样,做起来还是套定理套公式。这就无聊了。想不无聊的话,可以看看高等代数。按sir前辈的说法,高代就是线性代数加上一点多项式理论,不过他推荐的书倒是比较厉害的(从吉米多维奇开始那两个自然段,我就不摘抄了)。

概率与统计:还是套公式,而且比起高数和线代来说套的更机械,更容易一些,只要能分辨出来这是xx分布就可以了。不过呢,希望学过之后能记住这些分布,因为将来如果深入学习计算机的话,这是一个坎。比如以贝叶斯同志命名那些算法,像什么贝叶斯网络,贝叶斯分类器……将来接触到数据挖掘、模式识别、人工智能领域的时候,概率与统计会或多或少的发挥一些作用。

离散数学:这才是正统的计算机数学。所谓“离散”的意思就是“不连续”,因为计算机中的数都是不连续表示的,所以离散数学中的算法更像是针对计算机发明的(当然这句是胡扯,只是二者有些相似,很多计算机的算法还是出自离散的,数据结构中的树和图几乎照扒图论)。离散数学是个合集,包含了集合论,图论,代数学,组合数学,数论,谓词逻辑这些,其实每一门数学都可以研究得很深。对离散数学整体推荐北大出版的《离散数学教程》,还有机械工业出版社翻译的《离散数学及其应用》和《具体数学》(这本只有英文的)。下面分别就每一门课程简单的讨论一下:
集合论:相对简单一些(除了古典集合论以外),我是简单过了一遍没有深究;
图论:图论是很难的,按sir前辈的说法,“全国真正懂图论的人不到30个”,可能最近20年多了一些,但是应该也不到100个吧(口胡。图论难在没有固定思路,似乎每个题目都有独特的证明方法,还有一些根本就还没有证明出来,比如旅行商问题。推荐王树禾的《图论及其算法》。
代数学:群环模域的性质,是很好玩的,有些时候很抽象,变幻莫测,但是仔细研究会觉得这个东西令人着迷。前面学过的高等代数,只是代数学中的一小部分。有些代数不建议过早接触,像什么李代数、交换代数之类的,容易入魔。
组合数学:就是排列组合那堆东西,但是要深好多。本科离散很少有讲到的。有余力看一看。推荐清华卢开澄卢华明写的《组合数学》,还有机械工业出版社翻译的《组合数学》(这本建议读英文原版,应该已经到第5或第6版了,中文翻译还是第3版)。
数论:这个最初接触的时候是更久以前了,应该是在小学,学习整除还有质数、最大公约数这些东西。这在数论中叫做初等数论。此外还有代数数论、超越数论什么的,也是不建议过早接触。推荐陈景润的《初等数论》(薄薄的一本几天就看完,小学生也能看),还有北大潘承洞潘成彪的《初等数论》。
谓词逻辑:也算相对简单一些的吧,初中学过的。推荐科学出版社的《面向计算机科学的数理逻辑》。

数值分析:其实我也不知道怎么介绍,当初没好好学,到现在也没怎么用得着。sir前辈那边写的是“计算方法”,介绍的也比较简单,可能计算机用到的比较少吧。

研究生阶段还有两门数学课:随机过程和泛函分析。都是比较恐怖的课程。听说哈工大计算机研究生挂率第一的是随机过程,第二是泛函,中科院计算所挂科第一的是泛函,第二是随机。早有人说“随机过程随机过,泛函分析心犯寒”……

除了上面推荐的书,还要严重推荐一套美国研究生的教材GTM,一系列有200多本,涵盖各门数学。像《线性代数》《线性代数与抽象代数》《代数学》《图论》《概率论》等等,都很不错。

然而……需要硬着头皮啃英文。

接下来说说计算机吧(终于到正题了)。

外面疯传的“xxx是世界上最好的语言”根本不用听,用心学好几门最基础的语言:c,java,c++。个人觉得,就语言的难度来讲,c和java加起来都比c++要简单的多。c是偏底层的语言,面向过程,着重于精细控制内存,学的时候应该让自己“站在内存的角度”考虑问题;java是标准的面向对象语言,能教你用对象的角度去看待问题。c自顶向下编程,java自底向上。都学完了能理解很多计算机的“禅意”。c++包罗万象,既可以写成c的面向过程,又可以写成java的面向对象,各种灵活,然而,这种“包含一切能力”的想法毁了这门语言,它太复杂了,几乎不可控制。说“毁”有点夸张了,但是它的复杂程度确实是c和java无法相比的。推荐《c primer plus》《how to c program》《java核心编程》《疯狂java讲义》《c++ primer plus》《c++ primer》,effective系列,《c陷阱与缺陷》……严重不推荐谭浩强的书,容易误入歧途。

顺带推荐下编译器吧,c/c++推荐visual studio,如果嫌太大可以用MinGW,DevC++,codeblocks,拒绝TC2/3以及VC6;java推荐Intellij Idea,Eclipse,Netbeans,不建议MyEclipse。

如果有人推荐其他语言的话,他们说的对,但是,不用听。比如,C#拥有宇宙最强编译器visual studio的支持,语法跟java类似但写起来就是舒服,开发图形界面so easy;js是动态语言,不讲类型,而且适应各种平台;php轻松写网站,想要什么功能只要去网上查查函数就好;go轻松写大规模并发,抛弃了java里面那堆冗余的东西;我是写python的,万能型语言,开发效率极高,什么库都有……no,打好基础才是最重要的。很多学python踩坑无数一脸懵逼的人到最后还是老老实实的去看里面的内存分配原理,要是早会了c这些都是小儿科。

语言是入门,在入门过后,进来之后,别急,还有一道门,首先会遇到的是数据结构和算法。数据结构就是数据在内存中的表达方式,算法是数据在cpu中的处理方式,二者是相辅相成的。所以就有了那句著名的式子:程序=数据结构+算法。我个人觉得数据结构和算法应该是计算机专业本科最重要的课。希望在学习的时候,不是想当然的在纸上写一堆伪代码,那样基本上是白写。要把讲过的数据结构和算法用语言实现出来,这样才算掌握。推荐清华出版社严蔚敏的《数据结构(C语言描述)》《算法导论》《算法》,如果都看完了,可以试着看一下那套令人闻风丧胆《计算机程序设计艺术》。

数据结构和算法过后,就是计算机的专业课了,大概有这么一些:编译原理、操作系统、数据库、信息论与编码理论、计算机网络、计算机组成原理、计算机体系结构、嵌入式、计算机图形学、软件工程、计算机安全学。本科大概就这些了,如果还有其他课,基本都是讲座性质的,都是研究生阶段主要的研究方向了。

编译原理:有一门课叫形式语言与自动机,大概可以算这门课的先行课程,跟数学里的计算方法也有些关系。讲的主要是一些文法,怎么把我们的自然语言一步步的变成计算机能听懂的逻辑和过程。很惭愧的说,这课我是没听懂。不过,学完之后,编译原理的前面一半都很轻松了。推荐蒋宗礼先生的《形式语言与自动机》以及机械工业出版社翻译的《编译原理》(龙书)。

操作系统:可不是简单的讲讲linux和windows了事的。操作系统四大块:进程、内存、IO、文件,这才是要学的。当然,学的时候推荐装个linux系统,你会发现越用越爽,从开发角度来说,比windows舒服的多。现在比较流行的是centos和ubuntu,估计两年后有变化的可能性不大。推荐书机械工业出版社《现代操作系统》,高等教育出版社《操作系统概念》,还有个两大厚本的《Linux内核源代码情景分析》。读linux类操作系统源码,对操作系统的熟悉有很大帮助。

数据库:会讲ER图,关系,范式等等内容,当然也会讲SQL。仅仅只是SQL的话,那不叫数据库。但是讲SQL的时候,最好装个数据库练练手。推荐使用mysql或postgresql,当然要是统一使用别的数据库那就跟大家一起吧。我当年使用的是sql server。所以我对这个数据库印象一直不好(明显的个人偏见)。推荐机械工业出版社的《操作系统概念》。

信息论与编码理论:这门课应该属于算法课向某一方面的延伸,同时又属于计算机网络、密码学的前提。

计算机组成原理:现在学校基本上不会单独讲汇编了,都是放在计算机组成原理里面讲。这两个东西真的是让人恶心到吐血,你中有我我中有你,剪不断理还乱,藕断丝连骨肉相连。大概就是这么个情况。计算机体系结构可以算是它的后续课程,在讲内存分配的时候,还能跟操作系统有点关系。推荐《计算机系统结构:量化研究方法》《深入理解计算机系统》。

软件工程:大学里基本属于故事课,没有代码,没有考验智商的东西。不过,对于以后整个项目的理解还是很有帮助的。从需求、设计、到开发、测试、再到上线、运维,你会对项目流程有个完整清晰的认识。从此以后,软件不再是你写的那三两行满是bug的小玩具,而是许多人团队配合的作品了。

其他几门课,嵌入式、图形学、安全学,我也不是很懂,就不介绍了。都是倾向于某些方面的。高端的课程我不想介绍了,一是本科学不到,二是我也没多少了解。在研究生课程中,有几个非常热门的领域:人工智能,数据挖掘,机器学习,模式识别,云计算,物联网,自然语言处理,搜索,等等等等。需要把本科那些数学和计算机知识都掌握得很扎实才行。

有几门课程我一直是觉得莫名其妙的,大学物理,模拟电路,数字逻辑(数字电路)。没感觉学完之后用到了。还有什么计算机导论,编程基础之类的课,应该不是给计算机专业的人开的,随意听听就好。还有不得不学的政治历史类课程,呃。。。我能不能说我马哲还挺厉害的。。。嘛,扯远了。

这篇文章大概也就写成这样吧。等我再想起来什么,可能随时补充点。

时间: 2024-10-18 15:13:18

大学本科计算机专业应该学点什么?的相关文章

【自考】大学本科那个数据结构怎么学,期末不挂科指南,第1篇

数据结构那些事 如果你现在在上大学,恰好又是计算机相关专业 那么你肯定知道有一个非常枯燥的必修课<数据结构导论> 当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫<数据结构导论> 从今天开始梦想橡皮擦要写一套非常有趣的课程了 这套课程目的很简单 目的:如何通过数据结构期末考试,有趣! 适合人群: 大学计算机相关专业,有这门课程,然鹅你没学,或者因为一些莫名奇妙的原因,你旷课了 你想通过自考,注意自考,然后获取计算机的一个本科学历,这门课也是必修. 一门课

大学的计算机专业学生怎么学习

现在到大学基本上都是上了十几年学,不说是学习老手,也是应试老手了,但是大学越上越不会考试了,更不会学习了,面对计算机专业这个对专业要求很高的专业,得想想怎么学习,怎么面对快速发展的技术,很多人说讲究效率,但是效率怎么产生,得有策略,十几年的学只是教会了我们怎么考试,但是没有教会我们怎么学习,特别是怎么自学,在大学三年,慢慢就发现现在学的不是学习,而是怎么学习,在这个技术快速更新的专业,学会学习,才是立命之本. 就拿我们学校专业课程来说,我总结了一下路线,基本上就是那么几种: 1.软件开发 2.a

计算机专业-世界大学学术排名,QS排名,U.S.NEWS排名

2015年美国大学计算机专业排名 计算机专业介绍:计算机涉及的领域非常广泛,其分支学科也是非常多.所以在美国将主要的专业方向分为人工智能,程序应用,计算机系统(Systems)以及计算机理论(theory)这四个部分. 每个部分又有很多的研究方向,诸如人工智能与知识工程,模式识别与图像处理软件,多媒体技术与图形学,智能信息系统工程与软件自动化,数据库与数据仓库,数据挖掘与知识发现,计算机网络技术及其应用,计算机系统与控制,信息系统安全,计算机安全等等. 这些研究方向隶属于以上四个研究方向但是分类

计算机专业务必学好的基本课程

大一的新生又快到各自的大学报到了,和往年一样,虽然计算机专业的就业率并不高,然而由于其宣传的到位加之社会的计算机运用方面不断的进步,给各个大学的计算机专业以一次又一次的生命力,然而从这些学校中毕业的学生也一次又一次的证明大学计算机教育的质量之差,水平之低.这其中不仅有大学本身的责任,也有相当的责任在学生,下面我列出计算机专业务必学好的几门课程,希望能给还未走出校园或即将走进大学校园的你带来些许帮助. 第一门:C语言程序设计 这个几乎是这个专业的开始,也是这个专业的结束.好像武林中最高的宝典,一般

谈谈我对计算机专业的理解: 计算机专业入门(问题 引导 学习思路)

转载请注明出处: http://blog.csdn.net/j123kaishichufa/article/details/47400175 这段时间,一直在看<深入理解计算机系统>.渐渐发现爱不释手,欲罢不能.有种相见恨晚的感觉.这使得自己回首自己本科时候,为什么总觉得入不了计算机的门?这本书也促使自己思考一下 计算机专业到底学什么,为什么要学这些?有什么联系? 本人2007年入学本科,专业计算机,当时就读于一所211学校. 可能有些人在本科或者研究生期间已经接触到了这本书,那恭喜你,有本好

大学计算机专业有非编程的吗?

就现在的大学计算机专业来看: 1.软件开发专业(计算机科学与技术.软件工程等):,就是编写代码,开发程序,也是我们常说的程序员,码农: 2.计算机网络技术(通信,网络安全与管理等):界定很宽泛,主要涉及领域有通信协议,网路信息安全等等.    3.电子专业:更倾向于硬件,单片机,嵌入式等 4.计算机应用技术:,倾向于"应用",本科这个专业很少见,多见于专科.什么都学,软件.硬件.网络.数据库,但都是皮毛,目标是结合其他行业领域的特点使用计算机.比如:工业设计/制图,动漫/flash,多

计算机专业四年本科的课程表是什么样的?

如果认为自己随便看看,有人说一句就可以去做东西的超级学习者,请略过! 如果有人工作了那么多年还要讨论c语言.java语言还有所谓的简单的python的大大牛人,也不用看了 计算机专业四年本科的课程表是什么样的?本人非科班出身,感觉还是少了很多基础知识,想根据科班的课程设置补一补,越具体越好,最好能贴个表出来被浏览632,171大一上 全校都是学一样的知识 高数,线数,大学物理之类的基础课.大一下学期 计算机开了面向对象的程序语言设计这些课 主要学C++ java这些.计科开了python,MAT

【转】计算机专业不是学编程

学计算机的如果你有耐心看下去,我敢保证这绝对是一种收获大师提醒: 计算机专业不是学编程,而是懂得计算机的工作原理,以及和计算机相关的学科技术.一个高手不必懂得编程,coder是最底层的人物,最重要的是思想,解决问题的思想.对计算机专业的学生来说,英语和数学也是最重要的.编程不用于实际,编得最好也是花哨,毫无意义.对于初学者来说,应该懂得更多的why 原理,而不是更多的how,那是工作后的事情. 每一计算机学者都应该有自己的思想,不要跟着别人走,不要看着别人用什么新技术作出什么来的时候,你就心动了

计算机专业如何高质量的走完大学四年?毕业成为Offer收割机

前言:迷茫本就是青春该有的模样,但不要让未来的你讨厌现在的自己. "就要毕业了. 回头看自己所谓的大学生活, 我想哭,不是因为离别,而是因为什么都没学到. 我不知,简历该怎么写,若是以往我会让它空白. 最大的收获也许是--对什么都没有的忍耐和适应--" 这是一个大四同学给李开复的信,这封来信道出了不少大三.大四学生的心声.大学期间,有许多学生放任自己.虚度光阴,还有许多学生始终也找不到正确的学习方向.当他们被第一次补考通知唤醒时,当他们收到第一封来自应聘企业的婉拒信时,这些学生才惊讶地