我们先看计算机科学有哪些子领域。
学术领域有:
- 计算理论
- 信息和编码理论
- 算法和数据结构
- 形式化方法
- 程序设计语言
实践领域有:
- 计算机体系结构
- 并行计算和分布式系统
- 实时系统和嵌入式系统
- 操作系统
- 计算机网络
- 科学计算
- 安全性和密码学
- 人工智能(模式识别、机器学习、数据挖掘、信息提取)
- 计算机图形学、计算机视觉、多媒体
- 数据库和大规模数据处理
- 万维网
- 自然语言处理和语音
- 人机交互
- 软件工程
现在要讨论的是,有没有一个项目,其中要用到所有领域的知识。
首先是所有项目都要用到的,编程语言、算法与数据结构、软件工程。没有编程语言不能写代码,稍微上档次的项目都会用到各种专用或通用算法与各种简单或复杂的数据结构,而实现一个大项目总会用到软件工程的知识。
然后从CS的实践领域中挑选出本科生应该掌握的课程:操作系统、计算机网络、Web、编译原理、计算机图形学、编译原理、数据库、汇编、密码学,附赠一个数据挖掘。
把课程与项目联想起来:
操作系统 ---- 写一个操作系统
编译原理 ---- 写一个语言
计算机网络 ---- 写一个web服务器
Web ---- 写一个网站
图形学 ---- 一个跟图像处理有关的项目
数据库 ---- 写一个数据库
汇编 ---- 用汇编写点东西
密码学 ---- 写一个加密系统
可见除了汇编与图形学不好找项目外,其他科目都可以找到一个最终任务。
现在问题就来了,数据挖掘哪家强?
不对,问题是怎样用一个项目去覆盖这些科目。
当我们要实现一个数据库系统时,我们要设计SQL语言,这与编译原理的知识可以互动。
而我们实现web服务器时,也需要设计一个网站,而这个网站如果能用自己设计的语言来写就更好了。
在实现操作系统的时候,用到汇编。
关于图形学,我能想到的最好的项目时开发一个游戏。而且是网络游戏,这样会用到计算机网络的知识,而客户端与服务器之间的通信要用到密码学,玩家的游戏数据又可以用来玩数据挖掘。
综合以上,覆盖所有科目的项目就是:自己用汇编知识以及C语言写一个操作系统,然后为这个系统开发一门专用的语言,并用图形学与计算机网络的知识制作一个该操作系统上的网络游戏,游戏客户端与服务器之间的通信要用密码学知识加密,玩家的数据储存在自己实现的数据库系统上,实现一个web服务器并用自己开发的语言编写一个网站作为游戏的官网,最后把游戏玩家的数据用来数据挖掘。