自学
```sequence
title: 计算机自学路线图
participant 数学基础&专业基础理论 as C
participant 编程语言&实用技术 as S
C->S: 1.高等数学;离散数学;线性代数;概率统计
S->C: 2.C/C++;Java/C#;Python;JavaScript
note left of C: 0基础
note right of S: 深入钻研
C->>S: 并行学习
S->>C: 并行学习
C->S: 3.数据结构与算法;计算机组成原理;操作系统;计算机网络
S->C: 4.各种流行的开发框架和工具
note right of S: 人工智能;图形图像;云计算;物联网
note over C,S: 特定技术领域
```
计算机自学路线图
浪潮之巅-it产业讲的比较好
title: 计算机自学路线图
participant 数学基础&专业基础理论 as C
participant 编程语言&实用技术 as S
C->S: 1.高等数学;离散数学;线性代数;概率统计
S->C: 2.C/C++;Java/C#;Python;JavaScript
note left of C: 0基础
note right of S: 深入钻研
C->>S: 并行学习
S->>C: 并行学习
C->S: 3.数据结构与算法;计算机组成原理;操作系统;计算机网络
S->C: 4.各种流行的开发框架和工具
note right of S: 人工智能;图形图像;云计算;物联网
note over C,S: 特定技术领域
ACM总结的18个计算机科学关键领域
缩写 | 关键知识领域(英文名称) | 说明 |
---|---|---|
AL | Algorithms and Complexity | 算法与复杂度 |
AR | Architecture and Organization | 体系结构与组织 |
CN | Computational Science | 计算科学 |
DS | Discrete Structures | 离散结构 |
GV | Graphics and Visualization | 图形与可视化 |
HCI | Human-Computer Interaction | 人机交互 |
IAS | Information Assurance and Security | 信息安全 |
IM | Information Management | 信息管理 |
IS | Intelligent Systems: | 智能系统 |
NC | Networking and Communication | 网络与通讯 |
---|---|---|
OS | Operating Systems | 操作系统 |
PBD | Platform-based Development: | 基于特定平台的开发 |
PD | Parallel and Distributed Computing | 并行与分布式计算 |
PL | Programming Languages | 编程语言 |
SDF | Software Development Fundamentals | 软件开发基础 |
SE | Software Engineering | 软件工程 |
SF | Systems Fundamentals | 系统基础 |
SP | Social Issues and Professional Practice | 社会性主题与职业实践 |
关键知识领域(Knowledge Area,KA)
- 核心(Core)内容
- 选修(Elective)内容
衡量掌握程度
-
Familiarity(了解):What do you know about this ?
-
Usage(会用):What do you know how to do ?
-
Assessment(评估与决断):Why would you do that ?
熟悉():你知道吗?
使用():你知道怎么做吗?
评估():你为什么要这样做呢?
一、数学基础
高等数学(同济版)必修!
- 主要微积分,主讲法则定理证明习题;不讲发展历史,应用,强调具体的思路
- (普林斯顿的)微积分读本:就是作者的内心独白,
线性代数
-
先读科普的 《漫画线性代数》
-
《线性代数及其应用》 真实的展现了应用
离散数学=高等数学+线性代数 。必修!
-
《数学之美》 先学《离散数学导学》
-
推荐: 《离散数学及其应用》
概率统计 大数据需要的
二、专业基础课
前四个是考研必须要的,还有编译原理,面向对象的方法,数据库理论,软件工程。。。
全局观:
1、《计算机科学概论》
Nell Dale的《计算机科学概论》
采用剥洋葱的方式从内向外介绍计算机科学
J.GlennBrookshear的《计算机科学概论》
每一个主题自然而然地引导出下一个主题,由具体到抽象逐步推进。
2、《深入理解计算机系统》
1.数据结构与算法
Data structure and algorithm
主要内容:数据结构与算法的理论基础、各种数据结构/算法的介绍
书籍:《数据结构与算法分析》(java语言描述)、《算法图解》、《算法基础》
学习目的:
算法要培养的核心能力–是–>针对特定问题,设计解决方案—需要用到—>算法的设计算法的评估
算法要培养的核心能力–包容–>算法的设计算法的评估
学习前提:离散数学、编程语言
初步了解:《算法图解》《算法基础》
入门:《数据结构与算法》
深入学习:《算法导论》《算法》
2.0 计算机组成原理 (考研科目)
书籍:《计算机组成与设计》(看这个,也叫做计算机组成原理)
顺序:数字电路基础->计算机组成原理->操作系统->
->编译原理->–
学习内容
- 计算机系统概述
- 指令集设计
- 处理器设计
- I/O与存储系统设计
- 并行计算系统设计
- 云计算平台技术
学习要点
指令集(Intel IA32/64 、MIPS 、ARM)<–汇编程序员看到的计算机
^ (实现)
(实现) |
微体系结构 <–CPU(芯片)设计者看到的计算机
计算机体系结构 <–实现计算机设计者看到的计算机
学习顺序:
《编码》(隐匿在计算机硬件背后的语言)->《计算机组成与设计》->《计算机体系结构》
中间的书或者为:《计算机存储与外设》、《计算机组成原理》
2.操作系统
“操作系统”与程序员
软件工程—-〉第N+1层
操作系统—-〉第N-1层
多数程序员日常工作所在的技术层次—-〉第N层
学习前提:
数据结构与算法、计算机组成原理、编程语言(c语言)
可以做:
信息安全;编译原理;计算机网络
书籍:
经典教材:《操作系统-精髓与设计原理》
专业书籍
•《Linux内核》
•《深入解析Windows》第六版
“操作系统”的学习方法
主要学习的是 操作系统原理
-
C编程完成教材作业
-
掌握Linux Shell编程,玩转Linux
-
使用Java/C#等开发网络或多线程应用程序
-
使用工具完成相应试验
3.数据库
crud增删改查(程序员必须掌握的)
crud 增查改删,sql
增加(Create)、读取(Read)、更新(Update)和删除(Delete)。 crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
Create new records创造新的记录 read existing records阅读现有记录—主要的select * from users Update existing records更新现有的记录 Delete existing records.删除现有记录。
4.网络(计算机网络)
经典教材:(多遍阅读法)
《计算机网络教程》(自顶而下方法);计算机网络(第5版);计算机网路(系统方法)
学习前提:
编程语言(C/Java/Python);数据结构与算法;操作系统
学习方法:
科普读物;专业教材;特定领域技术书籍
加强途径:
开发网络应用;使用特定编程语言/平台的网络库
关键弄明白:
计算机是如何连接的;数据是如何在计算机网络中传送的;网络软件系统应该如何构建
“计算机网络”具体学习建议
-
理解分层架构
-
阅读相关科普书籍
-
动手编写网络程序
-
学会使用Wireshark之类工具抓包
三、编程语言:
从事软件开发必须要掌握的
-
C/C++ c数据结构与算法
-
Java/C# 面向对象;jdk学习算法
-
Python:大学、大数据时代很重要
-
JavaScript:web应用,动态语言,
无类型: 汇编 弱类型、静态类型 : C/C++ 弱类型、动态类型检查: Perl/PHP 强类型、静态类型检查 :Java/C# 强类型、动态类型检查 :Python, Scheme 静态显式类型 :Java/C 静态隐式类型 :Ocaml, Haskell
四、实用技术
各种流行的开发框架和工具
《 如何自学计算机专业课程 》
《 程序员是怎样练成的? 》 2017 年 7 月
《 人在 IT 计算机 专业学生职业发展规划》
解答:
计算机专业学习中观念坑人的?
• 学霸与学渣区别在哪?
• 计算机专业学习中有哪些做法是违背人类学习与认知规律的?
• 怎样选择一本合适的教材?
• 为什么我看不懂那些专业教材?
• 有哪些有效的计算机专业教材阅读方法?
• 如何以经济的方式应付大学里的专业课考试?
• 如何准备研究生入学考试中的计算机专业课?
• 针对具体课程给出一些学习建议:
数学、编程语言、软件工程、数据结构与算法、计算机网络、操作系统、计算机组成与设计……
深入钻研-特定技术领域
人工智能:我的最爱啦;机器学习(必须要学习好数学的基本知识,不然不好懂)
- 《人工智能》李开复、《智能时代》吴军
图形图像 :数据可视化
云计算
物联网
记忆
学习之道
- 学习是形成组块的方法,组块可以做成长期记忆。
- 紧密连接的知识集合,构成“组块”
- 人类学习的过程,就是把吸收的知识转换为组块,并将其移入长期记忆的过程。
–适当休息与及时整理,让信息有条理且彼此之间联结牢固
–短时间向大脑灌入过多的知识,不给消化吸收的时间,神经元之间的连接难以形成和巩固。(培训班,速成学习)
场景式学习法:
零散的组块,重组的过程,不是一次完成的,需要多次,建立了关联的组块
(1)我们要干特定事,解决特定的问题……
(2)我们主动学习,掌握足够多的组块
(3)我们应用组块,聪明地解决特定的问题
有效学习的基本原则
- 学习必须循序渐进,并且通常需要多次反复
- 学习需要高度可控、即时反馈和一个进度条
- 学习需要明确目标,不同的目标导致不同的学习策略
学习要遵循人的认知规律
- 从感性到理性
- 从具体到抽象
- 理论必须在实践中才能真正学好
知识之网的遍历(学习)方法
-
中心开花式的学习方法
-
从己经掌握的节点出发,进行广度遍历
-
从己经掌握的节点出发,进行深度遍历(推荐)
分类阅读法:偏理论
-
科普读物:(感性)了解背景,明了术语和概念,建立全局观
-
计算机专业教材:(理性)打好计算机科学理论基础,培养学习后劲
-
特定领域技术专著了解背景:(较为复杂与抽象)针对典型场景,总结开发经验,解决各种实际问题针对特定领域,深入探究其中的规律与奥秘
偏实践
-
21天/7天/零基础 :从实践入手,引发兴趣,带入大门
-
XXX框架/XXX开发:系统介绍特定领域基础开发技巧,教你学会使用这个框架或工具
知识的形成
最后配图
```sequence
title: 知识的形成
participant 零散的Knowledge as C
participant 组块化的Experience(经验) as S
participant 网状Creativity(创造力) as Z
C->S: 路漫漫其修远兮
S->Z: 想一想
note left of C:
note left of Z:
note right of S: 好好学也
note over C,S:
```
title: 知识的形成
participant 零散的Knowledge as C
participant 组块化的Experience(经验) as S
participant 网状Creativity(创造力) as Z
C->S: 路漫漫其修远兮
S->Z: 想一想
note right of S: 好好学也
他山之石
计算机考研基础
常用工具GUI图
GUI图
Tkinter : Tkinter
wxPython: wxPython
PyGTK: PyGTK
PyQt: PyQt
PySide: PySide
Web框
django: django
web2py: web2py
flask: flask
bottle: bottle
tornadoweb : tornadoweb
webpy: webpy
cherrypy: cherrypy
jinjs: jinja
科学计算
numpy: numpy
sciPy: scipy
pandas: pandas
blaze: blaze
cryptography: gyp!egepby
hashids: hashids
Paramiko: Paramiko
Passlib: Passlib
PyCrypto: PyCrypto
PyNacI: PyNacI
爬虫技术
urllib urIIib2 requests
scrapy: scrapy
pyspider: pyspider
portia: portia
htm12text: htm12text
BeautifulSoup: BeautifulSoup
Ixml: Ixml
selenium: selenium
mechanize: mechanize
PyQuery: pyquery
creepy: creepy
图像处理
bigmoyan: scikit-image
Python Imaging Library (PIL) :
pillow: pillow
python-qrcode: python-qrcode
自然语言处理
nltk: nltk
snownlp: snownlp
Pattern: pattern
TextBIob: textblob
Polyglot: polyglot
jieba: jieba
数据库驱动
mysql-python: mysql-python
PyMySQL: PyMySQL
PyMongo: PyMongo
编程书籍-附带链接
经典编程书籍大全
100+ 经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相关的经典书籍。
这个列表综合了伯乐在线网站以往推荐经典书籍文章中的列表,以及在微信和微博中被广泛推荐的好书。虽然已经包括了100多本,覆盖的面也比较全。仍然有很多方面需要补充,而且相信还有很多没有被收录的好书。欢迎大家在 issues 中推荐或自荐。
-
计算机系统与网络
- 《图灵的秘密:他的生平、思想及论文解读》
- 《计算机系统概论》
- 《深入理解Linux内核》
- 《深入Linux内核架构》
- 《TCP/IP详解 卷1:协议》
- 《Linux系统编程(第2版)》
- 《Linux内核设计与实现(第3版)》
- 《深入理解计算机系统(原书第3版)》
- 《计算机程序的构造和解释(原书第2版)》
- 《编码:隐匿在计算机软硬件背后的语言》
- 《性能之颠:洞悉系统、企业与云计算》
- 《UNIX网络编程 卷1:套接字联网API(第3版)》
- 《UNIX网络编程 卷2:进程间通信》
- 《Windows核心编程(第5版)》
- 《WireShark网络分析就这么简单》
- 《WireShark网络分析的艺术》
-
编程通用
- 《设计原本》
- 《编程原本》
- 《代码大全》
- 《UNIX编程艺术》
- 《代码整洁之道》
- 《编程珠玑(第2版)》
- 《编程珠玑(续)》
- 《软件调试的艺术》
- 《修改代码的艺术》
- 《编程语言实现模式》
- 《编写可读代码的艺术》
- 《解析极限编程:拥抱变化》
- 《精通正则表达式(第3版)》
- 《编译原理(第2版)》龙书
- 《重构:改善既有代码的设计》
- 《七周七语言:理解多种编程范型》
- 《调试九法:软硬件错误的排查之道》
- 《程序设计语言:实践之路(第3版)》
- 《计算的本质:深入剖析程序和计算机》
- 《设计模式 : 可复用面向对象软件的基础》
- 《Head First 设计模式(中文版) 》(感谢@Great-Li-Xin 推荐 )
-
算法与数据结构
- 《算法(第4版)》
- 《算法导论(原书第2版)》
- 《Python算法教程》
- 《算法设计与分析基础(第3版)》
- 《学习 JavaScript 数据结构与算法》
- 《数据结构与算法分析 : C++描述(第4版)》
- 《数据结构与算法分析 : C语言描述(第2版)》
- 《数据结构与算法分析 : Java语言描述(第2版)》
-
职业修炼与规划
- 《大教堂与集市》
- 《卓有成效的程序员》
- 《程序员的职业素养》
- 《程序员修炼之道:从小工到专家》
- 《软件开发者路线图:从学徒到高手》
- 《我编程,我快乐: 程序员职业规划之道》
- 《程序员的思维修炼:开发认知潜能的九堂课》
- 《高效程序员的45个习惯:敏捷开发修炼之道(修订版)》
-
大师访谈
-
架构/性能
- 《架构即未来》
- 《微服务设计》
- 《大数据日知录》
- 《企业应用架构模式》
- 《Web性能权威指南》
- 《SRE:Google运维解密》
- 《发布!软件的设计与部署》
- 《高扩展性网站的 50 条原则》
- 《大型网站技术架构:核心原理与案例分析》
- 《恰如其分的软件架构:风险驱动的设计方法》
- 《软件系统架构:使用视点和视角与利益相关者合作(第2版)》
7. Linux / Unix
- 《Linux/Unix 系统编程手册》(感谢@geekgao 的推荐)
- 《Unix 环境高级编程(第3版)》
- 《Unix/Linux 编程实践教程》
- 《鸟哥的 Linux 私房菜(基础学习篇)》和《鸟哥的 Linux 私房菜(服务器架设篇)》
- 《Linux 命令行与 shell 脚本编程大全(第3版)》
- 《只是为了好玩 : Linux 之父林纳斯自传》
Web前端
- 《高性能 JavaScript》
- 《锋利的 jQuery(第2版)》
- 《JavaScript 忍者秘籍》(感谢@joker-danta 补充推荐)
- 《编写可维护的 JavaScript》
- 《你不知道的 JavaScript(上)》
- 《你不知道的 JavaScript(中)》
- 《JavaScript 权威指南(第6版)》
- 《JavaScript 语言精粹(修订版)》
- 《JavaScript DOM编程艺术 (第2版)》
- 《JavaScript 高级程序设计(第3版)》
- 《JavaScript 异步编程:设计快速响应的网络应用》
- 《JavaScript设计模式与开发实践》
- 《JavaScript框架设计(第2版)》
- 《Effective JavaScript:编写高质量JavaScript代码的68个有效方法》
- 《HTML5 权威指南》
- 《HTML5 秘籍(第2版)》
- 《HTML5 与 CSS3 基础教程(第八版)》
- 《CSS 揭秘》
- 《CSS 设计指南(第3版)》
- 《CSS 权威指南(第3版)》
- 《深入浅出 HTML 与 CSS》
- 《ES6 标准入门(第三版)》
- 《深入理解 ES6》
Java开发
- 《Java8 实战》
- 《Java并发编程实战》
- 《Java性能权威指南》
- 《Java程序员修炼之道》
- 《实战Java高并发程序设计》
- 《Java编程思想 (第4版)》
- 《深入理解Java虚拟机(第2版)》
- 《Effective java 中文版(第2版)》
- 《Java核心技术·卷1:基础知识(原书第9版)》
- 《Java核心技术·卷2:高级特性(原书第9版)》
.NET/.NET Core
- 《C# 6.0 本质论》
- 《果壳中的C#:C#5.0权威指南》
- 《你必须知道的.NET(第2版)》
- 《深入理解C#(第3版)》
- 《Effective C#: 50 Specific Ways to Improve Your C#, Third Edition》
- 《More Effective C# (Includes Content Update Program): 50 Specific Ways to Improve Your C#, 2nd edition》
- 《Async in C# 5.0: Unleash the Power of Async》
- 《C#并发编程经典实例》
- 《C#多线程编程实战(原书第2版)》
- 《CLR via C#(第4版)》
- 《.NET本质论 第1卷:公共语言运行库》
- 《.NET探秘 : MSIL权威指南》
- 《Pro .NET Performance》
- 《Shared Source CLI Essentials》
- 《.NET 高级调试》
- 《Microsoft.NET 和 Windows 应用程序调试》
- 《微软.NET 程序的加密与解密》
- 《.NET Development Using the Compiler API》
- 《.NET设计规范 : 约定、惯用法与模式》
- 《编写高性能的.NET代码》
- 《Building Microservices with .NET Core》
- 《Microservices in .NET Core, with Examples in NancyFX》
Python
- 《集体智慧编程》
- 《笨办法学Python》
- 《Python基础教程》
- 《Python源码剖析》
- 《Head First Python》
- 《与孩子一起学编程》
- 《Python学习手册(第4版)》
- 《Python Cookbook(第3版)》
- 《Python参考手册(第4版)》
- 《Python核心编程(第3版)》
- 《Python科学计算(第2版)》
- 《利用 Python 进行数据分析》
- 《Think Python:像计算机科学家一样思考Python(第2版)》
- 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》
- 《Python绝技:运用Python成为顶级黑客》
- 《Flask Web开发:基于Python的Web应用开发实战》
Android
iOS
PHP
C语言
C++
- 《C++标准库》
- 《C++编程思想》
- 《C++语言的设计与演化》
- 《C++程序设计原理与实践》
- 《C++ Primer (中文第5版)》
- 《C++ Primer习题集(第5版) 》
- 《C++程序设计语言(第1-3部分)(原书第4版) 》
- 《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版) 》
- 《More Effective C++:35个改善编程与设计的有效方法(中文版) 》
机器学习和数据挖掘
- 《数据之巅》
- 《矩阵分析》
- 《机器学习》
- 《统计学习方法》
- 《机器学习导论》
- 《推荐系统实践》
- 《机器学习实战》
- 《Web数据挖掘》
- 《深入浅出统计学》
- 《模式分类(第2版)》
- 《概率论与数理统计》
- 《统计学习基础(第2版)(英文) 》
- 《数据挖掘:概念与技术(第3版)》
- 《数据挖掘:实用机器学习工具与技术(原书第3版)》
- 《大数据:互联网大规模数据挖掘与分布式处理(第2版)》
数据库
- 《数据库系统概念》 感谢@noisnemid 推荐
- 《数据库系统实现》
- 《SQL应用重构》
- 《SQL Cookbook》
- 《高性能MySQL (第3版)》
- 《深入浅出SQL(中文版)》
- 《MySQL技术内幕 : InnoDB存储引擎(第2版)》
- 《深入浅出MySQL : 数据库开发、优化与管理维护》
- 《收获,不止SQL优化:抓住SQL的本质》
- 《SQL Server 性能优化与管理的艺术》
- 《SQL Server性能调优实战》
- 《T-SQL性能调优秘笈:基于SQL Server 2012窗口函数》
测试
- 《探索式软件测试》
- 《有效的单元测试》
- 《Google软件测试之道》
项目与团队
- 《人月神话》
- 《快速软件开发》
- 《人件(原书第3版)》
- 《门后的秘密:卓越管理的故事》
- 《极客与团队:软件工程师的团队生存秘笈》
- 《硝烟中的 Scrum 和 XP》 (感谢@geekgao 的推荐。
求职面试
编程之外
- 《暗时间》
- 《数学之美》
- 《赢得朋友》
- 《精益创业》
- 《批判性思维》
- 《世界是数字的》
- 《程序员的数学》
- 《程序员健康指南》
- 《禅与摩托车维修艺术》
- 《关键对话:如何高效能沟通》
- 《写作法宝:非虚构写作指南》
- 《黑客与画家 : 来自计算机时代的高见》
- 《软件随想录(卷1)》《软件随想录(卷2)》
- 《如何把事情做到最好:改变全球9800万人的人生指导书》
参考文献