计算机算法基础_如何自学计算机专业

少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。 ——刘向

我假设:( 1 )你具有高中以上学历,最好是计算机专业(或其他理工科专业)的低年级在校本科生,也包括那些想转行到 IT 的在职人员 ( 2 )你己经确定要自学计算机专业的核心课程,但不知道如何开始,怎样开始

适合自学的计算机专业应该具备三个特点,其一是实验难度适中且所需要的设备容易获得;其二是知识结构成熟,学习资料丰富;其三是难易程度适中,入门门槛较低,比较适合以上条件的计算机专业包括软件工程、物联网和大数据等。

相对于计算机专业来说,学习方向的选择要更重要一些。软件工程专业中比较适合自学的方向包括Web开发和移动端开发,物联网中比较适合自学的包括嵌入式开发,大数据专业中比较适合自学的方向包括数据分析。

Web开发包括前端开发和后端开发两部分,虽然软件团队中前后端开发通常是分开的,但是在大数据时代背景下,全栈程序员的需求量会持续增加,所以在学习Web开发的过程中应该前后端兼顾。Web前端的学习内容集中在三个部分,分别是Html、CSS和JavaScript,而后端开发则要选择一门具体的编程语言。目前Java、PHP、Python、C#是比较常见的选择,从当前的就业角度出发,可以重点考虑一下Java和PHP,但是从发展前景的角度出发,应该关注一下Python。

移动端开发也是比较适合自学的方向,移动端开发包括Android开发和iOS开发,另外还涉及到基于已有App平台的开发。移动端开发的知识结构相对要少一些,实验也比较容易开展,自学的过程中会比较容易的建立起自信心。相比之下,嵌入式开发则多少具备一些难度,首先是设备的选择,另外还涉及到较为复杂的实验环节,所以选择嵌入式方向需要具备较强的动手能力。

大数据技术体系目前已经趋于成熟,学习大数据分析也是比较不错的选择。选择大数据分析方向需要具备两个基础,其一是数学基础,其二是统计学基础,当然这两个部分的内容也可以边用边学。

计算机专业的自学路线图

美国计算机学会ACM发布了《计算机科学课程体系》的报告,当前最新版是2013年的。计算机科学被划分为18个知识领域。如下:

b54c6272448b078a557292383d86e6d1.png

76ae9f8cae852883d58b3ec881e1ced7.png

5ee5931770ce4562bcd2d7f6ee01bd1b.png

知识的掌握程度划分为三级:

47068513fad112a907af1a4f96c7e2ec.png

虽然计算机科学被划分为18个领域,但是这18个领域有着紧密的联系,构成了知识之网。这是我们的核心任务。

bd89bc6de9158efd082033bd6a2814fb.png

学计算机的目的:

  • 掌握上层应用的开发,为了能够在IT公司找一份工作。是以就业为目的的自学。

  • 以考试为目的的自学

  • 为了解决工作中遇到的特定问题,提升专业技能,升职加薪。以个人的职业发展为目的。

对于小白而言,首先要对计算机科学和计算机产业形成整体的认识。这方面可以读导论或者科普读物。建议先读吴军博士的《浪潮之巅》。这本书讲IT产业非常精彩。

紧接着,要做两件事:(1)掌握一门编程语言;(2)学好数学。这两者是并行的。

(1)掌握一门编程语言:

  • 第一种:C是一种结构化的编程语言。如果不会C,后面的课程根本学不下去。

  • 第二种:Java是一种典型的面向对象的语言。Java有活跃的社区和数之不尽的开源项目。

  • 第三种:JavaScript 或者Python。这两个语言都是属于动态编程语言的范畴,应用极为广泛。JavaScript是全世界使用人数最多的一种语言,并且JS的各种框架层出不穷,进步飞快,业界的工作机会众多,对找工作是非常有帮助的。但实话实说,JS在计算机专业课程中用的并不多。Python却不同,它被国内外的很多大学选为新生的第一门语言。尤其是在这个大数据时代,Python真是火爆。

上面这四种语言,是学软件开发必须要掌握的,从任何一个语言开始学起都可以。

(2)对于数学,我们必须掌握四门课程:

  • 高等数学

  • 离散数学

  • 线性代数

  • 概率论与数理统计

在掌握了编程语言,用编程语言写了一些应用程序之后,又学习了一些数学之后,你就可以进入计算机专业基础课程的学习。这些课程构成了计算机的核心课程群,我们通常把它称为「专业基础课」。专业基础课有十多门,其中最重要的是四门如下(这四个课程也是考研科目):

  • 数据结构与算法

  • 计算机组成原理

  • 操作系统

  • 计算机网络

除此之外,计算机基础课还包括:

  • 编译原理

  • 面向对象的方法

  • 关系数据库的理论

  • 软件工程等等

这次我们就只针对那四个考研科目进行介绍。

这里我要强调的是:计算机专业基础课程的学习,和我们在工作中实用技术的学习,这两者不是相互矛盾的,而是相互促进的。比如计算机网络课程,对web开发框架有帮助;反过来,如果写了web框架,就能更深刻的理解计算机网络这门课程。

在完成专业基础课和实用技术的学习之后,就进入了一个新的自学阶段。这个阶段可以针对你感兴趣的特定领域深入钻研了。比如你对人工智能感兴趣,那可以学一下机器学习、spark等等。这个时候的学习目的非常明确,即:培养特定领域的专业技能,让你成为特定领域的专家。

03a3b583a94676f84dfbe9e38a9b760a.png

4f47a19a7a81579564d2e4a9d6cb31f0.png

自学效果的好坏高度依赖于个人的学习动机,以及自学过程中采用的方式、方法、策略。要想取得好的学习效果,了解一些学习理论是非常重要的,这里推荐一本书叫《学习之道》。书中介绍了很多学习有关的新成果。

9b4cf16c0eb690449263987506d0fdb6.png

5f2b7691753589f84e3a34ee2b4fa352.png

选书和看书的基本原则

当某人告诉你,某书是某领域最好的书籍,不要盲目相信,要经过自己亲自试验再下结论。通常情况下,一本别人眼中的好书,可能的确质量很高,但如果阅读它超过了你的能力,那对于你而言,它就不是一本好书,因为你不具备所需要的背景知识,和相关的技术经验。

第二个原则是,选择那些你已经具备读懂前提的书。

459caec56e49aa8f64b47d6d85724dfe.png

阅读科普书籍的最主要目的是:了解特定领域的背景知识、明了这个领域的基本数据和概念,建立全局观。

4db3bb99358709e14acc73a739f54a21.png

读者:多读几遍真的很重要,我在看js的时候,把廖雪峰的教程看了好多遍,敲了好多遍。

a90308d22fdf1df888589f7ecfffc259.png

上图是计算机网络的经典教材。我们拿着两本书来举例。
比如《计算机网络:系统方法》这本书,作者在前言中就很明确地说明,它是针对网络设计者写的。注意是网络设计者,不是网络应用开发者。这本书讲的是计算机网络的基本原理。介绍的是最初的设计者遇到了什么问题。

读第一遍时,第一章一定要认真阅读,包含了很多的术语。

读第二遍时,每章的开头很重要。

比如《计算机网络:系统方法》这本书,里面讲到的网络安全这一章,如果你当前还没有涉及到这一块儿,这一遍就可以跳过。但是有关PCP协议的内容,在实际开发中用的很多,就很重要,这些内容分布于书中的各个章节,这就需要你把它们抽取出来。

419327c3b213cbed0ce4868f6a629c06.png

比如上面的这本《离散数学》,一页纸就要啃两个小时。

e4df726f2c49c640bb97e8077c010893.png

与书籍相比,视频的优点是很独特的,特别适合展示动的过程,比如程序的调试过程、算法的运行步骤等。

4429f1b2079b701fd34da250f597efa4.png

有很多编程工作属于工程领域,按部就班,有很多现成的套路,创造性并不强,数学在这些项目中并非成败的关键因素。项目中,确实有算法在底层做支撑,但这算法往往都有现成的底层库。你只需要知道如何调用就行,并不需要理解算法的细节,并需要具备多深的数学功底。对于初级程序员来说,主要干的是搬砖的活儿,特别是CRUD类的代码。

b10e087bc2059ce6e43347b982d49191.png

2d904cbf2c8ce05a605838230ede3ae2.png

同济的《高等数学》教材还是不错的,但是国内数学教材有个最大的问题就是:往往只讲法则、定理、证明、习题,不讲数学的发展历史、具体应用、也不强调解决特定问题的思路,不适合自学。

36623f670b0aa71ad45b4ce14147d4e3.png

普林斯顿的《微积分读本》,最大的特点是,讲的很细,采用内心独白的方式介绍微积分,有高中基础即可。内容虽然没有同济的多和深,但学习计算机来说,也基本够用了。

读者:这里也给大家推荐本冷门数学书,名字叫考研数学三部曲,销量很少。因为这本书优点是由浅入深,缺点是又臭又长,适合文科生看。

6b161b7ef7a5f2fb8ac8934ed1caf388.png

316d5c5d2aab89b41387bbe7e92efbc1.png

《计算机科学概论》起到的是建立全局观的作用。

3b7e3a4ac7690b8e4a494921de03798b.png

读者:想从Python 入门的同学,也推荐Headfirst Python。整个headfirst 系列都推荐。

读者:headfirst真的很不错,同推荐,特别设计模式。

b8921d0099879fff637d908bce1f8e90.png

c7e800ac7fd7932700832d6e12a77465.png

《深入理解计算机系统》这本书,对于形成计算机系统的全局观非常有用。这本书简称为CSAPP,很有名。这本最大的特点是从使用者,而不是从设计者的角度来组织材料的,难度适中,文字流畅。但这本书不适合零基础入门,你至少应该首先学过计算机导论,并且有一定的C语言开发经验,会用Linux。

读者:CSAPP看的时候要C语言并且要看计算机专业导论,不然看不懂的。

考研的四门课

下面介绍计算机专业的几门骨干和和核心课程。同时也是考研的四门课程:数据结构与算法、计算机网络、操作系统、计算机组成原理。

(1)数据结构:

dff0dfcc262a9c2f1a64c5a1a9075133.png

上图中,数据结构与算法包括了两部分内容。

现在的大数据和人工智能,完全就是算法。

d6bf79036ebdd493a52299977f44051d.png

上图中,第一本书有两个版本:java版本和C语言版本,难度适中。后两本书,较难。

8445e9f0582ad1866a5c4325eca2cfab.png

68601dfa41a2296c83dccd47ac4e09e0.png

对于多数人来说,掌握算法,只需要知道算法的思想、应用场景和优缺点就可以。实际开发中,你要设计新算法的机会并不多,并且那些应用很广的算法,都已经在框架里提供了现成的组件。这些组建内部已经实现了算法,你只需要知道是怎么回事,会调用就可以了。比如说加密和解密的算法。

考研和大公司面试,也不会考到复杂的算法,准备前多刷几遍即可。

(2)计算机组成原理:

29aef3fd925432f3e3689b997d6e718e.png

06eaea9e3bb54951878ee33cf5361bab.png

计算机组成原理主要是介绍计算机由哪些部件组成的,这些部件是如何互相协作、完成处理功能、同时用来满足各种成本和功耗指标的。

学习这门课程之前,通常需要学习数字电路基础。

学完计算机组成原理之后,再去学操作系统和编译原理。

f3b88406fcd6b6196ed500e8bd3b1c9a.png

学习计算机组成原理之前,建议大家先看《编码》这本书。

(3)操作系统:

3311b4e2c80a93c6b39013ac0f7e8335.png

395b02f78cc6744036258ea2ec1df41b.png

上图中,操作系统的分为两类:教材和专著。

c9d62bfe14bfb1af8b533c151b9c5604.png

操作系统的教材里,数学公式不多,但它并不是说操作系统这门课就很容易学,学好操作系统的关键是一定要把它和软件开发、动手实践结合起来。

很多操作系统都是用C语言写的,建议大家在学习操作系统之前,先学习C语言。

学习操作系统,最重要的是明白操作系统的内部机理。推荐大家用C语言在Linux下学习。

进程和线程也是属于操作系统的范畴。

(4)计算机网络

5c063138d77562a320fb45b5176c89fa.png

f5dcaf45a936c4e30009423c09044e60.png

我推荐大家用C、java、Phthon这三种语言去编写网络应用程序。

另外必须要学会操作系统。网路协议栈通常都是由操作系统来负责实现的,网络应用基本都是多线程的。

上图中这里介绍了三本经典书籍。计算机网络中一个重要的特点是分层。我们会发现这三个经典教材是三个视角。

  • 第一本:从上层协议介绍到下层协议。

  • 第二本:从顶向上介绍。

  • 第三本:横切的方式,针对特定的问题(比如安全问题、性能问题)来展开介绍。

00e32fc58823144e7a3aba87d75db8b5.png

学习计算机网络的关键,是明白上面这三个问题。

一旦了解了计算机网络的这些基本原理,你就会发现,理解实际开发中的各种通信协议和各种网络库,就会比较容易。

掌握好相应的网路协议,是掌握上层应用软件开发技术的关键。比如,如果连http协议都没掌握,就去写web应用, 好比在沙滩上盖楼。

26fff3c5926aeed026e4eee4d2715f64.png

b2c2001577b3bffd023073011ddb6247.png

  • a31fe5058c6a4c63fedf2f69709c248b.png
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值