[翻译]每个计算机专业的学生应该知道的知识(一)

原文地址:matt.might.net/articles/wh…html

摘要:因为计算机科学领的飞速发展,要想辨识出现代计算机科学学位包含哪些知识,是一件具备挑战性的事情。

“什么是每个计算机专业的学生应该知道的知识?”,教职员工们正在参与这场讨论,我汇总了个人想法做为这个问题的答案。git

我试着把这个问题做为下面四个问题的结合来回答:程序员

  • 每一个学生应该知道什么才能得到一份好的工做
  • 每一个学生应该知道什么才能维持终身就业
  • 每一个学生应该知道什么才能进入研究生院
  • 每一个学生应该知道什么才能对社会有利

我下面的想法包含与现代计算机相关的通常原则特别推荐。 计算机专业的学生,请自由使用这篇文章做为自学指南。github

若是有任何添加和删除的建议,请发电子邮件或推特给我。
邮箱:matt-blog@might.net 推特:http://www.twitter.com/mattmightweb

更新:谢谢您的建议和提醒,当我收到后,我会将其整理进文档,以保持积极更新。算法

做品集 VS 简历

计算机科学项目从工程和数学中脱离而出,采起了一种基于简历的方法来招聘毕业生。shell

一份简历没法说明程序员的能力。数据库

每个计算机专业的学生应该创建一个做品集。编程

做品集应该和我的博客同样简单,上面有每个项目或成就的文章。一个更好些的做品集应该包含每一个项目的文章以及可公开浏览的代码(托管在github或者Google code上)。vim

应该连接并记录对开源软件的贡献。

代码做品集可以让雇主直接判断你的能力。

GPAs(平均分)和简历却作不到。

教授们应该设计课程项目来丰富做品集,学生在每个课程完结时,应该花时间去更新做品集。

做品集例子:

技术交流

计算机科学中的孤狼是一种濒临灭绝的物种。

现代计算机科学家必须习惯于和非程序员有说服力地、清晰地交流。

在较小的公司,程序员是否能和管理人员交流想法,可能会关系到公司的成败。

不幸的是,经过增长一门课程没法解决这个问题。(尽管技术交流方面的扎实课程并不会有任何坏的影响)

须要更多的课程提供学生机会,去展现他们的工做,并经过口头表达来保护他们的想法。

特别推荐

建议学生掌握一个像PPT和(我最喜欢)Keynote同样的展现工具。(抱歉,虽然我很喜欢基于LaTeX的展现工具,但这些工具太过静态)

对于制做美观的数学文档,LaTex是最好的选择。

全部技术文档的书面做业都应该用LaTeX提交。

推荐阅读

工程核心

计算机科学不彻底等同于工程学。
可是,足够接近。

计算机科学家会发现本身和工程师一块儿工做。

计算机科学家和传统的工程师须要说一样的语言---一门来源于实时分析,线性代数,几率论和物理的语言。

计算机科学家应该经过电磁场来研究物理学。可是,要作到这一点,它们须要经过多元微积分(以及用于良好度量的微分方程)来处理。

在进行声音信号仿真时,掌握几率和线性代数(一般是线性代数)是无比重要的。在解释结果时,没有任何东西能够代替对统计学的扎实理解。

推荐阅读:

Unix哲学

计算机科学家应该适应并实践Unix计算哲学。 Unix哲学(相对于Unix自己)强调语言抽象和组成来实现计算。

在实践中,这意味着对命令行计算,文本文件配置,无IDE软件开发的概念感到满意。

特别推荐

因为Unix systems的流行,今天的计算机科学家应该能流利地掌握基本的Unix,包括以下能力:

  • 浏览和操做文件系统;
  • 用管道进行组合操做;
  • 习惯于用emacsvim编辑文件;
  • 给一个软件项目建立、修改和执行Makefile;
  • 写一个简单的shell脚本。

学生们在不了解Unix哲学的强大能力前会抵制它。所以,最好的方法是激发学生去完成在Unix上具备相对优点的有用任务。 好比:

  • 从给定的目录中找出占磁盘空间最大的5个文件夹。
  • 从计算机上找出重复的MP3文件(从内容判断,而不是文件名)
  • 取一列姓名,其名称和姓氏都是小写,对他们进行合理的调整。
  • 找出第二个字母是x,倒数第二个字母是n的全部英文单词。
  • 一台电脑的麦克风输入直接经过网络从另外一台电脑的扩音器输出。
  • 给定一个目录,将全部文件的文件名中的空格替换成下划线。
  • 报告web服务器中来自特定IP地址的最后十次错误访问。

推荐阅读

如下下内容正在翻译,敬请期待
系统管理
编程语言 离散数学
数据结构和算法
理论
计算机体系结构
操做系统
网络系统
安全
密码学
软件测试
用户体验设计
可视化
并行
软件工程
形式化方法
图形与仿真
机器人
人工智能
机器学习
数据库

相关文章
相关标签/搜索