What every computer science major should know

What every computer science major should know

* Portfolio versus resume

一个简历永远也说不完程序员的能力,每一个计算机科学专业应建立一个投资组合。投资组合可以像个人博客一样简单,每个项目或成就都有一个帖子

* Technical communication

现代计算机科学家必须有说服​​力地将他们的想法传达给非程序员。建议用演示用具 如:ppt keynote等

* An engineering core

线性代数 概率 物理学 幸亏自己是个理科生 学过

* The Unix philosophy

掌握基本命令和熟悉系统

* Systems administration

合理并安全的管理自己的系统和网络 

* Programming languages

程序员不应该随着潮流上升和下降,学习第n语言的难度是第n-1难度的一半

Racket:作为Lisp的全功能方言

C:C在编程嵌入式系统时仍然没有竞争对手。

JavaScript:动态,高阶语言(如Python,Ruby和Perl)中流行的语义模型的良好代表。

Squeak:是Smalltalk的现代方言,是最纯粹的面向对象语言。它赋予了“面向对象”的本质。

Java:

Standard ML:Hindley-Milner型系统是现代计算领域最伟大(但鲜为人知)的成就之一。

虽然复杂性呈指数级增长,但Hindley-Milner中的类型推断对于人类感兴趣的程序来说总是很快。

类型系统足够丰富,可以表达复杂的结构不变量。事实上,它是如此丰富,以至于良好类型的程序通常没有错误。

Prolog:逻辑编程

Scala:建立在Java虚拟机之上,与现有的Java代码库兼容,因此,它最有可能成为Java的后继者。

Haskell:最接近任何主要编程语言的纯数学编程。

C++:必须学

Assembly:学习编译器是学习汇编的最佳方式,任何汇编语言都可以。

* Discrete mathematics

通过代数操作和自然演绎证明了常规编程任务的共同推理。归纳证明涉及构造递归函数时使用的推理。

* Data structures and algorithms

掌握 哈希表 链表 树 二叉树 有向无向图

* Theory

掌握理论是研究生院研究的先决条件

* Architecture

从晶体管中了解计算机。对架构的理解应该包括标准的抽象级别:晶体管,门,加法器,多路复用器,触发器,ALU,控制单元,高速缓存和RAM。

* Operating systems

理解操作系统(我会自由地解释为包含运行时系统)变得尤为重要。

* Networking

必要的知识 7层模型 及每层对应的协议 功能

* Security

思考他们自己的代码如何受到攻击。

* Cryptography

必须知道如何对数据及代码进行加密和哈希存储。

创建自己的数字证书并在apache中设置https。

通过SSL连接的控制台Web客户端。

知道如何使用GPG; 如何对ssh使用公钥认证; 以及如何加密目录或硬盘。

* Software testing

实践才知道错在哪

* User experience design

应该知道接口需要能够轻松执行与任务频率成正比的任务,并乘以其重要性。

* Visualization

现代世界是数据的海洋,利用人类感知的局部最大值是理解它的关键。

* Parallelism

并行性需要深入了解架构:多核,高速缓存,总线,GPU等。重要技能

* Software engineering

学习如何通过大型现有代码库进行攻击和操作是大多数程序员必须掌握的技能,

* Formal methods

每个计算机科学家都应该至少使用一个定理证明器。

* Graphics and simulation

没有比图形和模拟更好的方法来教授聪明的编程或对优化工作的充分理解。

* Robotics

很吸引人

* Artificial intelligence

AI

* Machine learning

加倍强调了解概率和统计学的必要性。

* Databases

关系型 非关系型如nosql  数据库的建模 数据库的执行过程 

你可能感兴趣的:(What every computer science major should know)