From what-cs-majors-should-know

Portfolio versus resume

作品集vs简历

  • Every computer science major should build a portfolio.
  • 每个计算机科学专业的学生都应该建立一个作品集
  • A portfolio could be as simple as a personal blog, with a post for each project or accomplishment.
  • 作品集可以像个人博客一样简单,每个项目或成就都有一篇文章。
  • A better portfolio would include per-project pages, and publicly browsable code (hosted perhaps on github ).
  • 一个更好的作品集应该包括每个项目的页面,以及可公开浏览的代码(可能托管在github)。
  • Contributions to open source should be linked and documented.
  • 对开源的贡献应该被链接和记录。
  • Professors should design course projects to impress on portfolios, and students, at the conclusion of each course, should take time to update them.
  • 教授应该设计课程项目来给作品集留下深刻印象,而学生在每门课程结束时,应该花时间更新它们。

  • example


  • Edward Yang's web site.
  • Github is my resume.
  • Cryptography

    密码学

  • Cryptography is what makes much of our digital lives possible.
  • 密码学使我们的数字生活成为可能。
  • Computer scientists should understand and be able to implement the following concepts, as well as the common pitfalls in doing so:
  • 计算机科学家应该理解并能够实现以下概念,以及这样做的常见陷阱:
  • Since it's a common fault in implementations of cryptosystems, every computer scientist should know how to acquire a sufficiently random number for the task at hand.
  • 获取足够的随机数 在密码系统实现中是一个常见问题,应该知道如何为手头的事获取足够的随机数。
  • At the very least, as nearly every data breach has shown, computer scientists need to know how to salt and hash passwords for storage.
  • 至少,正如几乎每一次数据泄露所表明的那样,需要知道如何对密码进行盐化和散列存储。

  • Specific recommendations


  • Every computer scientist should have the pleasure of breaking ciphertext using pre-modern cryptosystems with hand-rolled statistical tools.
  • 应该对 使用密码系统和手工统计工具 破解密文 感兴趣。
  • RSA. is easy enough to implement that everyone should do it.
  • RSA很容易实现,应该去做。
  • Every student should create their own digital certificate and set up https in apache. (It's surprisingly arduous to do this.)
  • 每个学生都应该创建自己的数字证书,并在apache中设置https。(做这件事出奇地困难。)
  • Student should also write a console web client that connects over SSL.
  • 学生还应该编写一个通过SSL连接的控制台web客户端。
  • As strictly practical matters, computer scientists should know how to use GPG; how to use public-key authentication for ssh; and how to encrypt a directory or a hard disk.
  • 作为严格的实际问题,计算机科学家应该知道如何使用GPG;如何对ssh使用公钥认证;以及如何加密目录或硬盘。
  • User experience design

    用户体验设计

  • Programmers too often write software for other programmers, or worse, for themselves.
  • 程序员经常为其他程序员编写软件,更糟的是,为自己编写软件
  • User interface design (or more broadly, user experience design) might be the most underappreciated aspect of computer science.
  • 用户界面设计(或者更广泛地说,用户体验设计)可能是计算机科学中最被低估的方面。
  • There's a misconception, even among professors, that user experience is a "soft" skill that can't be taught.
  • 甚至在教授中也存在一种误解,即用户体验是一种无法教授的“软”技能。
  • In reality, modern user experience design is anchored in empirically-wrought principles from human factors engineering and industrial design.
  • 事实上,现代用户体验设计 是 基于人因工程和工业设计的 经验原则
  • "human factors engineering" 可以翻译为 "人因工程",指的是研究人类行为和心理对工程系统设计的影响,旨在优化系统的易用性、安全性和效率性。 "industrial design" 翻译为 "工业设计",是一种将艺术、商业和工程学融合在一起的设计领域,致力于设计和开发各种产品、设备或系统,使其在美学、功能和实用性方面达到最佳状态。
  • If nothing else, computer scientists should know that interfaces need to make the ease of executing any task proportional to the frequency of the task multiplied by its importance.
  • 如果没有别的,计算机科学家应该知道,接口需要使执行任何任务变容易 重要性与任务的频率成正比。
  • As a practicality, every programmer should be comfortable with designing usable web interfaces in HTML, CSS and JavaScript.
  • 作为一种实用性技能,每个程序员都应该熟悉使用 HTML、CSS 和 JavaScript 设计易用的 Web 界面。

  • Recommended reading


  • Paul Graham's essay on Web 2.0.
  • "The Minimum Every Software Developer Must Know About Unicode and Character Sets by Spolsky.
  • HTML and CSS
  • JavaScript
  • Visualization

    可视化

  • Good visualization is about rendering data in such a fashion that humans perceive it as information. This is not an easy thing to do.
  • 良好的可视化是将数据呈现为信息的一种方式,以便人类能够感知。这并不是一件容易的事情。
  • The modern world is a sea of data, and exploiting the local maxima of human perception is key to making sense of it.
  • 现代世界是一个数据的海洋,而充分利用人类感知的局部最大值是理解这一切的关键。

  • Recommended reading


  • The Visual Display of Quantitative Information by Tufte.
  • Formal methods

    形式化方法

  • As the demands on secure, reliable software increase, formal methods may one day end up as the only means for delivering it.
  • 随着对安全可靠软件的需求不断增加,形式化方法可能有朝一日成为交付此类软件的唯一手段。
  • At present, formal modeling and verification of software remains challenging, but progress in the field is steady: it gets easier every year.
  • 目前,软件的形式化建模和验证仍然具有挑战性,但该领域的进展是稳步的:每年都在变得更容易。
  • There may even come a day within the lifetime of today's computer science majors where formal software construction is an expected skill.
  • 甚至在当今计算机科学专业学生的生命周期内,形式化软件构建可能成为一个必备技能。
  • Every computer scientist should be at least moderately comfortable using one theorem prover. (I don't think it matters which one.)
  • 每位计算机科学家至少应该能够适度地使用一个定理证明器。(我认为使用哪个定理证明器并不重要。)
  • Learning to use a theorem prover immediately impacts coding style.
  • 学习使用定理证明器会立即影响编码风格。
  • For example, one feels instinctively allergic to writing a match or switch statement that doesn't cover all possibilities.
  • 例如,人们本能地对于不覆盖所有可能性的匹配或切换语句感到排斥。
  • And, when writing recursive functions, users of theorem provers have a strong urge to eliminate ill-foundedness.
  • 而且,在编写递归函数时,定理证明器的用户会强烈地倾向于消除非良好基础。

  • Recommended reading.


  • Foundations
  • Graphics and simulation

    图形和仿真

  • There is no discipline more dominated by "clever" than graphics.
  • 在计算机领域,没有比图形学更被“聪明”主导的学科了。
  • The field is driven toward, even defined by, the "good enough."
  • 该领域朝着甚至被定义为“足够好”的方向发展。
  • As such, there is no better way to teach clever programming or a solid appreciation of optimizing effort than graphics and simulation.
  • 因此,教授聪明的编程或对优化工作的充分理解,没有比图形学和模拟更好的方法了。
  • Over half of the coding hacks I've learned came from my study of graphics.
  • 我学到的编码技巧超过一半来自于我的图形学学习。

  • Specific recommendations


  • Simple ray tracers can be constructed in under 100 lines of code.
  • 简单的光线追踪器可以用不到100行的代码构建。
  • It's good mental hygiene to work out the transformations necessary to perform a perspective 3D projection in a wireframe 3D engine.
  • 在线框3D引擎中进行透视3D投影所需的变换对大脑的健康是有好处的。
  • Data structures like BSP trees and algorithms like z-buffer rendering are great examples of clever design.
  • 像BSP树这样的数据结构和像z缓冲渲染这样的算法是聪明设计的很好例子。
  • In graphics and simulation, there are many more.
  • 在图形学和模拟领域,还有更多。

  • Recommended reading


  • Mathematics for 3D Game Programming and Computer Graphics by Lengyel.
  • Databases

    数据库

  • Databases are too common and too useful to ignore.
  • 数据库太常见且太有用,不容忽视。
  • It's useful to understand the fundamental data structures and algorithms that power a database engine, since programmers often enough reimplement a database system within a larger software system.
  • 了解支撑数据库引擎的基本数据结构和算法非常有用,因为程序员经常在更大的软件系统中重新实现数据库系统。
  • Relational algebra and relational calculus stand out as exceptional success stories in sub-Turing models of computation.
  • 关系代数和关系演算在次图灵计算模型中是非常成功的案例。
  • Unlike UML modeling, ER modeling seems to be a reasonable mechanism for visualizing and encoding the design of and constraints upon a software artifact.
  • 与UML建模不同,ER建模似乎是一种合理的机制,用于可视化并编码软件构件的设计和约束。

  • Specific recommendations


  • 具体建议
  • A computer scientist that can set up and operate a LAMP stack is one good idea and a lot of hard work away from running their own company.
  • 一个能够设置和操作LAMP堆栈的计算机科学家,离创办自己的公司只有一个好主意和许多辛苦的工作。

  • Recommended reading


  • SQL and Relational Theory by Date.
  • Technical communication

  • Lone wolves in computer science are an endangered species.
  • 计算机科学中的孤狼是一种濒危物种。
  • Modern computer scientists must practice persuasively and clearly communicating their ideas to non-programmers.
  • 现代计算机科学家必须有说服力地、清晰地向非程序员传达他们的想法。
  • In smaller companies, whether or not a programmer can communicate her ideas to management may make the difference between the company's success and failure.
  • 在较小的公司中,程序员能否将自己的想法传达给管理层,可能是公司成功与失败之间的关键。
  • Unfortunately, this is not something fixed with the addition of a single class (although a solid course in technical communication doesn't hurt).
  • 不幸的是,这并不是通过添加一个单一课程就能解决的问题(尽管一门扎实的技术沟通课程也是很有帮助的)。
  • More classes need to provide students the opportunity to present their work and defend their ideas with oral presentations.
  • 更多的课程需要为学生提供展示他们工作成果、用口头演讲为自己的想法辩护的机会。

  • Specific recommendations


  • I would recommend that students master a presentation tool like PowerPoint or (my favorite) Keynote. (Sorry, as much as I love them, LaTeX-based presentation tools are just too static.)
  • 我建议学生掌握类似PowerPoint或(我最喜欢的)Keynote这样的演示工具。(抱歉,尽管我很喜欢它们,但基于LaTeX的演示工具太过静态。)
  • For producing beautiful mathematical documentation, LaTeX has no equal. All written assignments in technical courses should be submitted in LaTeX.
  • 要制作漂亮的数学文档,LaTeX无与伦比。技术课程中的所有书面作业都应以LaTeX格式提交。

  • Recommended reading


  • 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.