作为计算机专业学生,最应该学习的课程前五位是什么?.docxVIP

作为计算机专业学生,最应该学习的课程前五位是什么?.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作为计算机专业学生,最应该学习的课程前五位是什么? 先列一下我心目中的 TOP5:数学课(线性代数,概率 统计,离散数学,高等数学 /数学分析)算法和数据结构可计 算理论组成原理和体系结构操作系统另外,这个问题其实意 义不大, 因为如果你想成为一个基础扎实的 CSer,其它课就 算不在 TOP5 里面你还得学,比如数电 /模电、编译原理、数 据库、计算机网络 ...一个更有意义的问题是: 学了那么多课, 如何把它们串起来,在脑子里这些课程不再是离散的点,而 是一副连通图,有一种俯瞰的感觉,然后真正形成自己的核 心竞争力?关键在于抽象能力。第一次接触抽象是大学低年 级学数据结构的时候,记得很清楚当时学一个概念叫抽象数 据类型( abstract data type),大概意思就是一个数据结构, 接口是一回事,实现是另一回事,比如栈,作为使用者你只 需要知道它有 push、pop、isEmpty 等方法,但它的底层实现 到底是 array 还是 linked list ,你是不需要知道的。用通俗一 点的话说,抽象就是你好好做自己的事,以及知道别人能帮 你干什么事,至于别人是如何帮你完成的,你没必要知道。 这个简单的思想大大提高了开发者的效率,让开发者只专注于要解决的问题,而不是一些细枝末节的事。孟岩在他的文章里也提到过“关注重点”这件事,虽然没有明显地提及抽象二字,但他的意思和抽象表达的意思是一样的:我主张, 在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。 原因是这样的,任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重大影响的,而其它很多东西都是琐碎的、非本质的。因此,集中学习时必须把握住真正重要那部分,把其它东西留给实践。对于重点知识,只有集中学习其理论,才能确保体系性、连贯性、正确性,而对于那些旁枝末节,只有边干边学能够让你了解它们的真实价值是大是 小,才能让你留下更生动的印象。 如果你把精力用错了地方,比如用集中大块的时间来学习那些本来只需要查查手册就 可以明白的小技巧,而对于真正重要的、思想性东西放在平时零敲碎打,那么肯定是事倍功半,甚至适得其反。计算机专业课程之间完全可以用抽象来联系:每一门课想做的事就 是利用下层提供的接口, 实现功能, 然后再给上层提供接口。这样一层一层的抽象就构成了几乎所有的专业课。先来看最高层,问题。刚学编程的时候,会先学一门课导论课或者编 程入门课,我当时的入门课叫做“程序设计” ,课程内容是 介绍一些问题,然后介绍一点编程语言的知识,作业是一些 编程问题, 比如八皇后、 素性测试之类的比较常规的编程题。 这门课的目的一般都是介绍“问题”的,介绍计算机科学有 哪些有挑战的问题,让学生对计算机专业有一个感性的认识,而不是对特定编程语言或者算法的学习,所以这类课程一般用 python 来编程。再往下一层,算法和数据结构。这一 层的目的是学习 /实现各种算法 /数据结构,提供给上层功能。 比如排序,问题解决者只要知道这里应该用快速排序,而不 是选择排序,而把快速排序的实现留给这一层的开发者,从 而使各种优化都可以对上层透明,比如小数组变插入排序、 中位数取 pivot 、三向快速排序等, 这些优化调用者完全不必 要知道, 他只需要知道: 哇,这个库提供的快速排序还真快。 再往下一层,语言层,毕竟所有算法都要由某一门语言来实 现。这一层的存在使得算法的设计可以脱离具体的语言。不同语言又提供了不同的抽象,像函数式语言就比命令式语言的抽象级高,更高的抽象级意味着更加专注问题本身(不需要考虑内存布局、 CPU 使用等)以及更少的代码量。再往下 一层,编译器 /解释器。我们编写代码是用高级语言,而 cpu 上执行的是机器码,所以这个抽象层帮我们做了这个转化。 这个抽象层的好处是,高级代码的编写者完全不需要知道这个程序所运行的操作系统和硬件平台,任何有该语言编译器 /解释器的机器,程序都可以跑(从而实现了跨平台) 。应用 层开发者可以不用知道这个由高级语言到机器码的转化具 体是怎么实现的,毕竟编译器优化的编写和优化完全是一个 团队的工作量,开发者关注问题的解决,编译器负责转化出 高效的机器 , 各干各的, 正是抽象的重点。 再往下一 ,操作系 。 OS 向开 者抽象了硬件( CPU 、内存、 Disk 、 NIC 等),并且以 syscall 的形式向用 提供服 。 OS 的 是最能体 抽象的,虚 内存和 程 程序以 自己独占着 内存和 CPU,同 隔离了不同 程以防 意 程; 文件系 用 可以方便地 取存 数据,而不需要直接操作底 的 硬 ;文件描述符抽象了底 的 pi

文档评论(0)

183****0046 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档