What every computer science major should know

What every computer science major should know

转载请注明出处:https://blog.csdn.net/jpch89/article/details/85276670



0. 原文

每个计算机科学专业的学生都应该知道的事
What every computer science major should know


1. 单词、短语与句型

coalesce:合并,结合,联合
benefit society:回馈社会
factor into:考虑到
a command of sth.:对于某事的掌握
second-to-last:倒数第二个
errant:流浪的
sneer at:嘲笑,蔑视
remain without rival in doing sth.:做某事无可匹敌
embodiment:体现,化身,具体化
crown jewel:王冠上的宝石(意思是 最珍贵的部分
nitty-gritty:细节,本质
tractability:温顺,易处理
cryptography:密码学


2. 翻译、摘录与批注

Given the expansive growth in the field, it’s become challenging to discern what belongs in a modern computer science degree.

My own faculty is engaging in this debate, so I’ve coalesced my thoughts as an answer to the question, “What should every computer science major know?”

这个开篇可以用在 GT 作文里面。

作者从四个维度回答问题:

  • 怎样找到一份好工作
  • 怎样保持终身雇佣状态
  • 怎样进入研究生院学习
  • 怎样回馈社会 benefit society

My thoughts below factor into both general principles and specific recommendations relevant to the modern computing landscape.

factor into A and BAB 纳入考虑

扫描二维码关注公众号,回复: 4735219 查看本文章

项目集 portfolio 比简历 resume 更能体现程序员的能力。

  • 简单的项目集:可以做一个个人博客,把每个项目和成就写成一篇博文。
  • 更好的项目集:每个项目做一个页面,代码可以让公众浏览(可以托管于 github 或者 Google code
  • 对开源项目的贡献要给出链接和记录。

技术沟通能力很重要
推荐掌握一种演示工具:比如 PowerPoint 或者 Keynote

要具备基本的工程师素养
推荐学习实分析、线性代数、微积分、概率论和物理。
In constructing sound simulations, a command of probability and (often times) linear algebra is invaluable.

a command of sth. 对于某事的掌握

要熟悉命令行交互模式,文本文件配置和没有集成开发环境的软件开发流程。

掌握基本的 Unix 系统操作

  • 操作文件系统
  • 使用管道 pipe 实现进程间通信
  • 使用 emacsvim 编辑文件
  • 掌握 Makefile
  • 写简单的 shell 脚本

系统管理
Some computer scientists sneer at systems administration as an “IT” task.
比如应该掌握:

  • 安装并管理 Linux 系统
  • 配置和编译 Linux 内核
  • 使用 digpingtraceroute 解决连接问题
  • 编译和配置 web 服务器(比如 apache
  • 编译和配置 DNS 镜像
  • 用文本编辑器维护一个网站
  • 制作网线

制作网线:???

编程语言
要知道如何自学一门新的编程语言,而不是等着学校教。
最好的学习编程语言的方式是学习多种编程语言和编程范式。
The difficulty of learning the nth language is half the difficulty of the (n-1)th.
n 门语言的学习难度是第 n-1 门语言的一半。
然而要 真正地 了解编程语言就是自己实现一个。至少要实现一个解释器 interpreter,最好是实现一个编译器 compiler

推荐的语言

没有 Python???

  • Racket
    Lisp 的一个方言。
  • C
    C remains without rival in programming embedded systems.
    C 语言在嵌入式系统编程中无可匹敌。
    推荐阅读:ANSI C by Kernighan and Ritchie
  • JavaScript
  • Squeak
    Smalltalk 的现代方言,可以学习面向对象编程。
  • Java
  • Standard ML
    Hindley-Milner system 的体现。
  • Prolog
    逻辑编程 logic programming。想要在其他编程范式中实现逻辑编程的时候,需要了解。另外一门逻辑语言是 miniKanren,它强调纯粹的逻辑编程,衍生出了逻辑编程的另一种风格:relational programming
  • Scala
    Scala 很好地融合了函数式编程和面向对象编程语言。它是 Java 应该有的样子。 Scala is what Java should have been.(意思是 Java 要向 Scala 好好学学。)
    Scala 基于 JVM,被认为是 Java 最有可能的继任者。

Java 最有可能的继任者难道不是 Kotlin

  • Haskell
    Haskell is the crown jewel of the Hindley-Milner family of languages.
    Haskell 最像是用纯数学在编程。
  • C++
    学就要学彻底,需要学它的模板和元编程。template meta-programming
  • Assembly
    任何一种汇编语言都可以,可以学 x86 的。
    学习编译器 compiler 是学习汇编的最好途径。

离散数学

数据结构和算法

结构
电脑的组成。
设计和仿真一个 CPU

操作系统

  • 在启动的时候打印 hello, world
  • 设计调度程序 scheduler
  • modify the page-handling policy

???

  • 建立自己的文件系统 file system

网络
推荐了解以下协议:

  • 802.3 and 802.11
  • IPv4 and IPv6
  • DNS, SMTP and HTTP

实现以下项目:

  • an HTTP client and daemon;
  • a DNS resolver and server; and
  • a command-line SMTP mailer.

安全
They need to develop a sense of defensive programming–a mind for thinking about how their own code might be attacked.
防御性编程,要预想自己的代码会被如何攻击。

密码学 Cryptography

未完待续…
2018.12.27 更新

猜你喜欢

转载自blog.csdn.net/jpch89/article/details/85276670
今日推荐