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

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

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

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

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

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

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

计算机专业的自学路线图

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

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

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

学计算机的目的:

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

  • 以考试为目的的自学

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

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

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

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

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

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

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

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

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

  • 高等数学

  • 离散数学

  • 线性代数

  • 概率论与数理统计

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

  • 数据结构与算法

  • 计算机组成原理

  • 操作系统

  • 计算机网络

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

  • 编译原理

  • 面向对象的方法

  • 关系数据库的理论

  • 软件工程等等

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

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

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

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

选书和看书的基本原则

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

考研的四门课

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

(1)数据结构:

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

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

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

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

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

(2)计算机组成原理:

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

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

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

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

(3)操作系统:

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

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

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

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

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

(4)计算机网络

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

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

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

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

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

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

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

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

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

计算机算法基础_如何自学计算机专业相关推荐

  1. 计算机算法基础_强智科技继续冠名第十六届“强智杯”湖南省大学生计算机程序设计竞赛...

    2020年10月17-18日,第十六届"强智杯"湖南省大学生计算机程序设计竞赛在长沙理工大学成功举办,本次竞赛由省教育厅主办.省高教学会计算机教育专业委员会协办.长沙理工大学承办, ...

  2. 计算机算法基础_考情分析|2020年华南理工大学计算机考研考情分析

    这段时间会给大家各大院校20考研数据,2020华南理工大学计算机考研的初试数据如下: 计算机科学与工程学院 初试:一.408计算机学科专业基础综合 科目:数据结构.计算机组成原理.操作系统.计算机网络 ...

  3. 计算机文化基础教程教案,计算机文化基础_教案.doc

    计算机文化基础_教案 浙 江 中 医 药 大 学 教 案 2007 ~ 2008 学年第 2 学期 课程所在学院(部) 信息技术学院 课程所在教研室 计算机基础教研室 课 程 名 称 计算机文化基础 ...

  4. 算法简介及计算机算法基础——算法学习(四)

    文章目录 关注算法缘由 描述计算机算法基础 描述运行时间 循环不变式 参考文档 接下来的算法学习内容主要根据<程序员必读经典(算法基础+计算机系统)>一书而写,作为读书笔记,感兴趣的可以见 ...

  5. 华南理工计算机电路基础试题,2013年华南理工计算机电路基础_随堂练习答案

    2013年华南理工计算机电路基础_随堂练习答案 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.90 积分 第一章第一章 电电路的基本概念和定 ...

  6. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx 第 12 章计算几何基础计算几何(Computational Geometry)是计算机算法的一个重要分支,它要解决的是如何 ...

  7. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx 第 14 章NP-完全问题讨论问题的复杂性.根据其难易程度把问题分类.如果一个问题有多项式的算法,则称为可驾驭的(tract ...

  8. 计算机导论基础论文3000字,计算机导论课论文3000字

    计算机导论课论文3000字篇二 <浅析"计算机导论"教学改革> 摘?要:计算机导论是计算机专业学生必修的一门专业基础课程.也是计算机专业的入门课程.课程内容主要介绍计算 ...

  9. 计算机导论基础论文3000字,计算机导论课论文3000字(2)

    计算机导论课论文3000字篇二 <浅析"计算机导论"教学改革> 摘?要:计算机导论是计算机专业学生必修的一门专业基础课程.也是计算机专业的入门课程.课程内容主要介绍计算 ...

  10. 计算机电路基础学什么,"计算机电路基础"学习辅导.doc

    "计算机电路基础"学习辅导 "计算机电路基础(1)" 学习辅导 第六章 时序逻辑电路 (一)各种类型的触发器及其特点 触发器是指能够记忆一位二值信号的基本逻辑单元,也是构成各种数字 ...

最新文章

  1. 记住这35个英文单词,你就可以在RPA界混了!
  2. 机器学习中需要了解的 5 种采样方法
  3. 树上启发式合并问题 ---- D. Tree Requests [状态压缩+树上启发式合并]
  4. mac下nginx搭配php-fpm解析php文件
  5. 知识图谱(六)——关系抽取
  6. 论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
  7. vue function (i)第一次点击不执行_vue下$nextTick及原理浅析
  8. java fileinputreader_java BufferedReader,FileInputStream实现文本文件读/写
  9. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享
  10. 问题二十五:为什么有时候XnView无法显示PPM图片?
  11. iTextSharp 添加文字内容
  12. 使用BoundsChecker
  13. php+网络测速,网络测速步骤
  14. LeetCode 707
  15. Asterisk-Javanbsp;教程(中文版)…
  16. 品牌稿件怎么写?这些品牌稿件写作技巧值得一看
  17. 粉笔网页端资料分析仿ipad分屏插件开发完成总结
  18. 【PATB1041】考试座位号(题解+拓展)
  19. 深度学习标注工具2021-07-13
  20. MSP430驱动诺基亚5110液晶屏完整程序

热门文章

  1. 使用navicat创建mysql全文索引
  2. rtk采点后如何导入cad_CAD图片导入:如何对JPG图片进行描图
  3. 对JavaScript中 this 关键词的理解
  4. 五脏六腑在脸上的反射区图片_人体五大反射区的有图详解。
  5. 关于数据库中的二维表是不是关系的判断
  6. 计算机自检后反复重启 主引导,电脑开机老是重复重启的解决方法
  7. MySql存储含有特殊符号的微信昵称
  8. 浅谈如何根治慢性扁桃体炎-个人经验总结
  9. android中如何如何让dailog横屏显示
  10. STM32入门学习 第二天