非常理想的计算机科学知识结构,原则上每个CS毕业的同学都应该具备这些技能,不过包括我在内绝大部分同学都有欠缺,虽然毕业了,继续努力补上自己的缺陷。不愿意“浪费时间”去构建自己完备的知识体系,只能一辈子浪费时间。
一、理论
1、数学理论(书籍:《具体数学》《离散数学》《数理逻辑》)
(1)基础数学
(2)高等数学(极限理论)
(3)数论(Number Theory)
(4)离散数学(集合论、图论)
(5)数理逻辑
2、形式语言与自动机(Automata,书籍:《形式语言与自动机》)
3、几何理论(Geometry)
二、硬件(书籍:《Computer Architecture: A Quantitative Approach》)
1、计算机组成原理:计算机组成部件、CPU时间片、存储体系、IO接口、总线技术
2、计算机体系结构:多处理机、流水技术、指令调度
3、计算机微机原理:一种处理机的具体结构、引脚作用
4、数字电路:逻辑门电路、触发器、组合电路设计
三、机器语言编程
1、汇编程序设计(Assembly)
2、可执行文件格式
3、链接(Linking)与加载(Loading)
四、操作系统(书籍:《现代操作系统》《操作系统实现》)
1、进程与线程理论
2、段页式内存管理
3、文件系统
4、IO管理
5、内核与驱动
五、程序设计基础(书籍:《The Art of Computer Programming》)
1、数据结构(书籍:《数据结构与算法分析》)
2、算法
(1)算法分析(书籍:《算法分析》)
(2)算法设计(书籍:《算法导论》)
六、程序设计语言
1、编译原理(《编译原理》龙书)
2、C一定要会
3、C++/Java建议要会(《C++ Primer》《Effective C++》《Thinking in Java》)
4、C#/F#等新语言了解
5、Python/Perl/Shell等脚本语言掌握其一
七、编程框架和库
1、平台程序开发
(1)Windows程序设计(书籍:《Programming Windows》)
(2)Linux/Unix系统编程(书籍:《Advanced Programming in the UNIX Environment》)
(3)跨平台程序设计
2、程序库
(1)C++:STL/Boost/MFC/
(2)跨平台:GTK/wxWidgets/Qt
(3)Perl:CPAN
八、程序设计与软件工程
1、面向对象的程序设计方法,必须掌握(书籍:《深入浅出设计模式》《Thinking in UML》《The Unified Modeling Language User Guide》)
2、敏捷(Agile)、统一过程(RUP)、迭代方法(Iterative)建议掌握一些
3、调试和测试方法必须掌握一些
九、应用
1、计算机网络(书籍:《计算机网络》)
2、数据库(书籍:《数据库系统概念》《数据库系统实现》)
3、WEB应用
4、并行开发(Concurrent Programming)
5、分布式系统(Distributed System)