原文链接:https://link.zhihu.com/?target=http%3A//matt.might.net/articles/what-cs-majors-should-know/

鉴于该领域的广泛发展,辨别现代计算机科学学位的内容变得具有挑战性。

我所在的学院也参与了这场辩论,所以我将自己的想法总结为答案来回答这样一个问题:“每个计算机科学专业的学生都应该知道什么?”

我试图将这个问题拆解成4个问题来回答:

  • 每个学生都应该知道什么才能找到一份好工作?
  • 每个学生都应该知道什么才能维持终身就业?
  • 每个学生都应该知道什么才能进入研究生院?
  • 每个学生应该知道什么才能造福社会?

我的以下想法包括与现代计算领域相关的一般原则和具体建议。

计算机科学专业的学生:随意将其用作自学指南。
请通过电子邮件或 tweet 提出添加和删除的建议。

更新:谢谢大家的建议和提醒!我会在收到它们时将它们合并起来,以保持这份动态文件。

作品集与简历

计算机科学专业,有别于工程和数学,采用基于简历的方法来招聘毕业生。

一份简历并不能代表程序员的能力。

每个计算机科学专业的学生都应该建立自己的作品集。

作品集可以像个人博客一样简单,每个项目或成就都有一篇文章。更好的作品集应该包括每个项目的页面和可公开浏览的代码(可能托管在 github 或 Google 代码上)。

作品集尤其要包含对开源的贡献。

作品集的代码可以让雇主直接判断程序员的能力。
而GPAs 和简历则没法做到这一点。

教授应该设计课程项目来给作品集留下深刻印象,学生在每门课程结束时应该花时间更新它们。

例子
Edward Yang’s web site.
迈克尔布拉德肖的网站。
Github 是我的简历。
技术交流
计算机科学中的孤狼是一种濒临灭绝的物种。

现代计算机科学家必须以有说服力的方式将他们的想法清晰地传达给非程序员。

在较小的公司中,程序员能否将自己的想法传达给管理层可能会影响公司的成败。

不幸的是,这并不能通过添加单个课程来解决(尽管技术交流方面的扎实课程并没有什么坏处)。

更多的课程需要让学生有机会展示他们的作品并通过口头陈述来捍卫他们的想法。

具体建议
我建议学生掌握 PowerPoint 或(我最喜欢的)Keynote 等演示工具。(抱歉,尽管我很喜欢它们,但基于 LaTeX 的演示工具太静态了。)

对于制作精美的数学文档,LaTeX 无与伦比。技术课程中的所有书面作业都应使用 LaTeX 提交。

推荐阅读
Zobel为计算机科学写作。
亚瑟即使是极客也会说话。
乳胶伴侣。
Knuth的 TeXbook。(警告:仅限专家。)
数学写作 笔记 。
Simon Peyton-Jones 关于如何进行良好研究演讲的建议 。
我对如何发送和回复电子邮件的建议。
工程核心
计算机科学不完全是工程学。

但是,已经足够接近了。

计算机科学家会发现自己与工程师一起工作。

计算机科学家和传统工程师需要使用同一种语言——一种植根于实分析、线性代数、概率和物理学的语言。

计算机科学家应该通过电磁学来研究物理学。但是,要做到这一点,他们需要通过多元微积分(和微分方程进行良好的衡量)。

在构建声音模拟时,概率和(通常)线性代数的命令是无价的。在解释结果时,对统计学的深刻理解是无可替代的。

推荐阅读
斯皮瓦克的微积分。
所有统计: Wasserman 的统计推断简明课程。
Unix哲学
计算机科学家应该熟悉并实践 Unix 计算哲学。

Unix 哲学(与 Unix 本身相反)是一种强调语言抽象和组合以影响计算的哲学。

在实践中,这意味着熟悉命令行计算、文本文件配置和无 IDE 软件开发的概念。

具体建议
鉴于 Unix 系统的流行,今天的计算机科学家应该精通基本的 Unix,包括以下能力:

导航和操作文件系统;
用管道组合进程;
使用emacs 和 轻松编辑文件vim;
为软件项目创建、修改和执行 Makefile;
编写简单的shell脚本。
学生将拒绝 Unix 哲学,除非他们了解它的力量。因此,最好挑战学生完成 Unix 具有比较优势的有用任务,例如:

在给定目录中查找占用空间最多的五个文件夹。
报告计算机上重复的 MP3(按文件内容,而不是文件名)。
列出名字和姓氏小写的名字,并适当地重新调整它们。
找出所有x第二个字母和n倒数第二个字母的英语单词。
通过网络将您的麦克风输入直接路由到另一台计算机的扬声器。
用给定目录的下划线替换文件名中的所有空格。
报告来自特定 IP 地址的最近十次对 Web 服务器的错误访问。
推荐阅读
Kernighan 和 Pike的 Unix 编程环境。
Linux 编程接口: Kerrisk 的Linux 和 UNIX 系统编程手册。
Powers、Peek、O’Reilly 和 Loukides 的Unix Power Tools。
命令行工具。
Linux 服务器黑客。
单一的 Unix 规范。
系统管理
一些计算机科学家嘲笑系统管理是一项“IT”任务。

这种想法是计算机科学家可以自学如何做技术人员可以做的任何事情。

这是真的。(理论上。)

然而,这种态度是错误的:计算机科学家必须能够胜任且安全地管理他们自己的系统和网络。

软件开发中的许多任务无需通过系统管理员即可最有效地执行。

具体建议
每个现代计算机科学家都应该能够:

安装和管理 Linux 发行版。
配置和编译 Linux 内核。
对与dig、 ping和 的连接进行故障排除 traceroute。
编译和配置一个 web 服务器,比如 apache。
编译和配置一个 DNS 守护进程,比如 bind。
使用文本编辑器维护网站。
剪断并压接网线。
推荐阅读
Nemeth、Synder、Hein 和 Whaley 所著的UNIX 和 Linux 系统管理手册。
编程语言
编程语言随着太阳周期的上升和下降。

程序员的职业不应该。

虽然教授与雇主相关的语言很重要,但学生学习如何自学新语言也同样重要。

学习如何学习编程语言的最好方法是学习多种编程语言和编程范式。

学习第n种语言的难度是第( n-1 )种语言难度的一半。

然而,要真正理解编程语言,必须实现一种。理想情况下,每个计算机科学专业的学生都会参加编译器课程。至少,每个计算机科学专业都应该实现一个解释器。

特定语言
以下语言提供了范式和实际应用的合理组合:

球拍;
C;
JavaScript;
吱;
爪哇;
标准ML;
序言;
梯子;
哈斯克尔;
C++; 和
集会。
球拍
Racket 作为 Lisp 的一种全功能方言,具有非常简单的语法。

对于一小部分学生来说,这种语法是一个障碍。

坦率地说,如果这些学生在接受外来句法制度方面存在根本性的心理障碍,即使是暂时的,他们也缺乏在计算机科学职业中生存的灵巧性。

Racket 强大的宏系统和用于高阶编程的工具彻底消除了数据和代码之间的界限。

如果教得正确,Lisp 就会解放。

推荐阅读
Felleisen、Finder、Flatt 和 Krishnamurthi 的《如何设计程序》。
球拍文档。
ANSI C
C 是对硅的简洁而无情的抽象。

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

学习 C 可以以其他语言无法做到的方式深入了解主要的冯诺依曼架构。

考虑到糟糕的 C 编程在缓冲区溢出安全漏洞的流行中扮演的重要角色,程序员学习如何正确编程 C 至关重要。

推荐阅读
ANSI C 由 Kernighan 和 Ritchie 编写。
JavaScript
JavaScript 是 Python、Ruby 和 Perl 等动态高阶语言中流行的语义模型的一个很好的代表。

作为网络的母语,其务实优势是独一无二的。

推荐阅读
JavaScript: Flanagan的权威指南。
JavaScript: Crockford的好部分。
有效的 JavaScript: Herman 的68 种利用 JavaScript 强大功能的具体方法。

Squeak 是 Smalltalk 的现代方言,是最纯粹的面向对象语言。

它赋予了“面向对象”的精髓。

推荐阅读
吱吱声简介
爪哇
Java 将继续流行太久而不能忽视它。

推荐阅读
Bloch 的Effective Java。
标准机器学习
标准 ML 是 Hindley-Milner 系统的干净体现。

Hindley-Milner 类型系统是现代计算中最伟大(但最不为人知)的成就之一。

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

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

推荐阅读
保尔森为工作程序员编写的机器学习。
Milner、Harper、MacQueen 和 Tofte对标准机器学习的定义。
序言
尽管在应用中存在利基,但逻辑编程是计算思维的另一种范式。

对于程序员可能需要在另一个范式中模拟它的那些实例,理解逻辑编程是值得的。

另一种值得学习的逻辑语言是miniKanren。miniKanren 强调纯(切不允许)逻辑编程。这种约束发展了一种称为关系编程的替代逻辑编程风格,它赋予 Prolog 程序通常不具备的属性。

推荐阅读
立即学习序言!
另一个教程。
迷你看人。
梯子
Scala 是函数式和面向对象编程语言的精心设计的融合。Scala 应该是 Java 的样子。

它构建在 Java 虚拟机之上,与现有的 Java 代码库兼容,因此,它是 Java 最有可能的继承者。

推荐阅读
Odersky、Spoon 和 Venners 的Scala 编程。
Wampler 和 Payne编写的 Scala 编程。
哈斯克尔
Haskell 是 Hindley-Milner 语言家族的皇冠上的明珠。

充分利用惰性,Haskell 最接近于任何主要编程语言的纯数学编程。

推荐阅读
由 Lipovaca 为您学习 Haskell。
O’Sullivan、Goerzen 和 Stewart 的Real World Haskell。
ISO C++
C++ 是一种必要的邪恶。

但是,既然必须传授,就必须全面传授。

特别是,计算机科学专业的学生应该掌握甚至 模板元编程。

推荐阅读
Stroustrup的 C++ 编程语言。
C++ 模板: 由 Vandevoorde 和 Josuttis 编写的完整指南。
Bentley 的编程珍珠。
集会
任何汇编语言都可以。

由于 x86 很受欢迎,因此也可能如此。

学习编译器是学习汇编的最佳方式,因为它可以让计算机科学家直观地了解高级代码将如何转换。

具体建议
计算机科学家应该了解生成式编程(宏);词法(和动态)范围;关闭;延续;高阶函数;动态调度;子类型;模块和函子;和 monad 作为与任何特定语法不同的语义概念。

推荐阅读
Abelson、Sussman 和 Sussman对计算机程序的结构和解释。
Queinnec 的Lisp in Small Pieces。
离散数学
计算机科学家必须牢牢掌握形式逻辑和证明。通过代数操作和自然演绎的证明涉及常规编程任务常见的推理。归纳证明涉及用于构造递归函数的推理。

计算机科学家必须精通正式的数学符号,并能对基本的离散结构进行严格的推理:集合、元组、序列、函数和幂集。

具体建议
对于计算机科学家来说,重要的是要涵盖以下方面的推理:

树木;
图表;
正式语言;和
自动的。
学生应该学习足够的数论来学习和实施常见的密码协议。

推荐阅读
如何证明: Velleman的结构化方法。
波利亚如何解决它。
数据结构和算法
学生当然应该看到常见(或罕见但不合理有效)的数据结构和算法。

但是,比了解特定算法或数据结构(通常很容易查找)更重要的是,计算机科学家必须了解如何设计算法(例如,贪婪的动态策略)以及如何跨越算法之间的差距理想及其实施的本质。

具体建议
至少,寻求稳定长期工作的计算机科学家应该了解以下所有内容:

哈希表;
链表;
树木;
二叉搜索树;和
有向图和无向图。
计算机科学家应该准备好实施或扩展对这些数据结构进行操作的算法,包括搜索元素、添加元素和删除元素的能力。

为了完整起见,计算机科学家应该知道每个算法的命令式和函数式版本。

推荐阅读
CLRS。
Knuth 的 任何 计算机编程艺术系列。
理论
掌握理论是研究生院研究的先决条件。

理论在为问题提供硬边界时(或当它提供一种绕过最初看似硬边界的方法时)是无价的。

计算复杂性可以合理地声称是所有计算机“科学”中为数不多的真正具有预测性的理论之一。

计算机科学家必须知道易处理性和可计算性的界限在哪里。忽视这些限制在最好的情况下会导致挫折,在最坏的情况下会导致失败。

具体建议
在本科阶段,理论至少应涵盖计算模型和计算复杂性。

计算模型应涵盖有限状态自动机、正则语言(和正则表达式)、下推自动机、上下文无关语言、形式语法、图灵机、lambda 演算和不可判定性。

在本科阶段,学生至少应该学习足够的复杂性来理解 P、NP、NP-Hard 和 NP-Complete 之间的区别。

为了避免留下错误的印象,学生应该通过简化为 SAT 和使用现代 SAT 求解器来解决 NP 中的一些大问题。

推荐阅读
Sipser的计算理论导论。
Papadimitriou 的计算复杂性。
Sedgewick 和 Wayne 的算法。
Cormen、Leiserson、Rivest 和 Stein 的算法简介。
建筑学
对计算机体系结构的深刻理解是无可替代的。

计算机科学家应该从晶体管开始理解计算机。

对架构的理解应包括标准抽象级别:晶体管、门、加法器、多路复用器、触发器、ALU、控制单元、缓存和 RAM。

在可预见的未来,了解高性能计算的 GPU 模型将非常重要。

具体建议
对缓存、总线和硬件内存管理的良好理解对于在现代系统上实现良好性能至关重要。

为了更好地掌握机器架构,学生应该设计和模拟一个小型 CPU。

推荐阅读
nand2tetris,它从头开始构建计算机。
Patterson 和 Hennessy 的计算机组织和设计。
Drepper 撰写的“每个程序员都应该了解的关于内存的知识”。
操作系统
任何足够大的程序最终都会成为操作系统。

因此,计算机科学家应该了解内核如何处理系统调用、分页、调度、上下文切换、文件系统和内部资源管理。

对操作系统的良好理解仅次于对实现性能的编译器和体系结构的理解。

在编写没有操作系统的嵌入式系统时,了解操作系统(我会自由地解释为包括运行时系统)变得尤为重要。

具体建议
对于学生来说,接触真实的操作系统很重要。使用 Linux 和虚拟化,这比以往任何时候都容易。

为了更好地理解内核,学生可以:

在启动过程中打印“hello world”;
设计自己的调度器;
修改页面处理策略;和
创建自己的文件系统。
推荐阅读
Love 的Linux 内核开发。
联网
鉴于网络无处不在,计算机科学家应该对网络中的网络堆栈和路由协议有深入的了解。

在不可靠的传输协议(如 IP)之上构建高效、可靠的传输协议(如 TCP)的机制对计算机科学家来说不应该是魔法。应该是核心知识。

计算机科学家必须了解协议设计中涉及的权衡——例如,何时选择 TCP,何时选择 UDP。(如果程序员也大规模使用 UDP,他们需要了解拥塞对社会的更大影响。)

具体建议
鉴于现代程序员遇到网络编程的频率,了解现有标准的协议会很有帮助,例如:

802.3 和 802.11;
IPv4 和 IPv6;和
DNS、SMTP 和 HTTP。
计算机科学家应该了解数据包冲突解决中的指数回退和拥塞控制中涉及的加法增加乘法减少机制。

每个计算机科学家都应该实现以下内容:

一个 HTTP 客户端和守护进程;
DNS 解析器和服务器;和
命令行 SMTP 邮件程序。
任何学生都不应该在不通过wireshark嗅探他们的教师的谷歌查询的情况下通过介绍性网络课程。

要求所有学生在 IP 上从头开始实施可靠的传输协议可能太过分了,但我可以说这对我作为学生的个人来说是一次变革性的体验。

推荐阅读
Stevens、Fenner 和 Rudoff编写的Unix 网络编程。
安全
安全的可悲事实是,大多数安全漏洞来自草率的编程。更可悲的事实是,许多学校在培训程序员以保护他们的代码方面做得很差。

计算机科学家必须了解程序可能受到破坏的方式。

他们需要培养一种防御性编程意识——一种思考他们自己的代码可能会被攻击的思维。

安全是一种最好分布在整个课程中的培训:每个学科都应该警告学生其固有的弱点。

具体建议
至少,每个计算机科学家都需要了解:

社会工程学;
缓冲区溢出;
整数溢出;
代码注入漏洞;
比赛条件;和
特权混淆。
一些读者指出,计算机科学家还需要了解基本的 IT 安全措施,例如如何选择合法的好密码以及如何使用 iptables 正确配置防火墙。

推荐阅读
Metasploit: Kennedy、O’Gorman、Kearns 和 Aharoni的渗透测试指南。
安德森的安全工程。
密码学
密码学使我们的大部分数字生活成为可能。

计算机科学家应该理解并能够实现以下概念,以及这样做的常见陷阱:

对称密钥密码系统;
公钥密码系统;
安全的哈希函数;
挑战-响应认证;
数字签名算法;和
阈值密码系统。
由于这是密码系统实现中的一个常见错误,每个计算机科学家都应该知道如何为手头的任务获取 足够的随机数。

至少,正如几乎每一次数据泄露所表明的那样,计算机科学家需要知道如何对密码进行加盐和散列存储。

具体建议
每个计算机科学家都应该乐于使用带有手动统计工具的前现代密码系统来破解密文。

RSA 很 容易实现 ,每个人都应该这样做。

每个学生都应该创建自己的数字证书并在 apache 中设置 https。(做到这一点出奇的困难。)

学生还应该编写一个通过 SSL 连接的控制台 Web 客户端。

作为严格的实际问题,计算机科学家应该知道如何使用 GPG;如何对 ssh 使用公钥认证;以及如何加密目录或硬盘。

推荐阅读
Ferguson、Schneier 和 Kohno 的密码工程。
软件测试
软件测试必须分布在整个课程中。

软件工程课程可以涵盖测试的基本风格,但没有什么可以替代艺术实践。

学生应根据他们上交的测试用例进行评分。

我使用学生提交的测试用例来对抗所有其他学生。

学生们似乎不太关心开发防御性测试用例,但是当涉及到沙袋他们的同学时,他们会大发雷霆。

用户体验设计
程序员经常为其他程序员编写软件,或者更糟的是,为自己编写软件。

用户界面设计(或更广泛地说,用户体验设计)可能是计算机科学中最被低估的方面。

即使在教授中,也存在一种误解,认为用户体验是一种无法教授的“软”技能。

实际上,现代用户体验设计植根于人因工程和工业设计的经验制定原则。

如果不出意外,计算机科学家应该知道接口需要使执行任何任务的难易程度与任务的频率乘以其重要性成正比。

实际上,每个程序员都应该熟悉用 HTML、CSS 和 JavaScript 设计可用的 Web 界面。

推荐阅读
Paul Graham关于 Web 2.0的 文章。
Spolsky 撰写的“每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求”。
HTML 和 CSS:由 Duckett设计和构建网站。
JavaScript: Flanagan的权威指南。
可视化
良好的可视化是以人类将其视为信息的方式呈现数据。这不是一件容易的事情。

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

推荐阅读
Tufte对定量信息的可视化显示。
并行性
并行又回来了,而且比以往任何时候都更丑陋。

不幸的事实是,利用并行性需要深入了解架构:多核、缓存、总线、GPU 等。

而且,练习。大量练习。

具体建议
目前还不清楚并行编程的“最终”答案是什么,但已经出现了一些特定于领域的解决方案。

目前,学生应该学习 CUDA 和 OpenCL。

线程是并行性的脆弱抽象,特别是当涉及缓存和缓存一致性时。但是,线程既流行又棘手,因此值得学习。Pthreads 是一个值得学习的可移植的线程库。

对于任何对大规模并行感兴趣的人来说,MPI 是一个先决条件。

在原则方面,map-reduce 似乎经久不衰。

软件工程
软件工程中的原则变化与编程语言一样快。

在团队软件构建实践中,一门很好的实践课程提供了工作中固有的陷阱的实用知识。

几位读者建议学生分成三人一组,领导者的角色轮流完成三个不同的项目。

学习如何通过现有的大型代码库进行攻击和操纵是大多数程序员必须掌握的一项技能,最好在学校而不是在工作中学习。

具体建议
所有学生都需要了解集中式版本控制系统(如 svn)和分布式版本控制系统(如 git)。

当 gdb 和 valgrind 等调试工具最终成为必要时,它们的工作知识会大有帮助。

推荐阅读
Sink通过示例进行版本控制。
形式方法
随着对安全、可靠软件需求的增加,正式方法可能最终成为交付它的唯一手段。

目前,软件的形式化建模和验证仍然具有挑战性,但该领域的进展是稳定的:每年都变得更容易。

在今天的计算机科学专业学生的一生中,甚至可能有一天正式的软件构建是一项预期的技能。

每个计算机科学家都应该至少适度地使用一个定理证明器。(我认为哪个不重要。)

学习使用定理证明器会立即影响编码风格。

例如,一个人会本能地对写一个没有涵盖所有可能性的matchorswitch陈述感到过敏。

并且,在编写递归函数时,定理证明者的用户有一种消除无根据的强烈冲动。

推荐阅读
软件基础。
图形和模拟
没有比图形更受“聪明”支配的学科了。

该领域被驱动,甚至被定义为“足够好”。

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

我学到的编码技巧有一半以上来自我对图形的研究。

具体建议
只需不到 100 行代码即可构建简单的光线追踪器。

计算出在线框 3D 引擎中执行透视 3D 投影所需的转换是一种很好的心理卫生。

像 BSP 树这样的数据结构和像 z-buffer 渲染这样的算法是巧妙设计的很好例子。

在图形和模拟方面,还有更多。

推荐阅读
Lengyel 的3D 游戏编程和计算机图形数学。
机器人
机器人技术可能是教授入门编程最吸引人的方式之一。

此外,随着机器人技术的成本不断下降,门槛正在通过,这将推动个人机器人技术革命。

对于那些会编程的人来说,难以想象的个人物理自动化程度即将到来。

相关文章
机器人的多点触控手势控制。
人工智能
如果不是因为它对早期计算历史的巨大影响,计算机科学家应该研究人工智能。

虽然智能机器的最初梦想似乎遥不可及,但人工智能激发了许多实用领域,如机器学习、数据挖掘和自然语言处理。

推荐阅读
Russell 和 Norvig 的人工智能。
机器学习
除了其突出的技术优势外,“相关工程师”的职位空缺之多,表明每个计算机科学家都应该掌握机器学习的基础知识。

机器学习加倍强调需要理解概率和统计。

具体建议
在本科阶段,核心概念应该包括贝叶斯网络、聚类和决策树学习。

推荐阅读
米切尔的机器学习。
数据库
数据库太常见且太有用了,不容忽视。

了解为数据库引擎提供动力的基本数据结构和算法很有用,因为程序员通常会在更大的软件系统中重新实现数据库系统。

关系代数和关系演算在子图灵计算模型中脱颖而出,成为杰出的成功案例。

与 UML 建模不同,ER 建模似乎是一种对软件工件的设计和约束进行可视化编码的合理机制。

具体建议
一个可以设置和操作 LAMP 堆栈的计算机科学家是一个好主意,并且远离经营自己的公司需要付出很多努力。

推荐阅读
按日期分类的SQL 和关系理论。

非特定阅读建议
霍夫施塔特的哥德尔、埃舍尔、巴赫。
Nick Black 给 MS 学生的建议。

还有什么?
我的建议受到我自己知识盲点的限制。
我没有在这里列出哪些应该包括在内?

相关文章
如何:获得任期
将 BibTeX 解析为 S-Expressions、JSON、XML 和 BibTeX
PAANDA:学者的保密协议
大学提示、技巧和窍门
攻读博士学位的技巧
如何:回应同行评议
研究生的12个决议
如何:同行评审科学工作
电肉
同行堡垒:科学战场
你的问题的形状
低成本学术博客的 6 个技巧
博士的插图指南
CRAPL:学术界的开源许可证
为什么同行评审应该使用 TOR
学术求职建议

[翻译]每个计算机科学专业的学生都应该知道的相关推荐

  1. 忽悠自由主义_所有教育工作者都应该知道的16种自由主义

    忽悠自由主义 当海蒂·埃利斯(Heidi Ellis)于5月28日至30日在费城德雷塞尔大学(Drexel University)举行的今年的"教授开放源代码夏季体验"大会上发言时 ...

  2. 每个团队都应知道的API安全威胁

    原文发表于kubernetes中文社区,为作者原创翻译 ,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 目录 每个团队都应知道的API安全威胁 分页和资源限制不安全 如 ...

  3. 关于软件开发,都应该知道的10个常识

    2011年,马克·安德列森(Marc Andreessen)写了一篇文章,预言"软件吞噬世界".观点主要有两个:第一,许多传统业务正在被软件公司所取代:第二,所有其他公司都发现,他 ...

  4. 每个人都应该知道的 18 个强大的 Excel 快捷键!

    Microsoft Excel 是一种程序,可让您在计算机或移动设备上高效地执行各种任务.它是全球小型和大型企业主要使用的重要工具. 如果您是一位经验丰富的用户,那么您可能知道 Excel 快捷键并正 ...

  5. 使用Mono平台前,请牢记产品观点(所有.Net程序员都建议知道的)

    技术领域有很多让人深感困惑的地方,不管是架构师.设计师还是程序员,在完成任务之余,偶尔都有自责的地方:程序员在使用新技术完成任务的时候,有时会觉的自己旧技术都没有完全掌握,使用新技术有些好高骛远:设计 ...

  6. 每一个JavaScript开发者都应该知道的10道面试题

    JavaScript十分特别.而且差点儿在每一个大型应用中起着至关关键的数据.那么,究竟是什么使JavaScript显得与众不同,意义非凡? 这里有一些问题将帮助你了解其真正的奥妙所在:   1.你能 ...

  7. 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)

    概述 射频发射器是现代通信的重要组成部分.射频发射器由核心射频组件设计和组装而成,具有多种不同的形式和应用.我们经常想到无线通信中的射频发射器,但这个概念同样适用于有线应用,如有线电视.蜂窝电话.雷达 ...

  8. pd种知道每个数据的类型_每个数据科学家都应该知道的5个概念

    pd种知道每个数据的类型 意见 (Opinion) 目录 (Table of Contents) Introduction介绍 Multicollinearity多重共线性 One-Hot Encod ...

  9. 每个程序员都必须知道的 8 种数据结构

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 快速介绍8种数据结构 数据结构是一种特殊的组织和存储数据的方式,可 ...

最新文章

  1. SAX解析xml (遍历DOM树各节点)
  2. 34 CO配置-控制-产品成本控制-成本对象控制-期末结算-检查差异变式
  3. python数据参数_python 的参数总结
  4. Airbnb 面试题汇总
  5. CE教程第九关——处理共用代码
  6. 【必备知识】线激光扫描三维成像原理
  7. 龙卷风路径_ae龙卷风路径
  8. AM调制解调的Matlab和Simulink实现
  9. VB程序启动后如何在通知区域显示
  10. 操作系统之哲学原理 第2版
  11. Ipad2 使用心得
  12. 系统集成项目管理之项目质量管理
  13. NOIP2016——蚯蚓
  14. Linux安装-gedit
  15. oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解
  16. GPS定位(五)-高斯投影正反算C程序
  17. 安全运维 | Linux系统基线检查
  18. 行政区划代码查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
  19. python单链表排序_奇数结点升序偶数结点降序的单链表排序(Python实现)
  20. 《***生态文明思想学习纲要》学习辅导

热门文章

  1. 2010年-2020年数学二真题之常微分方程
  2. 网络版计算机化系统3q认证,计算机化系统验证
  3. 【Win10】若干睡眠问题及对策
  4. java的time类型_java有关Time类型数据的接收和转换
  5. 华为交换机VLAN设置(接口类型:hybrid)(一)
  6. 什么是瀑布开发?适用于哪些场景?有哪些瀑布开发管理系统?
  7. Android逆向分析(1) 反编译看看手Q口令红包的实现原理
  8. 使用Microsoft.VisualBasic提供的进度对话框
  9. 【精选】ARMv8/ARMv9架构入门到精通-[前言]
  10. Tensorflow fine-tunning AlexNet