1. 目标人群
刚考上大学待入学的计算机类的萌新;
目前仍然对自己专业比较迷惘的低年级的;
2. 学什么?what?
2.1 必修课程
数学类: 微积分 线性代数 概率论与数理统计
CS类: 编程语言 数据结构 操作系统 计算机网络 计算机组成原理 数据库
语言类: 大学英语 4,6 级, 英语日常写作,英语口语;
2.2 选修课程
数学类:统计学基础 离散数学 复变函数 高等代数 数值分析 数论基础 凸优化 运筹学 随机过程
CS类: 编译原理 数字图像处理 博弈论 汇编语言 算法分析与设计 机器学习 计算机视觉 自然语言处理 计算机体系结构 计算机网络体系结构
3. 怎么学?how?
3.1 学习的建议
(1) 数学类的学习建议
- 微积分和线性代数弱关联,可以同时并发学习,而概率论与数理统计和微积分关联较大,需要微积分的基础。
- 大学的工科数学的不要在局限于计算和做题,而在于应用。 大学数学三重境界:第一,听课 看书 做做题 记记概念 做做总结 考得不多 完~; 第二,深刻理解概念,遇到问题可以用数学语言表示出来,转化成一个数学问题,并可以解答(抽问题-建模-解答),说明理解数学概念,对相关方法也很熟;第三,遇到一个困难的问题,会分解成一些小的数学问题或者是一个多步完成的数学问题,解决各个小问题,合并成一个大的解决方案,根据指标会优化问题,或放松或转化条件,达成指标,提升性能,这说明对工科数学不惑,数学当工具灵活运用了;
(2) 编程语言的学习建议
每个计算机的低年级学习,都有要学习哪门编程语言的困惑,其实什么c c++ java python 这几门语言你肯定要学,只不过有侧重点, - 你对计算机底层更感兴趣,如操作系统啊,算法设计,编译原理啊,计算机组成啊,那么你需要侧重学习c++;
- 对网站开发,对app开发感兴趣,那么需要侧重学习java;
- 如果你对人工智能感兴趣,那么需要侧重学习python;
- 如果你对数学建模 数据分析感兴趣,你可能需要学习 matlab R python 语言;
当然一般地,你可以根据自己的学校开设的第一门编程语言来同步学,如学校开设的是c语言作为入门,我觉得你就可以c++ java python 任选一门同步学起来,总之,一入编程语言深似海,编程语言说难听点就是工具,但是绝不像大家刚刚入门是学到那些for while if i++ --i 这些简单的语法,任何一门流行的编程语言,其身后都有一个庞大的生态圈,足够大家学习好多好多年,而且,任何一门编程语言的深入底层,大家一定会和编译原理,操作系统,计算机组成这些知识打交道,对于初学者来讲是很难的,没法一口吃个胖子,每每深入可能就会遇到底层的"大booss",干不动。
总之,关于编程语言学习路线,我的建议是:先学好,学校教授的may be c? c++ ? java? python? 其他?
如果是c语言,建议选一门java 或者 python 自选;如果是c++, 可以多找刷题平台多刷题;特别是,java c++ 市面上有很多经典大厚书,而python 基本逃不掉 数据分析的各种库,人工智能的各种框架。
最后,编程语言本身不难,但编程语言本身的设计和实现底层知识很难,且中文资料也相对匮乏,对我们其他专业课的要求也很高很高,编程语言的生态圈很庞大,要学习的东西超级多,一个四年精通一门编程语言(语法 程序设计 语言本身实现 语言背后的生态圈)那你的大学一定足够充实和精彩!
(3) 数据结构的学习建议
- 数据结构学习之前一般需要学习一门编程语言为基础,先学习其理论,即各种数据结构,在利用编程语言动手实践,完整实现各个数据结构;
- 仅仅会实现数据结构还是不够的,要会应用,这个时候需要去找OJ(OnlineJudge)平台或就刷题网站做题了,如果你想要参加学校的程序设计比赛(ACM),毫无疑问,你需要直接在一些大学的平台刷题,如杭州电子科技大学OJ,北大OJ等(当然还有一些国外著名的OJ,等你需要的时候,你已经知道你的目标和前路了),如果你想坚持下去,打比赛,锻炼自己,你一定需要加入学院的程序设计组织,在专业老师带领下,和队友一起拼搏奋斗!(主要靠队友一起肝,一起刷题,丧气,失望,兴奋,释然 各种情绪经常交替,ACM 属于高投入 难度大 一般回报小的比赛,主要时锻炼人,每一位坚持打了1-3年的计算机学生都值得被尊重!)如果你和我一样,就想熟悉数据结构,运用他,可以直接在一些就业的刷题网站刷题就可以了,如leetcode。
- 当你刷了几百道数据结构题时,各种数据结构很熟悉时,一天不刷题浑身不快活时,那么顺其自然,一直做下去把;
(4) 计算机组成的学习建议
计算机组成是计算机专业一门很硬很难的课,想学的一般,需要投入大量时间,如果你没有任何基础,计算机组成这门课就像一政治课,都是文字,没啥计算;
- 我认为计算机组成是需要 模拟电子 和 数字电路 这两门前置课程的,而模拟电子又需要电路基础,但是为了学这一门,学三门非强相关的电气课程又很不划算,这门课对授课老师的要求很高,一般老师扛不住,一个优雅的复读机;我建议大家采用直接学,哪里不会补哪里;
- 理论和实验结合,建议谷歌一个国外顶尖计算机强校的实验部分,因为一般学校实验也搞不起来,大部分都是51单片机 stm32 树莓派,好点的是FPGA,这些实验也需要大量额外的知识才能跑起实验;我大学做的实验大部分都是混过去的,所以......
- 如果你觉得学得好有趣,那么,学完计算机组成可以继续学习计算机体系结构,这个一般需要攻读硕博学位了,为中国的芯片设计 和 操作系统 添砖加瓦;
(5) 计算机网络的学习建议
- 计算机网络 并不要需要前置课程,但是需要一些专业常识,你要感兴趣,随时都可以学习,困惑的地方,谷歌一下就好;
- 计算机网络如果你觉得有趣,可以继续学习,无线传感器网络,计算机网络体系结构等高阶科目;
(6) 操作系统的学习建议
操作系统国内出了清北和一些计算机强校,一般老师上课也会上成文科背诵课,原因如下,操作系统的教材基本都是文字描述设计方法或设计思想,不基于某类特定操作系统,那没有操作系统设计或实践的老师只好说思想啦。(基于某种特定操作系统,作者一般也扛不住,要很细节才行,读者也不好读)。然而,操作系统确确实实是一门超级重要的专业课,因为现在很多很多软件的设计 优化 原型的思想都借鉴了操作系统中的一些设计,如软件的设计模式 模块化 大型系统中做缓存 都来源操作系统。
- 学习操作系统的一些设计思想,各种算法的设计思路和思想,将学到的设计思想泛化到其他的大型软件设计上去,解决性能瓶口问题;
- 在具体硬件平台上,做实验,做实验,做实验,学校没那条件,做网上的实验,一些top高校的实验是开放的,都可以去做;
- 如果实验实在太难,至少linux系统至少要同步学习来;
(7) 数据库的学习建议
没学习数据库之前,你会发现,学了这么多知识,开发个网站,开发个app好难呀!等你学习了数据库,你就可以开发一些简单的应用软件了(当然也建立在你编程语言学的不错,其相关生态库也了解情况下)。 数据库,本科阶段,学校教授的一般关系型数据库的相关概念,然后以其中一种数据库做实验,然而,数据库其实是一门理论性、技术性和工程性很强的学科。企业中有一类专门为数据库设置的岗位,叫DBA(Database Administrator)。
- 尽可能的设计一些完整的数据库
- 大量练习数据库语句(sql)
- 特别地,关注数据库的查询优化和性能优化技术
- 进阶地,自己实现数据库的引擎,这也是一块“硬骨头”(一般国内只有名校的顶尖学生会做的事,颇具挑战,出来一般都是企业千金难求)
- 不要仅仅关注学校教授的关系型数据库(mysql sqlserver orancle),一定要自主提前学习非关系的数据库(redis mongodb neo4j等等),拓宽自己的眼界,关注设计和优化两个方向,顶尖同学会关注数据库的底层实现和自己创造数据库的引擎,数据库引擎的优化等等;
- 关注一些大数据,分布式的技术;
3.2 学习的资料
(1) 微积分
课本推荐:
- 一般地,学校教材都是同济大学的高等代数上下册或学校自编的
- 一定要到图书馆多借几本微积分教材,交叉混合看;
- 网络搜索,自查网友推荐的课本(知乎或助教或比较靠谱的大学授课老师)
MOOC推荐:
- 浙大苏德矿教授(矿爷)MOOC
- 高防科大 朱健民教授 MOOC
- 哈工大 MOOC
- 北大 王冠香教授 微积分基础
- MIT 18.01 18.02 微积分(看过国内的高数会发现,国内数学比较讲究体系,计算,推导,往往学过一段时间没用就会忘记,但是国外比较偏向概念解释,图形化,帮助理解,记得深刻,中西合璧才是绝配)
(2) 线性代数:
课本推荐
- 同济大学的线性代数
- gilbert stang 线性代数 中文版
- 张宇考研的线代习题集(线性代数9讲)
- 汤家凤的考研线性代数辅导书(他在网上也有视频讲解)
MOOC推荐
- 山东大学MOOC 秦静教授 线性代数 + 线代习题课
- MIT18.06 gilbert strang 教授录制,经久不衰,经典一绝,必看,一定要看,而且要看2-n遍,直接看不一定能看懂哦!
- 清华大学的线性代数 学堂在线
- 东南大学的矩阵分析,需要线性代数的基础了,直接看肯定看不懂
- 哈工大 严质彬 矩阵分析 也需要线性代数基础
(3) 概率论与数理统计
课本推荐:
- 浙大 概率论与数理统计
- 中科大 陈希孺 概率论与数理统计
MOOC推荐:
- 南大 范红军 概率论与数理统计 b站(哔哩哔哩)
- 浙大 MOOC 概率论与数理统计
- 网易公开课 可汗学院公开课:概率(http://open.163.com/newview/movie/courseintro?newurl=%2Fspecial%2FKhan%2Fprobability.html)
(4) 编程语言
书籍推荐:
- c语言: c primer plus , c和指针 , c陷阱与缺陷 , c专家编程
- c++: c++ primer , c++ 编程思想,effctive C++, 深度探索C++对象模型 c++ 官网 http://www.cplusplus.com/
- java:java核心技术,Java编程思想(https://lingcoder.gitee.io/onjava8/#/sidebar), java并发编程实战 ,深入java虚拟机,jdk源码 java官网 https://docs.oracle.com/javase/8/docs/
MOOC推荐:
- 郝斌老师的c语言入门课程:https://www.bilibili.com/video/BV1os411h77o?from=search&seid=15912117136332054834
- 中国MOOC大学,北大 郭炜c c++ 入门课程
- java入门课程, 浙大 翁恺
(5) 数据结构
书籍推荐:
- 大话数据结构,通俗易懂
- 算法导论,工具书,讲得全
mooc推荐:
- 浙大MOOC 陈越教授 数据结构(基于c语言)
- 清华 学堂在线 邓俊晖(邓公) 数据结构(基于c++)
(6) 操作系统
书籍推荐
- 计算机操作系统 汤小丹
- 操作系统概念 黑皮书
- 线代操作系统 黑皮书
- 深入理解计算系统 黑皮书
- 30天自制操作系统
- 深入理解linux内核架构 红皮书
- 鸟哥Linux 系列图书
mooc推荐
- 哈工大 MOOC 操作系统
- 学堂在线 清华 操作系统 (含实验课,难度大,需要汇编基础)
(7) 计算机网络
图书推荐
- 计算机网络 谢希仁
- 计算机自顶向下 黑皮书
- tcp/ip 详解 三件套
mooc推荐
- 哈工大 MOOC 计算机网络 三件套
(8) 数据库
书籍推荐
- 数据库系统概论 王珊
- 数据库系统概念 黑皮书
- mysql必知必会
- 高性能的mysql
- mmysql技术内幕 InnoDB存储引擎
mooct推荐
- 哈工大 MOOC 战老师 数据库(哈工大出品 必属精品 )
- CMU数据库 15-445/645 b战视频(cmu的一系列都不错哦)
4. 为什么要学?why?
4.1 为何要学习数学?
- 买菜用不到,但赚钱买房炒股一定会用到;
- 底层打工仔肯定用不到,但工程师一定用到的,正是你用到了,你才是工程师,当然也没啥了不起;
- 稍微有点技术含量的工科工作,一定离不开数学,如现在计算机行业高薪的AI算法工程师,数据分析师,量化交易.....
- 工程上的一些验证和优化,必然要建模验证,用数学方法描述,数学方法优化;
- 学习数学,至少可以培养耐心和打磨心态,不会成为一个没有礼貌没有耐心的同志,会做一个普通理性开心的普通人。
4.2 为何要学习CS这些专业课?
- 一切的工程深水区都是这些底层学科;
- 学好cs专业课,你让自己成为更加不可替代的“螺丝钉”;
- 大型系统的性能瓶颈,你可能会想到优化方向,不会把工作搞砸,能挑起担子;
- 深造才有基础,没准能为中国梦的计算机行业 添砖加瓦,天才少年梦成真;
- 年纪轻轻,学到就是赚到,无意中培养自我的事业根基,找到自我兴趣,为之奋斗,免得蹉跎光阴,懵懵懂懂,整天瞎鸡巴想人生意义......
- 空闲时间用来学习,没那么多爱恨情仇,保持年轻,不容易老......
- 经常学习,脑袋瓜子反映快,别人骗不到自己,不存在“我读书少,你别骗我的”烦恼;
- 人丑就要多读书,人美更要多读书,腹有诗书气自华!
5. 还是学不够,到哪里找资料继续学?future?
(1) 网络公开课
中国mooc大学 网易云课堂 网易公开课 学堂在线(清华的) A+ 课堂派(北大的) 哔哩哔哩(众所周知,b站是学习网站) YouTube(科.学.上.网是计算机学生的基本功,不然你学的永远是n手知识) MIT CMU 等强校大佬的开的公开课 (不知道在知乎上搜 提问 )
(2) 学校的图书馆
大学里一定要充分利用,还要经常Push 学校常买新书,没事多多建议 多发邮件,hh;
(3) 学校的讲座
一定要留意学校里面的小范围讲座,学术研讨,没准你就找到为之奋斗的一生事业!
学术大咖讲得一般都学科超级前沿的东西,要不就是目前的主流 比较热的东西
(4) 学校图书馆的在线学习资源数据库
学校图书馆的在线学习资料数据库,一般学校都会买 万方 知网 ACM(美国计算机学会) EEE/IET Electronic Library(IEL) Ei(工程索引) 等一些数据库没事可以找找搜搜论文
善用google scholar,找找专业论文
(5) 知乎 谷歌
(6) 老师 学长 学姐 (万不得已,水平不好鉴别,不一定靠谱,特别是普通学校的学生混的比较好的,不一定有真才实学,而是会社交)