原文地址:matt.might.net/articles/wh…
摘要:由于计算机科学领的飞速发展,要想辨识出现代计算机科学学位包含哪些知识,是一件具有挑战性的事情。
“什么是每一个计算机专业的学生应该知道的知识?”,教职员工们正在参与这场讨论,我汇总了我的想法作为这个问题的答案。
我试着把这个问题作为下面四个问题的结合来回答:
- 每个学生应该知道什么才能
获得一份好的工作
? - 每个学生应该知道什么才能
维持终身就业
? - 每个学生应该知道什么才能
进入研究生院
? - 每个学生应该知道什么才能
对社会有利
?
我下面的想法包含与现代计算机相关的一般原则
和特别推荐
。
计算机专业的学生,请自由使用这篇文章作为自学指南。
如果有任何添加和删除的建议,请发电子邮件或推特给我。
邮箱:matt-blog@might.net
推特:http://www.twitter.com/mattmight
更新:谢谢您的建议和提醒,当我收到后,我会将其整理进文档,以保持积极更新。
作品集 VS 简历
计算机科学项目从工程和数学中脱离而出,采取了一种基于简历的方法来招聘毕业生。
一份简历无法说明程序员的能力。
每一个计算机专业的学生应该建立一个作品集。
作品集应该和个人博客一样简单,上面有每一个项目或成就的文章。一个更好些的作品集应该包含每个项目的文章以及可公开浏览的代码(托管在github或者Google code上)。
应该链接并记录对开源软件的贡献。
代码作品集能够让雇主直接判断你的能力。
GPAs(平均分)和简历却做不到。
教授们应该设计课程项目来丰富作品集,学生在每一个课程完结时,应该花时间去更新作品集。
作品集例子:
技术交流
计算机科学中的孤狼是一种濒临灭绝的物种。
现代计算机科学家必须习惯于和非程序员有说服力地、清晰地交流。
在较小的公司,程序员是否能和管理人员交流想法,可能会关系到公司的成败。
不幸的是,通过增加一门课程无法解决这个问题。(尽管技术交流方面的扎实课程并不会有任何坏的影响)
需要更多的课程提供学生机会,去展示他们的工作,并通过口头表达来保护他们的想法。
特别推荐
建议学生掌握一个像PPT和(我最喜欢)Keynote一样的展示工具。(抱歉,虽然我很喜欢基于LaTeX的展示工具,但这些工具太过静态)
对于制作美观的数学文档,LaTex是最好的选择。
所有技术文档的书面作业都应该用LaTeX提交。
推荐阅读
- Writing for Computer Science by Zobel.
- Even a Geek Can Speak by Asher.
- The LaTeX Companion.
- The TeXbook by Knuth. (Warning: Experts only.)
- Notes on Mathematical Writing.
- Simon Peyton-Jones's advice on How to Give a Good Research Talk.
- My advice on how to send and reply to email.
工程核心
计算机科学不完全等同于工程学。
但是,足够接近。
计算机科学家会发现自己和工程师一起工作。
计算机科学家和传统的工程师需要说同样的语言---一门来源于实时分析,线性代数,概率论和物理的语言。
计算机科学家应该通过电磁场来研究物理学。但是,要做到这一点,它们需要通过多元微积分(以及用于良好度量的微分方程)来处理。
在进行声音信号仿真时,掌握概率和线性代数(通常是线性代数)是无比重要的。在解释结果时,没有任何东西可以代替对统计学的扎实理解。
推荐阅读:
- Calculus by Spivak.
- All of Statistics: A Concise Course in Statistical Inference by Wasserman.
Unix哲学
计算机科学家应该适应并实践Unix计算哲学。 Unix哲学(相对于Unix本身)强调语言抽象和组成来实现计算。
在实践中,这意味着对命令行计算,文本文件配置,无IDE软件开发的概念感到满意。
特别推荐
由于Unix systems的流行,今天的计算机科学家应该能流利地掌握基本的Unix,包括如下能力:
- 浏览和操作文件系统;
- 用管道进行组合操作;
- 习惯于用
emacs
和vim
编辑文件; - 给一个软件项目创建、修改和执行Makefile;
- 写一个简单的shell脚本。
学生们在不了解Unix哲学的强大能力前会抵制它。因此,最好的方法是激发学生去完成在Unix上具有相对优势的有用任务。 比如:
- 从给定的目录中找出占磁盘空间最大的5个文件夹。
- 从计算机上找出重复的MP3文件(从内容判断,而不是文件名)
- 取一列姓名,其名称和姓氏都是小写,对他们进行合理的调整。
- 找出第二个字母是x,倒数第二个字母是n的所有英文单词。
- 一台电脑的麦克风输入直接通过网络从另一台电脑的扩音器输出。
- 给定一个目录,将所有文件的文件名中的空格替换成下划线。
- 报告web服务器中来自特定IP地址的最后十次错误访问。
推荐阅读
- The Unix Programming Environment by Kernighan and Pike.
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook by Kerrisk.
- Unix Power Tools by Powers, Peek, O'Reilly and Loukides.
- commandlinefu.
- Linux Server Hacks.
- The single Unix specification.
以下下内容正在翻译,敬请期待
系统管理
编程语言
离散数学
数据结构和算法
理论
计算机体系结构
操作系统
网络系统
安全
密码学
软件测试
用户体验设计
可视化
并行
软件工程
形式化方法
图形与仿真
机器人
人工智能
机器学习
数据库